 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
quantum
Anmeldedatum: 19.06.2008 Beiträge: 29
|
Verfasst am: So Jun 29, 2008 7:00 pm Titel: Radio-Buttons über Loop übergeben Daten nicht |
|
|
Hallo.
ich erstelle farblich hinterlegt Radio Buttons über einen Loop.
(Das Script für die farbliche Hinterlegung der Radios stammt übrigens von denick)
Es stellt die Radios dann zwar korrekt dar, übergibt aber keinerlei Daten für die weitere Berechnung.
Woran kann dies liegen? Habe schon alle möglichen Sachen ausprobiert und die Hilfethemen durchforstet. Aber noch keine Lösung in Sicht.
Ich bin Anfäger und benötige hierfür eine Korrektur des Scripts.
Ich bin fast sicher, das ich mir hinterher wieder mal an den Kopf langen muss, weil ich nicht selbst drauf gekommen bin
Hier der Beispiel-Code:
| Code: | #NoEnv
Gui, Margin, 10, 10
; Beginn der Radio Buttons
/* -----------------------------------------------------------------
Aktiv := 0x00FF00 (Definiert die Farbe des Radio-Hintergrundes)
(A_Index = 1 ? " vRBG Checked" : "") (Gibt an, welches beim Start als Checked aktiviert ist.)
vRBG (Weist der Radiogruppe einen eindeutigen Parameter zu für die Ausführung)
%A_LoopField% (Definiert den Namen des Radios)
RBGA := 1 (Gibt an, welches Radio beim Start farblich hinterlegt ist.)
*/ -----------------------------------------------------------------
Aktiv := 0x00FF00
Radio_Farbe = rot,blau,grün
Loop, parse, Radio_Farbe, `,
{
Gui, Add, Radio
, % "y10 w50 h20 gRBG hwndRBID" . A_Index . (A_Index = 1 ? " vRBG Checked" : "") ; Nebeneinander
, %A_LoopField%
}
RBGA := 1
Control_Colors(RBID%RBGA%, "Set", Aktiv)
; Ende der Radio Buttons
Gui, Add, DropDownList, x10 y40 w90 h200 vDDL1 , 1||2|3
Gui, Add, Edit, x10 y70 w90 h20 +ReadOnly vAusgabe,
Gui, Add, Button, x10 y100 w90 h30 gBerechnen, Berechnen
Treffer =
(
1|rot=Montag
2|blau=Dienstag
3|grün=Mittwoch
)
Gui, +LastFound
Control_Colors(WinExist(), "RCB", 0, 0)
Gui, Show, , Farbliche Radios
Return
; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
Eingabe = %DDL1%|%RBG%
; Standardausgabe
Ausgabe = Unbekannt!
Loop, Parse, Treffer, `n, `r
{
StringSplit, T, A_LoopField, =
If Eingabe = %T1%
{
Ausgabe = %T2%
Break
}
}
GuiControl, ,Ausgabe, %Ausgabe%
Return
; Ausführung der entsprechenden Radiogruppe
RBG:
Gui, Submit, NoHide
If (RBG != RBGA) {
Control_Colors(RBID%RBGA%, "Set", "Default")
Control_Colors(RBID%RBG%, "Set", Aktiv)
WinSet, Redraw, , % "ahk_id " . RBID%RBGA%
WinSet, Redraw, , % "ahk_id " . RBID%RBG%
RBGA := RBG
}
Return
Control_Colors(Hwnd, Msg, wParam, lParam = 0)
{
Critical
Static OldWinProc := "" ; Ursprüngliche Fensterprozedur
Static NewWinProc := "" ; Neue Fensterprozedur
Static SetValue := "Set" ; Werte übernehmen
Static Register := "RCB" ; RegisterCallBack
Static ValueList := "" ; WerteListe
; Aufruf als Fensterprozedur?
If (A_EventInfo <> NewWinProc) {
If (Msg = SetValue) {
If (RegExMatch(ValueList, "m)^" . (Hwnd +0) . "\|")) {
If (wParam = "Default") {
ValueList := RegExReplace(ValueList
, "m)^" . (Hwnd + 0) . "\|.*$"
, "")
} Else {
ValueList := RegExReplace(ValueList
, "m)^" . (Hwnd + 0) . "\|.*$"
, (Hwnd + 0) . "|"
. (wParam + 0) . "|"
. (lParam + 0))
}
} Else {
ValueList .= (Hwnd + 0) . "|"
. (wParam + 0) . "|"
. (lParam + 0) . "`r`n"
}
Return
}
If (Msg = Register) {
If (NewWinProc = "") {
NewWinProc := RegisterCallback("Control_Colors","",4)
OldWinProc := DllCall("SetWindowLong"
, UInt, Hwnd
, Int, -4
, Int, NewWinProc
, UInt)
}
Return
}
Return
}
; 0x0133 : WM_CTLCOLOREDIT
; 0x0138 : WM_CTLCOLORSTATIC
If (Msg = 0x0133 Or Msg = 0x0135 Or Msg = 0x0138) {
If (RegExMatch(ValueList, "m)^"
. (lParam + 0) . "\|(?P<BG>\d+)\|(?P<TX>\d+)$"
, C)) {
DllCall("SetTextColor", UInt, wParam, UInt, CTX)
DllCall("SetBkColor", UInt, wParam, UInt, CBG)
Return, DllCall("CreateSolidBrush", UInt, CBG)
}
}
Return DllCall("CallWindowProcA"
, UInt, OldWinProc
, UInt, Hwnd
, UInt, Msg
, UInt, wParam
, UInt, lParam)
}
GuiClose:
GuiEscape:
ExitApp |
Ich hoffe sehr, das mir einer von Euch bei der Lösung helfen kann.
Vielen Dank und Gruss,
Quantum |
|
| Nach oben |
|
 |
Z Gecko Gast
|
Verfasst am: So Jun 29, 2008 7:18 pm Titel: |
|
|
| Zitat: |
Woran kann dies liegen? Habe schon alle möglichen Sachen ausprobiert und die Hilfethemen durchforstet. Aber noch keine Lösung in Sicht. |
Das nächste mal empfehle ich Dir, sich mal anzuschauen, was für Werte da eigentlich verglichen werden. Zwei MsgBoxen machen alles viel klarer.
| Code: | #NoEnv
Gui, Margin, 10, 10
; Beginn der Radio Buttons
/* -----------------------------------------------------------------
Aktiv := 0x00FF00 (Definiert die Farbe des Radio-Hintergrundes)
(A_Index = 1 ? " vRBG Checked" : "") (Gibt an, welches beim Start als Checked aktiviert ist.)
vRBG (Weist der Radiogruppe einen eindeutigen Parameter zu für die Ausführung)
%A_LoopField% (Definiert den Namen des Radios)
RBGA := 1 (Gibt an, welches Radio beim Start farblich hinterlegt ist.)
*/ -----------------------------------------------------------------
Aktiv := 0x00FF00
Radio_Farbe = rot,blau,grün
Loop, parse, Radio_Farbe, `,
{
Gui, Add, Radio
, % "y10 w50 h20 gRBG hwndRBID" . A_Index . (A_Index = 1 ? " vRBG Checked" : "") ; Nebeneinander
, %A_LoopField%
}
RBGA := 1
Control_Colors(RBID%RBGA%, "Set", Aktiv)
; Ende der Radio Buttons
Gui, Add, DropDownList, x10 y40 w90 h200 vDDL1 , 1||2|3
Gui, Add, Edit, x10 y70 w90 h20 +ReadOnly vAusgabe,
Gui, Add, Button, x10 y100 w90 h30 gBerechnen, Berechnen
Treffer =
(
1|rot=Montag
2|blau=Dienstag
3|grün=Mittwoch
)
Gui, +LastFound
Control_Colors(WinExist(), "RCB", 0, 0)
Gui, Show, , Farbliche Radios
Return
; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
Eingabe = %DDL1%|%RBG%
MsgBox, Eingabe = %Eingabe%
; Standardausgabe
Ausgabe = Unbekannt!
Loop, Parse, Treffer, `n, `r
{
StringSplit, T, A_LoopField, =
MsgBox, Vergleichswert = %T1% - Eingabe = %Eingabe%
If Eingabe = %T1%
{
Ausgabe = %T2%
Break
}
}
GuiControl, ,Ausgabe, %Ausgabe%
Return
; Ausführung der entsprechenden Radiogruppe
RBG:
Gui, Submit, NoHide
If (RBG != RBGA) {
Control_Colors(RBID%RBGA%, "Set", "Default")
Control_Colors(RBID%RBG%, "Set", Aktiv)
WinSet, Redraw, , % "ahk_id " . RBID%RBGA%
WinSet, Redraw, , % "ahk_id " . RBID%RBG%
RBGA := RBG
}
Return
Control_Colors(Hwnd, Msg, wParam, lParam = 0)
{
Critical
Static OldWinProc := "" ; Ursprüngliche Fensterprozedur
Static NewWinProc := "" ; Neue Fensterprozedur
Static SetValue := "Set" ; Werte übernehmen
Static Register := "RCB" ; RegisterCallBack
Static ValueList := "" ; WerteListe
; Aufruf als Fensterprozedur?
If (A_EventInfo <> NewWinProc) {
If (Msg = SetValue) {
If (RegExMatch(ValueList, "m)^" . (Hwnd +0) . "\|")) {
If (wParam = "Default") {
ValueList := RegExReplace(ValueList
, "m)^" . (Hwnd + 0) . "\|.*$"
, "")
} Else {
ValueList := RegExReplace(ValueList
, "m)^" . (Hwnd + 0) . "\|.*$"
, (Hwnd + 0) . "|"
. (wParam + 0) . "|"
. (lParam + 0))
}
} Else {
ValueList .= (Hwnd + 0) . "|"
. (wParam + 0) . "|"
. (lParam + 0) . "`r`n"
}
Return
}
If (Msg = Register) {
If (NewWinProc = "") {
NewWinProc := RegisterCallback("Control_Colors","",4)
OldWinProc := DllCall("SetWindowLong"
, UInt, Hwnd
, Int, -4
, Int, NewWinProc
, UInt)
}
Return
}
Return
}
; 0x0133 : WM_CTLCOLOREDIT
; 0x0138 : WM_CTLCOLORSTATIC
If (Msg = 0x0133 Or Msg = 0x0135 Or Msg = 0x0138) {
If (RegExMatch(ValueList, "m)^"
. (lParam + 0) . "\|(?P<BG>\d+)\|(?P<TX>\d+)$"
, C)) {
DllCall("SetTextColor", UInt, wParam, UInt, CTX)
DllCall("SetBkColor", UInt, wParam, UInt, CBG)
Return, DllCall("CreateSolidBrush", UInt, CBG)
}
}
Return DllCall("CallWindowProcA"
, UInt, OldWinProc
, UInt, Hwnd
, UInt, Msg
, UInt, wParam
, UInt, lParam)
}
GuiClose:
GuiEscape:
ExitApp |
Viel Spaß beim "an den Kopf langen". |
|
| Nach oben |
|
 |
quantum
Anmeldedatum: 19.06.2008 Beiträge: 29
|
Verfasst am: So Jun 29, 2008 7:40 pm Titel: |
|
|
| Z Gecko hat Folgendes geschrieben: | | Zitat: |
Woran kann dies liegen? Habe schon alle möglichen Sachen ausprobiert und die Hilfethemen durchforstet. Aber noch keine Lösung in Sicht. |
Das nächste mal empfehle ich Dir, sich mal anzuschauen, was für Werte da eigentlich verglichen werden. Zwei MsgBoxen machen alles viel klarer.
Viel Spaß beim "an den Kopf langen". |
Ja. Das ist schon klar. Der Loop der Radio stellt ja eben nur die Radios dar.
Wie muss ich das Ganze erweitern, damit der auch den dazugehörenden Werte ausgibt? |
|
| Nach oben |
|
 |
Z Gecko Gast
|
Verfasst am: So Jun 29, 2008 8:00 pm Titel: |
|
|
Gar nicht!
Du mußt die Abfrage ändern.
| Code: | #NoEnv
Gui, Margin, 10, 10
; Beginn der Radio Buttons
/* -----------------------------------------------------------------
Aktiv := 0x00FF00 (Definiert die Farbe des Radio-Hintergrundes)
(A_Index = 1 ? " vRBG Checked" : "") (Gibt an, welches beim Start als Checked aktiviert ist.)
vRBG (Weist der Radiogruppe einen eindeutigen Parameter zu für die Ausführung)
%A_LoopField% (Definiert den Namen des Radios)
RBGA := 1 (Gibt an, welches Radio beim Start farblich hinterlegt ist.)
*/ -----------------------------------------------------------------
Aktiv := 0x00FF00
Radio_Farbe = rot,blau,grün
Loop, parse, Radio_Farbe, `,
{
Gui, Add, Radio
, % "y10 w50 h20 gRBG hwndRBID" . A_Index . (A_Index = 1 ? " vRBG Checked" : "") ; Nebeneinander
, %A_LoopField%
}
RBGA := 1
Control_Colors(RBID%RBGA%, "Set", Aktiv)
; Ende der Radio Buttons
Gui, Add, DropDownList, x10 y40 w90 h200 vDDL1 , 1||2|3
Gui, Add, Edit, x10 y70 w90 h20 +ReadOnly vAusgabe,
Gui, Add, Button, x10 y100 w90 h30 gBerechnen, Berechnen
Treffer =
(
1|1=Montag
2|2=Dienstag
3|3=Mittwoch
)
Gui, +LastFound
Control_Colors(WinExist(), "RCB", 0, 0)
Gui, Show, , Farbliche Radios
Return
; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
Eingabe = %DDL1%|%RBG%
MsgBox, Eingabe = %Eingabe%
; Standardausgabe
Ausgabe = Unbekannt!
Loop, Parse, Treffer, `n, `r
{
StringSplit, T, A_LoopField, =
MsgBox, Vergleichswert = %T1% - Eingabe = %Eingabe%
If Eingabe = %T1%
{
Ausgabe = %T2%
Break
}
}
GuiControl, ,Ausgabe, %Ausgabe%
Return
; Ausführung der entsprechenden Radiogruppe
RBG:
Gui, Submit, NoHide
If (RBG != RBGA) {
Control_Colors(RBID%RBGA%, "Set", "Default")
Control_Colors(RBID%RBG%, "Set", Aktiv)
WinSet, Redraw, , % "ahk_id " . RBID%RBGA%
WinSet, Redraw, , % "ahk_id " . RBID%RBG%
RBGA := RBG
}
Return
Control_Colors(Hwnd, Msg, wParam, lParam = 0)
{
Critical
Static OldWinProc := "" ; Ursprüngliche Fensterprozedur
Static NewWinProc := "" ; Neue Fensterprozedur
Static SetValue := "Set" ; Werte übernehmen
Static Register := "RCB" ; RegisterCallBack
Static ValueList := "" ; WerteListe
; Aufruf als Fensterprozedur?
If (A_EventInfo <> NewWinProc) {
If (Msg = SetValue) {
If (RegExMatch(ValueList, "m)^" . (Hwnd +0) . "\|")) {
If (wParam = "Default") {
ValueList := RegExReplace(ValueList
, "m)^" . (Hwnd + 0) . "\|.*$"
, "")
} Else {
ValueList := RegExReplace(ValueList
, "m)^" . (Hwnd + 0) . "\|.*$"
, (Hwnd + 0) . "|"
. (wParam + 0) . "|"
. (lParam + 0))
}
} Else {
ValueList .= (Hwnd + 0) . "|"
. (wParam + 0) . "|"
. (lParam + 0) . "`r`n"
}
Return
}
If (Msg = Register) {
If (NewWinProc = "") {
NewWinProc := RegisterCallback("Control_Colors","",4)
OldWinProc := DllCall("SetWindowLong"
, UInt, Hwnd
, Int, -4
, Int, NewWinProc
, UInt)
}
Return
}
Return
}
; 0x0133 : WM_CTLCOLOREDIT
; 0x0138 : WM_CTLCOLORSTATIC
If (Msg = 0x0133 Or Msg = 0x0135 Or Msg = 0x0138) {
If (RegExMatch(ValueList, "m)^"
. (lParam + 0) . "\|(?P<BG>\d+)\|(?P<TX>\d+)$"
, C)) {
DllCall("SetTextColor", UInt, wParam, UInt, CTX)
DllCall("SetBkColor", UInt, wParam, UInt, CBG)
Return, DllCall("CreateSolidBrush", UInt, CBG)
}
}
Return DllCall("CallWindowProcA"
, UInt, OldWinProc
, UInt, Hwnd
, UInt, Msg
, UInt, wParam
, UInt, lParam)
}
GuiClose:
GuiEscape:
ExitApp |
|
|
| Nach oben |
|
 |
quantum
Anmeldedatum: 19.06.2008 Beiträge: 29
|
Verfasst am: So Jun 29, 2008 8:46 pm Titel: |
|
|
| Z Gecko hat Folgendes geschrieben: | Gar nicht!
Du mußt die Abfrage ändern.
|
Das wäre eine Möglichkeit. Aber wenn ich eine Abfrage habe die ca. 20 Radiogruppen beinhaltet, dann wird es mit der Übersichtlichkeit, wenn ich die ändern will schwierig.
Beispiel:
Treffer =
(
1|1|3|1|7|1|1|1|1|8|1|1|1|1|4|1|1|6|1|1=Montag
2|2|4|2|2|2|2|7|2|2|8|2|2|2|2|2|4|2|2|2=Dienstag
3|2|3|1|3|5|3|3|1|9|3|3|3|3|3|3|1|3|3|1=Mittwoch
)
Und jetzt stell dir das mal mit 20 verschiedenen Ergebniswerten vor und du müßtest das regelmäüßig anpassen.
Das ist so besser:
(
1|rot|silber|USA|usw.....=Montag
2|blau|gold|Canada|usw.....=Dienstag
3|grün|platin|Afrika|usw.....=Mittwoch
4
5
6
7
8
usw
)
Du verstehst mas ich meine? |
|
| Nach oben |
|
 |
denick
Anmeldedatum: 15.09.2006 Beiträge: 1199 Wohnort: Berlin
|
Verfasst am: Mo Jun 30, 2008 6:43 am Titel: |
|
|
Mojn,
die Beschriftung bekommst Du mit ControlGetText. Glücklicherweise haben die Radios ja wegen der Farben bereits ein Hwnd :
| Code: | ; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
; Beschriftung des ausgewählten Radios haolen
ControlGetText, RBT, , % "ahk_id " . RBID%RBG%
Eingabe = %DDL1%|%RBT% |
Alternativ kannst Du nochmal über Radio_Farbe parsen oder Dir mal StringSplit anschauen:
| Code: | ; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
Loop, parse, Radio_Farbe, `,
{
If (A_Index = RBG) {
Farbe := A_LoopField
Break
}
}
Eingabe = %DDL1%|%Farbe% |
_________________ Hilfe zur Hilfe
(de)nick |
|
| Nach oben |
|
 |
quantum
Anmeldedatum: 19.06.2008 Beiträge: 29
|
Verfasst am: Mo Jun 30, 2008 7:20 am Titel: |
|
|
| denick hat Folgendes geschrieben: | Mojn,
die Beschriftung bekommst Du mit ControlGetText. Glücklicherweise haben die Radios ja wegen der Farben bereits ein Hwnd :
| Code: | ; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
; Beschriftung des ausgewählten Radios haolen
ControlGetText, RBT, , % "ahk_id " . RBID%RBG%
Eingabe = %DDL1%|%RBT% |
Alternativ kannst Du nochmal über Radio_Farbe parsen oder Dir mal StringSplit anschauen:
| Code: | ; Berechnungbereich
Berechnen:
Gui, Submit, Nohide
Loop, parse, Radio_Farbe, `,
{
If (A_Index = RBG) {
Farbe := A_LoopField
Break
}
}
Eingabe = %DDL1%|%Farbe% |
|
Hallo (de)nick,
wie immer verstehst du genau was ich meine. Beide Lösungen funktionieren, wobei ich zur ersten tendiere, weil sie einfach übersichtlicher ist.
Vielen Dank für deine Hilfe.
Gruss, Werner |
|
| Nach oben |
|
 |
quantum
Anmeldedatum: 19.06.2008 Beiträge: 29
|
Verfasst am: Di Jul 01, 2008 5:47 am Titel: |
|
|
| denick hat Folgendes geschrieben: | Mojn,
|
Hallo (de)nick,
wollte dir eine PM schicken aber dies scheint nicht zu funktionieren.
Die Nachricht liegt zwar jetzt im Ordner Postausgang, erscheint aber nicht im Ordner Gesendete Nachrichten. Deshalb gehe ich davon aus, das die Nachricht nicht bei dir angekommen ist.
Wie kann ich dir eine Nachricht zukommen lassen, die nicht im Forum öffentlich sein soll?
Gruss, Quantum |
|
| Nach oben |
|
 |
AGU Gast
|
Verfasst am: Di Jul 01, 2008 6:25 am Titel: |
|
|
| Zitat: | | Die Nachricht liegt zwar jetzt im Ordner Postausgang, erscheint aber nicht im Ordner Gesendete Nachrichten. Deshalb gehe ich davon aus, das die Nachricht nicht bei dir angekommen ist. | Das hat seine Richtigkeit.
Die Nachricht erscheint erst unter Gesendete Nachrichten, wenn denick sie gelesen bzw. abgeholt hat.
Kleiner Tipp an alle:
Solange das noch nicht geschehen ist, kann man seine Nachricht per "Edit" Knopf noch bearbeiten um z.B. grobe Rechtschreibfehler zu entfernen.
______________________
Gruß AGU |
|
| Nach oben |
|
 |
quantum
Anmeldedatum: 19.06.2008 Beiträge: 29
|
Verfasst am: Di Jul 01, 2008 6:40 am Titel: |
|
|
| AGU hat Folgendes geschrieben: | | Zitat: | | Die Nachricht liegt zwar jetzt im Ordner Postausgang, erscheint aber nicht im Ordner Gesendete Nachrichten. Deshalb gehe ich davon aus, das die Nachricht nicht bei dir angekommen ist. | Das hat seine Richtigkeit.
Die Nachricht erscheint erst unter Gesendete Nachrichten, wenn denick sie gelesen bzw. abgeholt hat.
Kleiner Tipp an alle:
Solange das noch nicht geschehen ist, kann man seine Nachricht per "Edit" Knopf noch bearbeiten um z.B. grobe Rechtschreibfehler zu entfernen.
______________________
Gruß AGU |
Vielen Dank für diese Info.
Gruss Quantum |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|