Control-ID -> Handler, Handler -> Control-ID

  • Hi,

    wie kann ich eine Control-ID in den dazugehörigen Handler umwandeln bzw. umgekehrt?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    3 Mal editiert, zuletzt von chip (26. Februar 2010 um 17:23)

  • 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.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    2 Mal editiert, zuletzt von chip (26. Februar 2010 um 12:34)

  • 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.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    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:

    Spoiler anzeigen
    [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ 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 ###

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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)

    [/autoit] [autoit][/autoit] [autoit]

    _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")

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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 ###

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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 ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ 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

    [/autoit] [autoit][/autoit] [autoit]

    _Desktopmove()
    WEnd cry1pt

    [/autoit] [autoit][/autoit] [autoit]

    ;~ buttons erstellen
    Func _button($handle, $pfad, $name, $typ)

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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

    [/autoit] [autoit][/autoit] [autoit]

    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $Beenden
    Exit
    EndSwitch
    WEnd
    EndFunc ;==>_Startmenu

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ 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

    [/autoit] [autoit][/autoit] [autoit]

    ;~ 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

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    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.