• Offizieller Beitrag

    Manchmal möchte ich abhängig vom Gui-Ctrl in einer Funktion unterschiedlich reagieren (z.B. bei registriertem $WM_COMMAND auf $EN_CHANGE). Da z.B. Edit und Input beide der Klasse "Edit" angehören, kann ich Aktionen, die gleichermaßen auf alle Input aber nicht auf Edit angewendet werden sollen nur durch Speichern der zugelassenen Ctrl-ID in einem Array realisieren, welches ich dann durchlaufe und auf Übereinstimmung mit der gerade aktiven ID prüfe. Es würde mir besser gefallen, wenn ich allgemein auf den Control-Typ (z.B. Edit oder Input) prüfen könnte.

    Mit der GuiCtrlInfo.au3 stelle ich die Funktion _GuiCtrlGetInfo(ID) bereit, die anhand der übergebenen Ctrl-ID nicht nur die Klasse, sondern bei derselben Klasse für unterschiedliche AutoIt-Control auch deren AutoIt-Namen ermittelt. Davon betroffen sind folgende Ctrl:

    Code
    GUICtrlCreateButton()	Button
    GUICtrlCreateCheckbox()	Button
    GUICtrlCreateGroup()	Button
    GUICtrlCreateRadio()	Button
    GUICtrlCreateEdit()	Edit
    GUICtrlCreateInput()	Edit
    GUICtrlCreateGraphic()	Static
    GUICtrlCreateIcon()	Static
    GUICtrlCreateLabel()	Static
    GUICtrlCreatePic()	Static

    Die Funktion gibt eine Struktur zurück mit folgendem Inhalt:

    Code
    .ID       GuiControl-ID
    .hWnd     GuiControl-Handle
    .Class    Classname
    .Au3Name  AutoIt-Name (der Teil nach GuiCtrlCreate..)
    .Au3Type  Konstante für den AutoIt-Namen
    .Style    GuiControl-Style
    .ExStyle  GuiControl-ExStyle

    Das Unterscheiden der Control anhand der Styles sollte funktionieren. Bin mir aber noch nicht sicher, ob es auch bei den verschiedensten Style-Kombinationen klappt. Bin da für Rückmeldungen dankbar.

    Was mir aufgefallen ist:

    Ein GuiCtrlCreateLabel() ist von einem GuiCtrlCreateGraphic() anhand Klasse und Style nicht zu unterscheiden - sie sind identisch. Ist mir völlig unklar, wie das intern differenziert wird. Ich habe jetzt als Notlösung einfach mit Grafikfunktion einen Pixel im nicht sichtbaren Bereich des Controls gezeichnet. Ist die Funktion erfolgreich, ist es ein Graphic, wenn nicht - ein Label.

    Es werden ausschliesslich durch Native AutoIt Funktionen erstellte Ctrl-ID geprüft (GuiCtrlCreateObj ist somit nicht dabei).

    UDF
    Beispiel
    Ausgabe Beispielcode