Snippet: Erstellen von beliebiger Anzahl gleicher GUI-Elemente in Spalten und Zeilen

    • Offizieller Beitrag

    Bei der GUI-Gestaltung mit gleichen Elementen, tabellenförmig angeordnet, probiert man ja meist etwas, bis es passabel aussieht. D.h., Anzahl Zeilen, Spalten sowie Abstände variieren.

    Mit diesem Snippet fällt alle Rechnerei weg, es werden nur die Startwerte verändert. Bsp. ist mit Button, kann natürlich mit anderen Controls genauso verwendet werden.

  • Hallo BugFix

    Ich denke das ist ein sehr wertvolles Snippet für alle, die sich nicht so recht mit den Editoren anfreunden können. Ich mache bspw. alles im Code, weil ich das Gefühl habe, insgesamt länger zu brauchen, wenn ich Koda benutze und später alles für mich anpasse, was Koda als Code ausspuckt. Wenn ich das dann noch einmal ändern will...

    Da sind solche Ansätze Gold wert! Ich habe häufiger (einfache) Programme mit (dennoch vielen) Einstellungen, die über Controls wie Checkboxen oder Combos gesetzt werden. Gerade wenn man viele Checkboxen hat und sich später im Workflow etwas ändert und man mehr braucht, möchte man gerne die ganze Gruppe verschieben können, statt in jedes Control zu gehen und Änderungen vorzunehmen..

    Daher gehe ich da etwas anders vor, als du es hier im Snippet zeigst. Leider habe ich mir selbst noch keine UDF daraus gebaut, sondern mache das mal so mal so.

    Der plumpeste Weg ist

    Code
    Local $hGUI = GUICreate("")
    Local $idStart = GUICtrlCreateButton("Start", 150, 370, 85, 25)
    Local $apos = ControlGetPos($hGUI, "", $idStart)
    Local $idOK = GUICtrlCreateButton("OK", 10, 370, 85, 25)
    Local $idCancel = GUICtrlCreateButton("Cancel", $apos[0] -140, 370, 85, 25)

    Man ermittelt die Position von einem Startelement und positioniert dann alle anderen Controls in Abhängigkeit.
    Das Prinzip kann man dann noch in eine Funktion auslagern, in der man mehrere "Fixpunkte" verwaltet und alle Controls die zur Gruppe eines Fixpunktes gehören mit verschiebt.

    Den zweiten Weg benutze ich oft bei bereits vorhandenen Skripten, die ich nachträglich dynamischer machen will.
    Da wird dann etwa aus Local $idOK = GUICtrlCreateButton("OK", 10, 370, 85, 25) folgendes Local $idOK = _CtrlPos(GUICtrlCreateButton("OK", 10, 370, 85, 25), $idStart, 10, 50). $idStart ist dann der Bezugspunkt und die Funktion 10 x-Punkte zum Bezugspunkt und 50y-Punkte zum Bezugspunkt und die Rückgabe der Funktion isr die ID.

    Ich füge dann einfach die Funktion in ein bestehendes Skript ein und umschließe die Controlerstellung und kann dann Änderungen recht leicht vornehmen.

    Grüße autoiter

    Einmal editiert, zuletzt von autoiter (26. September 2019 um 18:30)