Q: Abfrage GUI Control Typ über controlID

  • Erstmal hallo Zusammen,

    für ein Progi-Projekt wäre es ganz nützlich, wenn man mit AUTOIT3 über die GUI controlID auf den Typ des dahinterstehenden GUI-Elements (Combo, Input, Edit usw.) schliessen könnte.

    Fällt euch da eine Lösung ein? Vielen Dank und viele Grüße
    Lutz

    Einmal editiert, zuletzt von uuchip (29. Januar 2008 um 10:37)

  • Was ist ein Progi-Projekt?

    Und wozu soll das nützlich sein? Du erstellst doch die GUI-Elemente. Benenne einfach die Variablen entsprechend. Oder ich verstehe das Problem nicht... :S

    Hallo Oscar,

    das Progi soll ein Excel-Frontend werden. Die GUI besteht aus vielen (ca. 80) GUI Controls. Mit Koda wurde dasschon gebastelt. Der nächste Schritt besteht darin, dass die Inhalte der Controls aus dem Excel gedönze herausgelesen wird. Ich möchte nun die Controls in ein Schleife (wg. der grossen Anzahl) abarbeiten (d.h. die Vorgabe Werte eintragen) , wenn man das so macht muss man berücksichtigen ob Control $i nun z.B. ein TAInput
    oder ein TACombo ist.

    Mit freundlichen Grüßen
    Lutz

  • Dann nimm doch ein 2D-Array und speichere in D1 das Handle und in D2 einen Verweis auf den Typ.

    moin BugFix,

    ja genau das habe ich ja vor. Die Schwierigkeit besteht nun darin, das Koda die Typen der Controls "vorgibt" man könnte jetzt die Typen in einem ini-file oder mit in den exceldaten nachhalten oder sofort explizit in au3 coden usw., aber das wäre redundant und müsste immer gepflegt werden wenn die GUI sich ändert.

    Beispiel:

    ControlID $X[4711][0] ist ein Input , in $X[4711][1] steht drin "TAInput". Aus welchen Gründen auch immer, wird nun in Koda (und dem au3 GUI Code) aus diesem Input eine Combo. Sehr elegant wäre es nun, wenn das au3-main-progi diese Änderung automatisch "merken" würde und entsrechend reagieren könnte.

    In au3 scheint es keinen Befehl zu geben der das leistet. Evtl. könnte man da was nach dem Ausschlussverfahren coden, nach dem Motto wenn man dies und jenes und soches mit dem Control NICHT machen kann (fehlerabfrage) dann ist es eine Combo. (analog zu: öffne file x, wenn fehler dann file nicht vorhaden)

    Viele Grüße
    Lutz

    • Offizieller Beitrag

    Du kannst dir den Klassennamen ausgeben lassen, vielleicht reicht dir das schon.
    Hier mal ein Beispiel, Ausgabe in die Console:

    [autoit]

    #Include <WinAPI.au3>
    #include <guiconstants.au3>
    $gui = GUICreate('')
    Global $aCtrl[6] = [ _
    GUICtrlCreateButton('', 20, 20), _
    GUICtrlCreateCheckbox('', 20, 50), _
    GUICtrlCreateRadio('', 40, 50), _
    GUICtrlCreateEdit('', 100, 20), _
    GUICtrlCreateInput('', 20, 80), _
    GUICtrlCreateCombo('', 20, 110)]
    GUISetState()

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

    Do
    For $i = 0 To UBound($aCtrl) -1
    ConsoleWrite(_WinAPI_GetClassName($aCtrl[$i]) & @CRLF)
    Next
    Exit
    Until 1

    [/autoit]


    Ausgabe:

    Code
    Button
    Button
    Button
    Edit
    Edit
    ComboBox


    Das geht grundsätzlich auch mit WinGetClassList(), da hast du aber den Nachteil, dass keine Zuordnung zu den Controls besteht. Deshalb ist Einzelprüfung wohl günstiger.

  • Hi BugFix,

    vielen danke für die Hilfe. Ich kann die vorgeschlagene API func sehr gut gebrauchen. Das nachhalten der Contol ID in Excel ist kein Problem bzw. muss sowieso gemacht werden wg. der notwendigen Zuordnung Vorgabe zu Contoll ID.

    tschööö
    Lutz

    P.S.: Den Unterschied zwischen z.B. TAInput und TAEdit macht _WinAPI_GetClassName() nicht. ist aber für mein Problem nicht relevant