Gibt es eine möglichkeit die Id eines Controls im eigenen Fenster anhand dessen Position (x,y) zu ermitteln?
MfG
Control Id anhand der Position ermitteln
-
- [ offen ]
-
Milla -
3. Dezember 2010 um 11:58 -
Geschlossen -
Erledigt
-
-
Spoiler anzeigen
[autoit]$GUI = GUICreate("hallo", 220, 140)
[/autoit] [autoit][/autoit] [autoit]$Button1 = GUICtrlCreateButton("hallo1", 10, 10, 200, 20)
[/autoit] [autoit][/autoit] [autoit]
$Button2 = GUICtrlCreateButton("hallo2", 10, 40, 200, 20)
$Button3 = GUICtrlCreateButton("hallo3", 10, 80, 200, 20)
$Button4 = GUICtrlCreateButton("hallo4", 10, 110, 200, 20)GUISetState()
[/autoit] [autoit][/autoit] [autoit]
Sleep(1000)$ControlID = _GetControlByPos($GUI, 10, 80)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData($ControlID, ":-) ID " & $ControlID)Sleep(2000)
[/autoit] [autoit][/autoit] [autoit]Func _GetControlByPos($hGui, $iX, $iY)
[/autoit]
For $i = 1 To 100
$aPos = ControlGetPos($GUI, "", $i)
If IsArray($aPos) And $iX = $aPos[0] And $iY = $aPos[1] Then Return $i
Next
Return -1
EndFunc ;==>_GetControlByPos -
- Offizieller Beitrag
Das geht auch einfacher:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <WinAPI.au3>$Struct = DllStructCreate($tagPoint)
[/autoit]
$hGui = GUICreate('Test')
$hButton1 = GUICtrlCreateButton('1', 10, 10, 100, 20)
$hButton2 = GUICtrlCreateButton('2', 120, 10, 100, 20)
GUISetState()
Do
DllStructSetData($Struct, "x", MouseGetPos(0))
DllStructSetData($Struct, "y", MouseGetPos(1))
$hwnd = _WinAPI_WindowFromPoint($Struct)
ToolTip('Aktuelle ID = ' & _WinAPI_GetDlgCtrlID($hwnd) & @CR & 'Button1-ID = ' & $hButton1 & @CR & 'Button2-ID = ' & $hButton2)
Until GUIGetMsg() = -3 -
Wofür braucht man sowas eigentlich?
-
Um sinnlose Buttonspiele zu programmiern so just 4 fun
btw: thx
-
Und wieso musst du die controlid über die Position ermitteln? Speicher die Controlids doch einfach bei der Erstellung der Controls ab. Wenn du sehr viele Buttons hast und nicht jedem eine eigene Variable zuweisen willst benutz ein Array. Kannst ja mal das Script posten.
Die andere Richtung würd ich eher verstehen, also anhand der ID die aktuelle Position bestimmen.
-
bei dem was ich mach brauch ichs so weil buttons variabel hinzugefügt/verwaltet werden.
Programmiere Cube Touch XXL nach falls es jemand kennt.
-
Wenn du sehr viele Buttons hast und nicht jedem eine eigene Variable zuweisen willst benutz ein Array.
Habe gerade das gleiche Problem und das wäre echt das Optimum. Aber wie stelle ich es an bei der Erstellung des Controls die ID in ein Array zu schreiben? -
Hab dir zwar schon in deinem Thread geantwortet
und ich behaupte mal, dass du kein Array benötigst, aberhier ein Beispiel:Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <array.au3>global $array[9]
[/autoit] [autoit][/autoit] [autoit]; gui
[/autoit] [autoit][/autoit] [autoit]
$gui=guicreate("Meine GUI",480,200); Button Start Koordinaten
[/autoit] [autoit][/autoit] [autoit]
$left = 10
$top = 10
$width = 60
$height = 20; erstellt eine reihe mit 5 Buttons und eine Spalte mit 5 Buttons... ungetestet
[/autoit] [autoit][/autoit] [autoit]
for $i = 0 to ubound($array)-1
$array[$i]= guictrlcreatebutton("Knopf Nr." & $i+1,$left,$top,$width,$height)
if $i < 4 then
$left += 70
else
$left = 10
$top += 30
endif
nextGUISetState()
[/autoit] [autoit][/autoit] [autoit]while 1
[/autoit]
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then Exit
for $i = 0 to UBound($array)-1
if $msg = $array[$i] Then
MsgBox(0,"Knopf gedrückt", "Es wurde Knopf Nr." & $i+1 & " gedrückt.")
_ArrayDisplay($array,"Inhalt des Control Arrays... hier sind alle control id's der buttons gespeichert...")
EndIf
Next
wend