Post by Holle » 09 Oct 2013, 07:18
@just me
Ich bekomme das nun auch nicht mehr hin. Habe alle möglichen Varianten probiert die mir eingefallen sind, aber ich kann das Problem nicht mehr rekonstruieren.
Nun habe ich aber vielleicht den Grund gefunden warum das nicht geklappt hatte. Der Grund war anscheinend garnicht dass das hwnd nicht "akzeptiert" wurde, sondern dass es einfach "falsch" war.
Ich habe hier mal ein Beispiel-Script. Mit dem auskommentierten Teil funzt es, wenn ich das "entkommentiere" ist das hwnd für die mittlere CB (farben) falsch.
Kann sein dass dieses der Grund war, warum es nicht funktioniert hat, aber sicher kann ich das auch nicht mehr sagen da ich das Test-Script schon überschrieben habe.
Also, hier ist das "neue" Test-Script:
Code: Select all
Gui, Add, Text, w100 center vZahlen
Gui, add, ComboBox, w90 x20 r5 gStart, Eins|Zwei|Drei|Vier|Fünf
Gui, Add, Text, x10 y+20,-------------------------------------
Gui, Add, Text, w100 center vFarben
Gui, add, ComboBox, w90 x20 r5 gStart, Rot|Grün|Blau|Weiß|Gelb
Gui, Add, Text, x10 y+20 ,-------------------------------------
Gui, Add, Text, w100 center vStaedte
Gui, add, ComboBox, w90 x20 r5 gStart, Berlin|Bonn|München|Hamburg|Bremen
Gui, show, ,test
GuiControlGet, zahlen, Hwnd
GuiControlGet, farben, Hwnd
GuiControlGet, staedte, Hwnd
array := Object("zahlen", zahlen, "farben", farben, "staedte", staedte)
OnMessage(0x201, "start") ; WM_LBUTTONDOWN
return
start()
{
global array
start:
ControlGetFocus, control, A
if !A_GuiControl
MouseGetPos, , , , control, 1
if A_GuiControl in Eins,Zwei,Drei,Vier,Fünf
zielcontrol := "Zahlen"
else if A_GuiControl in Rot,Grün,Blau,Weiß,Gelb
zielcontrol := "Farben"
else if A_GuiControl in Berlin,Bonn,München,Hamburg,Bremen
zielcontrol := "Staedte"
else
return
;~ if (zielcontrol = "farben")
;~ {
;~ ControlGet, hfarben, Hwnd,, %control%, A
;~ MsgBox % "control = " control "`nArray[zielcontrol] = " array[zielcontrol] "`nhfarben = " hfarben
;~ GuiControl,, % hfarben, % Array[zielcontrol] " - " A_GuiControl
;~ }
;~ else
GuiControl,, % Array[zielcontrol], % Array[zielcontrol] " - " A_GuiControl
return
}
GuiClose:
ExitApp
Wozu ich es brauch(t)e:
Ich habe es immer noch nicht aufgegeben die Sache mit den DDL/CB wechsel zu realisieren. Nun bin ich das auf verschiedene Wege angegangenund habe dabei festgestellt dass die hwnds mal dezimal und mal hexadezimal waren. Deswegen wollte ich die einheitlich hexadezimal speichern, um sicherzustellen dass die eindeutig zugeordnet werden (und nicht doppelt geführt werden).
Das hat sich zwischenzeitlich aber erledigt, da es kein Problem ist einen Array-Eintrag mit einem hexadezimalen Schlüssel auszulesen, welcher jedoch dezimal gespeichert ist.
@just me
Ich bekomme das nun auch nicht mehr hin. Habe alle möglichen Varianten probiert die mir eingefallen sind, aber ich kann das Problem nicht mehr rekonstruieren.
Nun habe ich aber vielleicht den Grund gefunden warum das nicht geklappt hatte. Der Grund war anscheinend garnicht dass das hwnd nicht "akzeptiert" wurde, sondern dass es einfach "falsch" war.
Ich habe hier mal ein Beispiel-Script. Mit dem auskommentierten Teil funzt es, wenn ich das "entkommentiere" ist das hwnd für die mittlere CB (farben) falsch.
Kann sein dass dieses der Grund war, warum es nicht funktioniert hat, aber sicher kann ich das auch nicht mehr sagen da ich das Test-Script schon überschrieben habe.
Also, hier ist das "neue" Test-Script:
[code]Gui, Add, Text, w100 center vZahlen
Gui, add, ComboBox, w90 x20 r5 gStart, Eins|Zwei|Drei|Vier|Fünf
Gui, Add, Text, x10 y+20,-------------------------------------
Gui, Add, Text, w100 center vFarben
Gui, add, ComboBox, w90 x20 r5 gStart, Rot|Grün|Blau|Weiß|Gelb
Gui, Add, Text, x10 y+20 ,-------------------------------------
Gui, Add, Text, w100 center vStaedte
Gui, add, ComboBox, w90 x20 r5 gStart, Berlin|Bonn|München|Hamburg|Bremen
Gui, show, ,test
GuiControlGet, zahlen, Hwnd
GuiControlGet, farben, Hwnd
GuiControlGet, staedte, Hwnd
array := Object("zahlen", zahlen, "farben", farben, "staedte", staedte)
OnMessage(0x201, "start") ; WM_LBUTTONDOWN
return
start()
{
global array
start:
ControlGetFocus, control, A
if !A_GuiControl
MouseGetPos, , , , control, 1
if A_GuiControl in Eins,Zwei,Drei,Vier,Fünf
zielcontrol := "Zahlen"
else if A_GuiControl in Rot,Grün,Blau,Weiß,Gelb
zielcontrol := "Farben"
else if A_GuiControl in Berlin,Bonn,München,Hamburg,Bremen
zielcontrol := "Staedte"
else
return
;~ if (zielcontrol = "farben")
;~ {
;~ ControlGet, hfarben, Hwnd,, %control%, A
;~ MsgBox % "control = " control "`nArray[zielcontrol] = " array[zielcontrol] "`nhfarben = " hfarben
;~ GuiControl,, % hfarben, % Array[zielcontrol] " - " A_GuiControl
;~ }
;~ else
GuiControl,, % Array[zielcontrol], % Array[zielcontrol] " - " A_GuiControl
return
}
GuiClose:
ExitApp[/code]
Wozu ich es brauch(t)e:
Ich habe es immer noch nicht aufgegeben die Sache mit den DDL/CB wechsel zu realisieren. Nun bin ich das auf verschiedene Wege angegangenund habe dabei festgestellt dass die hwnds mal dezimal und mal hexadezimal waren. Deswegen wollte ich die einheitlich hexadezimal speichern, um sicherzustellen dass die eindeutig zugeordnet werden (und nicht doppelt geführt werden).
Das hat sich zwischenzeitlich aber erledigt, da es kein Problem ist einen Array-Eintrag mit einem hexadezimalen Schlüssel auszulesen, welcher jedoch dezimal gespeichert ist.