Hi,
wie kann ich eine Control-ID in den dazugehörigen Handler umwandeln bzw. umgekehrt?
Hi,
wie kann ich eine Control-ID in den dazugehörigen Handler umwandeln bzw. umgekehrt?
ControlGetHandle und HWnd ?
Hat mir leider doch nicht weiter geholfen. Mit _GUICtrlButton_Create bekommen ich den Handle den ich in einen Array speichere. Beim einem klick mit der mittleren Maustaste hole ich mir dann mit GUIGetCursorInfo, unter anderem, die ID des Buttons. Nun möchte ich in dem Array den dazu passenden eintrag finden. Sprich ich muss entweder die ID die ich von GUIGetCursorInfo bekomme in den passenden Handle oder den Handle der beim erstellen _GUICtrlButton_Create erzeugt wird in eine ID umwandeln.
Mit ControlGetHandle bekomme ich zwar dann einen Handle erzeugt aber dieser stimmt nicht mit dem überein den _GUICtrlButton_Create zurückgegeben hat.
Kommst du damit weiter? GUICtrlGetHandle
Ok das Problem liegt an der Umstellung von GUICtrlCreateButton nach _GUICtrlButton_Create weil nun GUIGetCursorInfo() keine Controler-ID mehr liefert. Eine Umstellung zurück auf GUICtrlCreateButton geht aber leider nicht weil ich dann ja keine Buttons mehr auf einer speziellen GUI erzeugen kann.
Warum sollte ein Standard-Button nicht funktionieren? Poste mal den Code, ich bin sicher das man das auch mit den Normalen Buttons machen kann.
Hier mein aktueller Code, wichtig ist das hier noch einige weiter GUIs hinzukommen werden:
#include <Array.au3>
#include <ArrayMore.au3>
#include <Misc.au3>
#include <GuiMenu.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
Opt("GUIEventOptions", 1)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
$dll = DllOpen("user32.dll")
Global $button[1][2]
$button[0][0] = "buttons"
Dim $deskneutext
;~ Desktop
#Region ### START Koda GUI section ### Form=
Global $Desktop = GUICreate("Desktop", 400, @DesktopHeight, 0, 0, BitOR($WS_POPUP, $WS_VISIBLE), BitOR($WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;~ Startmenübutton
$Start = GUICtrlCreateButton("", 2, @DesktopHeight - 48, 75, 48, BitOR($BS_NOTIFY, $BS_ICON, $WS_GROUP, $WS_TABSTOP, $WS_VISIBLE, $BS_FLAT))
GUICtrlSetImage(-1, @ScriptDir & "\Icons\Ico\Extras\Home.ico", -1)
_button($Desktop, "Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ _button("Desktop\My_Computer.ico", "Arbeitsplatz", "Desktop")
;~ Startmenü
#Region ### START Koda GUI section ### Form=
$Startmenu = GUICreate("Startmenu", 250, 500, 2, @DesktopHeight - 550, BitOR($WS_VISIBLE, $WS_BORDER, $WS_CLIPSIBLINGS, $WS_POPUP), -1, $Desktop)
$icon = GUICtrlCreateIcon(@ScriptDir & "\Icons\Ico\Start Menu\Settings_ControlPanel.ico", -1, 10, 408, 32, 32, 0)
$Systemeinstellungen = GUICtrlCreateButton("Systemeinstellungen", 0, 400, 250, 48, BitOR($BS_CENTER, $BS_VCENTER, $WS_CLIPSIBLINGS, $BS_BOTTOM))
$Ausloggen = GUICtrlCreateButton("", 0, 452, 83, 48, BitOR($BS_NOTIFY, $BS_ICON, $WS_GROUP, $WS_TABSTOP, $WS_VISIBLE, $BS_FLAT))
GUICtrlSetImage(-1, @ScriptDir & "\Icons\Ico\Extras\LogOff.ico", -1)
$Neustart = GUICtrlCreateButton("", 83, 452, 83, 48, BitOR($BS_NOTIFY, $BS_ICON, $WS_GROUP, $WS_TABSTOP, $WS_VISIBLE, $BS_FLAT))
GUICtrlSetImage(-1, @ScriptDir & "\Icons\Ico\Extras\Restart.ico", -1)
$Beenden = GUICtrlCreateButton("", 166, 452, 83, 48, BitOR($BS_NOTIFY, $BS_ICON, $WS_GROUP, $WS_TABSTOP, $WS_VISIBLE, $BS_FLAT))
GUICtrlSetImage(-1, @ScriptDir & "\Icons\Ico\Extras\Shutdown.ico", -1)
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
;~ Arbeitsplatz
#Region ### START Koda GUI section ### Form=
$Arbeitsplatz = GUICreate("Arbeitsplatz", 625, 443, 192, 124, -1, -1, $Desktop)
GUISetIcon(@ScriptDir & "\Icons\Ico\Desktop\My_Computer.ico", -1)
_Arbeitsplatz()
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
;~ Desktopaktionen
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case 0
ContinueLoop
Case $GUI_EVENT_CLOSE
GUIDelete($nMsg[1])
Case $Beenden
Exit
Case $Start
_Startmenu()
Case $GUI_EVENT_RESTORE
GUISetState(@SW_RESTORE, $nMsg[1])
Case $GUI_EVENT_MINIMIZE
GUISetState(@SW_MINIMIZE, $nMsg[1])
ControlMove("", "", $nMsg[1], 100, 100)
Case Else
If UBound($button) > 1 Then
$desktopklick = _ArraySearch($button, $nMsg[0])
If $desktopklick > 0 Then
MsgBox(0, "", "lala")
EndIf
EndIf
EndSwitch
_Desktopmove()
WEnd cry1pt
;~ buttons erstellen
Func _button($handle, $pfad, $name, $typ)
If $typ = "Desktop" Then
$anzahl = UBound(_ArrayFindAll($button, "Desktop", 0, 0, 0, 1, 1))
$max = Int((@DesktopHeight - 70) / 70)
$left = 30
If $anzahl >= $max Then
$anzahl = ($anzahl - $max)
$left = ((Int($anzahl / $max) + 1) * 70) + 30
EndIf
$top = ($anzahl * 70) + 30
$icon = _GUICtrlButton_Create($handle, "", $left, $top, 60, 60, BitOR($BS_NOTIFY, $BS_ICON, $WS_GROUP, $WS_TABSTOP, $WS_VISIBLE, $BS_FLAT))
EndIf
_GUICtrlButton_SetImage($icon, @ScriptDir & "\Icons\Ico\" & $pfad, -1)
_Array2DAdd($button, $icon & "|" & $typ & "#" & $name)
EndFunc ;==>_button
;~ Desktopbuttons bewegen
Func _Desktopmove()
If _IsPressed("04", $dll) Then
$CursorInfo = GUIGetCursorInfo($Desktop)
$moveid = $CursorInfo[4]
$wert = _ArraySearch($button, $moveid)
If $wert > 0 Then
Sleep(250)
While 1
If _IsPressed("04", $dll) Then
$CursorInfo = GUIGetCursorInfo($Desktop)
ControlMove("Desktop", "", $moveid, $CursorInfo[0] - 30, $CursorInfo[1] - 30)
Else
ExitLoop
EndIf
WEnd
EndIf
EndIf
EndFunc ;==>_Desktopmove
;~ Startmenüaktionen
Func _Startmenu()
GUISetState(@SW_SHOW, $Startmenu)
Sleep(1000)
While 1
$pos = MouseGetPos()
If $pos[0] > 252 Or $pos[1] < @DesktopHeight - 532 Then
GUISetState(@SW_HIDE, $Startmenu)
ExitLoop
EndIf
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $Beenden
Exit
EndSwitch
WEnd
EndFunc ;==>_Startmenu
;~ Arbeitsplatzaktionen
Func _Arbeitsplatz()
$festplatten = DriveGetDrive("Fixed")
If Not @error Then
$festplattenteiler = 3
For $i = 1 To $festplatten[0]
If $i = $festplattenteiler Then
$festplattenteiler = $festplattenteiler + 2
EndIf
Next
EndIf
EndFunc ;==>_Arbeitsplatz
;~ Rechtsklickemenübefehle
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Switch $iwParam
Case $deskneutext
_button($Desktop, "File Types\TextDocument.ico", "Textdatei", "Desktop")
EndSwitch
EndFunc ;==>WM_COMMAND
;~ Rechtsklickemenü
Func WM_CONTEXTMENU($hWnd, $iMsg, $iwParam, $ilParam)
Local $hMenu
If $iwParam = $Desktop Then
$hMenu = _GUICtrlMenu_CreatePopup()
_GUICtrlMenu_InsertMenuItem($hMenu, 0, "Neue Textdatei", $deskneutext)
_GUICtrlMenu_InsertMenuItem($hMenu, 1, "neu")
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "")
_GUICtrlMenu_InsertMenuItem($hMenu, 3, "exit")
_GUICtrlMenu_TrackPopupMenu($hMenu, $iwParam)
_GUICtrlMenu_DestroyMenu($hMenu)
EndIf
Return True
EndFunc ;==>WM_CONTEXTMENU
Du kannst auch eine Standard-Button für deine GUI´s verwenden. Einfach vor dem Erstellen mit GUISwitch auf die GUI umschalten, auf der der Button erstellt werden soll.
Somit ist die gerade gewählte GUI der Parent des Buttons und du solltest mit deiner GUIGetCursorInfo() abfrage keine Probleme bekommen. Dein Problem mit der Control-ID sollte damit gelöst sein.
Wow perfekt, funktionier einwandfrei :).