Buttons erstellen

  • Hallo,

    ich habe folgendes Problem:
    Ich möchte gerne anhand einer ini Buttons erstellen.

    Meine ini:

    Spoiler anzeigen
    [autoit]


    [Name]
    1=Peter
    2=Klaus
    3=Ingrid
    4=Alfred
    5=Claudia
    7=Silvia
    8=Monika
    9=Sigi
    10=Heinz

    [/autoit]

    Ich möchte im Script z.B. 4 Spalten festlegen
    und die Buttons je nach ini gleichmäßig in der größe verteilen.
    (Sodaß die ganze Gui ausgefüllt wird
    Habe schon alles mögliche probiert

    hier mal mein Code

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Gui = GUICreate("Namen", 701, 571, 208, 178)

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

    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetBkColor(-1, -2)
    GUISetState(@SW_SHOW)
    #region Ausrichtung Buttons

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

    Dim $Links = 10
    Dim $Oben = 10 ;<- hier die Anzahl der Zeilen eintragen
    Dim $Zwischen = 22 ;<- Abstand oben zwischen den Buttons
    Dim $Zeilen = 4 ; <- hier die Anzahl der Zeilen eintragen
    Dim $Abstand = 250 ; <- hier den Abstand zwischen den Spalten eintragen
    Dim $Spalten = 4

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

    Dim $ButtonWidth = 20
    Dim $ButtonHeight = 10
    #endregion Ausrichtung Buttons

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

    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    GUICtrlCreateButton($var[$i][1],$Links + 40,$oben +50); da komme ich nicht weiter!!!
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Ich dachte so:
    Wenn meine ini z.B. 20 Namen hat,
    und es sind 4 Spalten im Script eingestellt
    dann sollen 5 x 4 Buttons gemacht werden
    die die ganze Gui ausfüllen.(egal wie groß die Gui ist)
    hab schon mit @Desktopwidth... experimentiert aber mit der ini zusammen
    etwas schwierig.
    Jeder Buttons soll per Case anklickbar sein...huh

    Würde mich freuen, wenn das irgendwie
    klappen würde.

    Liebe Grüße
    ;) Ilse

  • Anfänglich ist doch schon einmal eine Frage offen:

    Deine GUI im Script hat eine feste Größe. Damit wäre eine Abhängigkeit der Buttons von "@DesktopWidth" doch Blödsinn.


    Folgende Punkte wären zu klären:

    Wie groß soll die GUI sein ? Fest, Variabel, Fullscreen ? x-Prozent von Desktop ?
    Wieviel Rand in der GUI bis zu den Buttons ? Oben, Unten, Links und Rechts gleich ?
    Größe der Buttons soll immer das mögliche Maximum ergeben ?
    Wieviel Abstand horizontal/vertikal ? Relativ zur Buttongröße ?

    Das wären so auf Anhieb mal meine Fragen ?
    Gruß
    Micha_he

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hallo Micha,

    merci für deine Hilfe.
    Habe mal die Gui resized (ohne Buttons)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    GUISetState(@SW_MAXIMIZE)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    zu deinen Fragen:

    Wie groß soll die GUI sein ? Fest, Variabel, Fullscreen ? x-Prozent von Desktop ?
    Immer FullScreen
    Wieviel Rand in der GUI bis zu den Buttons ? Oben, Unten, Links und Rechts gleich ?
    Ja, der Abstand sollte bei den Buttons immer gleich sein. Außer der Abstand v. OBEN (Brauche noch etwas Platz f. Comboboxen...)
    Größe der Buttons soll immer das mögliche Maximum ergeben ?
    Ja! Das Problem 4 Spalten X Buttons? Dann muß ich nach unten scrollen können.
    Wieviel Abstand horizontal/vertikal ? Relativ zur Buttongröße ?
    Minimalabstand

    Sollte später so aussehen?
    autoit.de/wcf/attachment/15522/

    Wenn's verkleinert wird sollte alles kleiner werden!
    Das Problem ist auch die ini:
    Habe ich 10 Buttons, oder 30...dann sieht das anders aus!
    ...und die Case f. die Buttons.

    Liebe Grüße
    ;) Ilse

    P.S. Natürlich mit den Namen aus der Ini

  • Hab mal das probiert,
    stimmt aber nicht.
    Ich muß das ganze ja auf 4 Spalten begrenzen

    Die Größe ist nun änderbar...

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    GUISetState(@SW_MAXIMIZE)
    Dim $Oben = 200 ;
    Dim $Links = 10
    Dim $Spalten = 4
    Dim $Buttonbreite = 200
    Dim $Buttonhoehe = 100

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

    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    GUICtrlCreateButton($var[$i][1],$Links,$oben,$Buttonbreite,$Buttonhoehe); da komme ich nicht weiter!!!
    $Links +=100
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    und...wie kann ich in der Schleife für jeden Button ein Case machen?
    :( Grüße Ilse

  • Also ich weiß nicht, ob du das mit Spalten schon optimal gelöst hast. Für eine Pinnwand auf meiner Website habe ich ähnliches gemacht:
    Bei jeder Erstellung eines Feldes wurde eine Variable x um den Wert 1 erweitert. Wenn der Wert dann 4 betrug (4 Spalten!), wurde eine weitere Variable y verwendet und x wurde auf null gesetzt. y wurde um eins erhöht, da die nächste Zeile folgte. Die Koordinaten der Felder waren mit den Variablen (quasi als Faktoren) gekoppelt, dh. x_pos= x * 30. So konnte ich eine coole Pinnwand programmieren :)

    Zu deinem Switch-Problem:
    Die Switch-Schleife würde ich mit einer For-next-Schleife verwurschteln, wobei so alle Arrayelemente durch die Erhöhung von i abgefragt werden können.

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

  • Hallo Irrlicht,

    bin immer noch dran...
    hab das mal so probiert.
    Abstände stimmen noch nicht.
    Aber die Spalten!
    Das mit dem Case pro Button hab ich noch nicht verstanden!

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    GUISetState(@SW_MAXIMIZE)
    Dim $Oben = 200 ;
    Dim $Links = 40
    Dim $Spalten = 4
    Dim $Buttonbreite = 200
    Dim $Buttonhoehe = 100
    Dim $Spaltenstart = 0
    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    GUICtrlCreateButton($var[$i][1],$Links,$oben,$Buttonbreite,$Buttonhoehe); da komme ich nicht weiter!!!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Links +=20
    $Spaltenstart +=1
    If $Spaltenstart = $Spalten Then
    $Spaltenstart = 0
    $Links =40
    $oben +=100
    endif
    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    :( Grüße Ilse

  • Wenn du unbedingt ne switch-abfrage haben willst kannst du's so machen:

    [autoit]

    while 1for $i= 1 to $array_max
    $Msg = GUIGetMsg()
    switch $msg
    case $button[$i]
    //Funktionen
    endswitch
    next
    wend

    [/autoit]


    allerdings wäre ne if-abfrage besser, da nur einzelne werte von $msg abgefangen werden

    [autoit]

    while 1
    for $i= 1 to $arraymax
    $Msg = GUIGetMsg()
    if $msg= $button[$i] then ;;;
    next
    wend

    [/autoit]

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

  • Hallo Irrlicht,

    klappt irgendwie nicht!
    Habe das in der For Schleife eingebaut

    bekomme Error


    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $nMsg

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    ;GUISetState(@SW_MAXIMIZE)
    Dim $Oben = 200 ;
    Dim $Links = 40
    Dim $Spalten = 4
    Dim $Buttonbreite = 200
    Dim $Buttonhoehe = 100
    Dim $Spaltenstart = 0
    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    $button = GUICtrlCreateButton($var[$i][1],$Links,$oben,$Buttonbreite,$Buttonhoehe); da komme ich nicht weiter!!!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Links +=20
    $Spaltenstart +=1
    If $Spaltenstart = $Spalten Then
    $Spaltenstart = 0
    $Links =40
    $oben +=100
    endif

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

    switch $nMsg
    case $button[$i]
    endswitch
    next
    wend

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

    Next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]
  • Übrigens,

    ich habe mal ein Beispiel von Oscar
    etwas abgewandelt.
    Allerdings ohne Ini.
    ...und Scrollen geht leider auch nicht!

    Aber vielleicht hat jemand ne Idee!

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_VSCROLL,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)

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

    Dim $Button[20]
    For $z = 0 To 19
    $Button[$z] = GUICtrlCreateButton($z, 10 + Mod($z, 2) * 300, 10 + Int($z / 2) * 85, 282, 80)
    Next
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]


    Grüße Ilse

  • So habe hier mal die ini eingeabaut!
    Bin aber leider immer noch weit vom Ziel entfernt!

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_VSCROLL,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    Dim $Button[20]
    For $z = 0 To $var[0][0]
    $var[$z][1] = GUICtrlCreateButton($var[$z][1], 10 + Mod($z, 2) * 300, 10 + Int($z / 2) * 85, 282, 80)
    Next
    EndIf
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Ich habe über die letzten Beiträge etwas den Faden verloren, was nicht geht. Aber trotzdem:

    Laut dein Beschreibung sollte dies doch etwa das sein, was Du wolltest:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $sWinTitle = "Form1"

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

    $Form1 = GUICreate($sWinTitle, 625, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    $aGUISize = WinGetClientSize ($sWinTitle)

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

    Dim $Oben = 50
    Dim $Links = 40
    Dim $Spalten = 4
    Dim $Buttonbreite = 50
    Dim $Buttonhoehe = 20
    Dim $Spaltenstart = 0

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

    $Buttonbreite = ($aGUISize[0] - $Links) / $Spalten
    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    $Buttonhoehe = Int(($aGUISize[1] - $Oben) / Ceiling(($var[0][0] / $Spalten)))
    For $i = 1 To $var[0][0]
    GUICtrlCreateButton($var[$i][1],$Links,$oben,$Buttonbreite,$Buttonhoehe)
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $Links += $Buttonbreite
    $Spaltenstart +=1
    If $Spaltenstart = $Spalten Then
    $Spaltenstart = 0
    $Links =40
    $oben +=$Buttonhoehe
    endif
    Next
    EndIf
    GUISetState(@SW_SHOW)
    GUISetState(@SW_MAXIMIZE)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hier die Komplettlösung

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Dim $Oben = 10 ;
    Dim $Links = 10
    Dim $Spalten = 4
    Dim $Buttonbreite = 200
    Dim $Buttonhoehe = 100
    Dim $Spaltenstart = 0
    local $button[1000]
    local $x_counter=0
    local $y_counter=0

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

    $Form1 = GUICreate("Form1", ($buttonbreite+10)*$spalten, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    ;GUISetState(@SW_MAXIMIZE)

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

    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    $button[$i] = GUICtrlCreateButton($var[$i][1],$Links+($buttonbreite*$x_counter),($buttonhoehe*$y_counter),$Buttonbreite,$Buttonhoehe); da komme ich nicht weiter!!!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $x_counter+=1
    If $x_counter=$spalten then
    $y_counter+=1
    $x_counter=0
    endif

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

    next
    EndIf

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

    While 1
    $nMsg = GUIGetMsg()
    for $i= 1 to $var[0][0]
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $button[$i]
    Msgbox(0, "", $var[$i][1] &" wurde ausgewählt")
    EndSwitch
    next

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

    ;;;alternativ:
    ; for $i= 1 to $var[0][0]
    ;If $nMsg=$button[$i] then Msgbox(0, "", $var[$i][1] &" wurde ausgewählt")
    ;next
    WEnd

    [/autoit]


    oder mit automatischer Anpassung des Fensters:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.6.1
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Dim $Oben = 20 ;
    Dim $Links = 20
    Dim $Spalten = 4
    $window_width=700
    Dim $Buttonbreite = $window_width/$spalten
    Dim $Buttonhoehe = 100
    Dim $Spaltenstart = 0
    local $button[1000]
    local $x_counter=0
    local $y_counter=0

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

    $Form1 = GUICreate("Form1", $window_width, 443, 192, 124, BitOR($WS_MAXIMIZEBOX,$WS_MINIMIZEBOX,$WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_CAPTION,$WS_OVERLAPPEDWINDOW,$WS_TILEDWINDOW,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_TABSTOP,$WS_BORDER,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    ;GUISetState(@SW_MAXIMIZE)

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

    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0]
    $button[$i] = GUICtrlCreateButton($var[$i][1],($buttonbreite*$x_counter),$oben+($buttonhoehe*$y_counter),$Buttonbreite,$Buttonhoehe); da komme ich nicht weiter!!!
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    $x_counter+=1
    If $x_counter=$spalten then
    $y_counter+=1
    $x_counter=0
    endif

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

    next
    EndIf
    $zeilenzahl= $var[0][0]/4
    $window_height= $zeilenzahl*$buttonhoehe
    winmove("Form1", "", "", "", $window_width, $window_height)
    While 1
    $nMsg = GUIGetMsg()
    for $i= 1 to $var[0][0]
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $button[$i]
    Msgbox(0, "", $var[$i][1] &" wurde ausgewählt")
    EndSwitch
    next

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

    ;;;alternativ:
    ; for $i= 1 to $var[0][0]
    ;If $nMsg=$button[$i] then Msgbox(0, "", $var[$i][1] &" wurde ausgewählt")
    ;next
    WEnd

    [/autoit]


    Gruß, Irrlicht

    [align=center]Meine Werke mit der Irrlicht Engine
    AutoIt Picture Viewer Dreidimensionaler Bildbetrachter
    Mr Bubble 3D Neue Interpretation des Flashklassikers Bubble trouble

    2 Mal editiert, zuletzt von Irrlicht (13. April 2012 um 16:21)

  • Hallo,

    hm... leider doch noch ein Problem:
    Ich habe mal die Ini erweitert.
    30 Einträge...

    dann klappt es leider nicht mehr!
    Die unteren Buttons sind nicht erreichbar!

    :( Ilse

  • Mein Beispiel funktioniert auch bei 30 Buttons noch !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Hi,

    hier mal der Lösungsansatz von Andy (und ein wenig von mir).

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Global $idButton [1]

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

    $Form1 = GUICreate("Form1", 625, 443, 192, 124, _
    BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN, $WS_CLIPSIBLINGS))

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

    $var = IniReadSection(@ScriptDir & '\Namen.ini',"Name")
    If @error Then
    MsgBox(4096, "", StringFormat ("Es ist ein Fehler aufgetreten.\nWarscheinlich keine INI Datei vorhanden."))
    Else
    ReDim $idButton [$var[0][0]]
    For $i = 1 To $var[0][0]

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

    $idButton[$i - 1] = GUICtrlCreateButton ($var[$i][1],0,0)
    Next
    EndIf

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

    GUIRegisterMsg ($WM_SIZE, "OnSize")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch ($nMsg)
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $idButton[0] To $idButton[UBound ($idButton) - 1]
    MsgBox(4096, "", StringFormat ("Es wurde eine Schaltfläche gedrückt.\nID: %d\nText: %s", $nMsg, GUICtrlRead ($nMsg)))

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

    EndSwitch
    WEnd

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

    Func OnSize ($hwnd, $message, $wParam, $lParam)

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

    Local $rcClient
    Local $cx, $cy
    Local $nWidth, $nHeight
    Local $cnLoop = 0
    Local $cnButtons = UBound ($idButton) ; Anzahl der Schaltflächen
    Local $nColumns = 4 ; Anzahl der Spalten
    Local $nRows = Ceiling ($cnButtons / $nColumns) ; Anzahl der Reihen

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

    $cx = 10 ; Abstand links/rechts/unten
    $cy = 200 ; Abstand oben

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

    $nWidth = int(((BitAND($lParam, 0xffff) - $cx * 2) - (22 * ($nColumns -1))) / ($nColumns ))
    $nHeight = int(((BitShift($lParam, 16) - $cy - $cx) - (22 * ($nRows - 1))) / $nRows)

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

    For $i = 0 To $nRows - 1
    For $j = 0 To $nColumns - 1

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

    If ($cnLoop >= $cnButtons) Then ExitLoop
    WinMove (GUICtrlGetHandle ($idButton[$cnLoop]), "", $cx, $cy, $nWidth, $nHeight)

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

    $cx += $nWidth + 22
    $cnLoop += 1
    Next
    $cx = 10
    $cy += $nHeight + 22
    Next

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

    Return 0

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

    EndFunc

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

    Mit der Schriftgröße muss ich mal sehen, ob ich das gebacken bekomme ...

    Edith hat gesagt ich sollte den Abstand unten gleichmäßig zu denen an den Seiten halten.
    Gesagt, getan. ;)


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (13. April 2012 um 18:36)

  • Hallo,

    sorry mußte kurz weg.

    Ich muß es leider nochmal kurz erklären.
    Also, es geht darum richtig große Buttons zu haben:
    z.B. 4 Spalten gleichmäßig verteilt. OK!
    Auch bei 8 ist das OK!
    autoit.de/wcf/attachment/15533/

    Folgendes:
    Kommen nun mehrere Buttons hinzu,
    dann sollten diese genauso groß sein!
    Und man sollte scrollen können.

    Hat die Ini z.B. etliche Einträge, dann wird es immer kleiner!
    autoit.de/wcf/attachment/15534/

    und das sollte nicht passieren!
    ich meinte die großen Buttons zum Scrollen

    Liebe Grüße
    Ilse

  • Ich hab es am Anfang erwähnt - Ein vernünftige Beschreibung ist Gold wert !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"