Guielemente im Array

  • Hallo liebe Hardcorecoder, mal ne praktische Frage. Ich lege mittlereile meine Buttons mit Hilfe von Arrays an. Nun hatte ich mir überlegt auch andere GUIelemente in einem Array zu verarbeiten. Das hat soweit auch funktioniert, nur komischerweise zeigt er die Tolltips von Icons nicht an, vielleicht sieht ja einer den Fehler, eh ich grauwe Haare kriege;)


    lg und schöne Woche noch

    Einmal editiert, zuletzt von casi4712 (28. Mai 2024 um 13:06)

  • Du hast dich da verzählt.


    Hier mal so wie ich es machen würde. Hab's umgebaut auf Funktionen und Event-Mode

    Schöne Grüße

    funkey

  • hallo danke für deine Reaktion, also verzählt weiss ich nicht, da hatte ich auch dran gedacht, han von 6-10 alles probiert ging nie, aber ich schau mal was du da feines hast


    lg und schönen Abend noch

  • Also ehrlich gesagt seh ich jetzt nicht ganz was du jetzt funktionstechnisch anders gemachet hast, ausser die VAriablennamen umbenannt und das GuiEvent, ansonsten hatte ich auch das mit 9 probiert, als Funktion hatte ich es auch, aber GUICtrlSetTip(-1, $arElements[$i][9]) hatte einfach nicht funktioniert, will ja nur verstehen warum;).

    Aber es funzt jetzt danke noch mal.


    lg

    Einmal editiert, zuletzt von casi4712 (28. Mai 2024 um 16:25)

  • ok dann waren es 2 sachen, aber wie gesagt hatte erst 8 und dann andere durchprobiert, was sicher schwachsinn war, dann weiss ich Bescheid. Aber trotzdem, dass hier GUICtrlSetTip(-1, $arElements[$i][8])) ging ja auch nicht. Vielleicht sollte ich mit sowas nächste mal nicht um halb 2 Uhr nachts anfangen lach


    danke noch mal

  • also ich war noch mal aktiv und hab das ganze noch um ein paar GUI elemente erweitert, aber bei Radiobuttons kommt es zu einem Problem, cant initialize variable with itsself, was hab ich denn hier hier wieder übersehen;)? Habe Deinen Ansatz fortgeführt


    lg schönen Abend

    2 Mal editiert, zuletzt von casi4712 (28. Mai 2024 um 20:46)

  • Bei mir kommt keine Meldung. Prinzipiell läuft das Skript.

    Hab nur gesehen, dass sich manche Controls überschneiden und die Group muss AUF und ZU gemacht werden. Würde da wohl eigene Zeilen im Array anlegen, oder bei den Radios/Checkboxen eine Option mitgeben.


    Edit: Das Problem ist wahrscheinlich, dass die die Variable $hRadioGroup nicht definierst/initialisierst. Die Funktion _CreateGuiElement() wird aber öfter aufgerufen und $hRadioGroup wird wieder überschrieben.

  • ok habs jetzt raus, die entsprechende Array zeile sollte wie folgt sein:


    AutoIt
        [0, "RadioButton1", "Radio", "Option 1", 10, 310, 90, 20, "", "", "", $GUI_ENABLE + $GUI_CHECKED + $GUI_DEFBUTTON + $GUI_ONTOP + $GUI_DROPACCEPTED + $GUI_UNCHECKED + $GUI_HIDE + $GUI_SHOW  ], _

    aber das is wohl eher zufall, ich sehe grade ich brauch dann wohl noch ein neues element um die Gruppe zu defineiren

    lg und schönen Abend

    Einmal editiert, zuletzt von casi4712 (28. Mai 2024 um 22:47)

  • ich bin vielleicht ein Honk, und du sagt es noch mit den Überschneidungen, dachte mir erst nix dabei, aber das war wohl das Problem. Leider hab ich es nur über eine Krücke hinbekommen mit den Zeilen groupstart und ende.

    LG

  • Hi :)

    Ich hatte mir das ganze auch mal angesehen, und ich muss sagen, dass ich das mit den vielen Werten im Array nicht so schön fand, weils unübersichtlich ist. Insbesondere, weil je nach control die Reihenfolge wechselt (icon/label),... . Ein weiterer Faktor für mich war dabei, dass du dann auch zusatzfunktionen zum ändern des controls genutzt hast (z.B. GuiCtrlSetFont beim Label).

    Also hab ich mir mal alle möglichen GuiCtrlCreate... Funktionen und deren Parameter angeschaut, sowie alle möglichen GuiCtrlSet... funktionen.

    Das hier war mein Ergebnis:

    Ich hab so eigentlich alle Controls dabei (vllt. noch für das "special stuff" was ändern).

    Dabei ist die Funktion _CTRL_def(ByRef $mCtrlMap, $iType, $iLeft, $iTop, $opt1 = Default, $opt2 = Default, $opt3 = Default... entstanden. Man erstellt eine Map für alle Controls und fügt mit dieser Funktion die Controls hinzu.
    Alle controls brauchen den Typ ($iCTRL_...) und die Position ($iLeft/$iTop). Danach kommen die "opt" parameter. Je nach funktion sind die unterschiedlich: Controls haben 0 bis 2 parameter vor der position, die sind bei mir hier gelandet und werden als $opt1 und $opt2 angegeben.
    Sie können aber auch weggelassen werden. Danach kommen nurnoch die _CTRL_... Funktionen in beliebiger Reihenfolge.

    Beispiel mit allen Möglichkeiten:

    Dabei hab ich auch die Möglichkeit eingebaut, die Position in Prozent anzugeben. Wenn die Position oder Size <=1 ist, wird das als Prozent der Breite/Höhe angenommen und entsprechend verarbeitet.
    Deshalb hat die Methode _CTRL_gen(ByRef $mMap, $iWidth = Default, $iHeight = Default) zum generieren der Controls auch einen Width und Height Parameter, der dann angegeben werden muss.

    Umd später noch bei speziellen Controls zu wissen, welches ein Event hatte, wird der Map key des Controls zurückgegeben.
    Beispiel: Local $iCtrlButtonSave = _CTRL_def($mCtrlsA,   $iCTRL_BUTTON,  10, 340, "Save List", _CTRL_size(100, 30), _CTRL_onEvent("_buttonPressedA"), _CTRL_tip("Liste speichern"))
    Später kann dann mit Local Local $key = _CTRL_getKey($mCtrlsA, $iCtrlId) von der Autoit-CtrlID auf den Key gemapped werden um dann mit If $key = $iCtrlButtonSave Then eigene Aktionen auszuführen.
    Mit $mCtrlsA[$iCtrlButtonSave].iCtrl kann auch von dem Key auf die AutoIt-CtrlID umgewandelt werden.

    Hier einmal dein Code damit umgesetzt, sowie ein weiteres Beispiel:

    Mit dem Code kann auch beliebig zwischen OnEvent und GuiGetMsg Modus umgeschaltet werden.


    Ich hoffe, das hilft dir weiter und gibt dir noch einen anderen (besseren) Ansatz.

    MfG, Kanashius.

  • Oj e, recht herzlichen Dank erstmal, aber ich denke dass ist in meinem konkreten Fall mit Kanonnen auf Spatzen geschossen. Meine Intention war ja mit der Methode eher Codezeilen einzusparen und die Übersichtlichkeit zu erhöhen, ich finde die ist doch gegeben, zumindest wenn man gleichartige Elemente im Array direkt untereinander schreibt. Gut möglich das mit meiner Methode nicht alle Spezialfällte berückstichtigt werden. Das einzige Problem was meine Methode hat dass die im Array stehenden Ids nicht als Variable initiert werden und somit nicht in weiteren Funktionen nutzbar sind:

    das würde mir fürs erste reichen,

    lg und schöne Reatwoche noch