GUI erstellen aber mit wenig Code.

  • Hallo,
    ich hab mal hier im Forum irgendwann mal gesehen, dass ein Taschenrechner GUI nur in mit mit paar Zeilen erstellt wurde. Wie gesagt nur GUI ohne Funktionen usw. Daher wollte ich wissen wie man sowas machen kann.
    Ich habe auch sowas vor. Ein Label der 1 bis 100 Zahlen stehen hat. Also sowas: Beide Zahlen sind in var.
    1=0 6=0
    2=0 7=0
    3=0 8=0
    4=0 9=0
    5=0 10=0
    Zwischen beiden blöcken sollte natürlich mehr Abstand sein als hier.
    Wie krieg ich das hin? Brauch ich array?

    EDIT: Sry paar ein fehler im text

    • Offizieller Beitrag

    Meinst Du sowas:

    [autoit]


    Dim $ahLabel[100], $iXPos = 10, $iYPos = 10, $iXSpace = 60, $iYSpace = 30, $iWidth = 30, $iHeight = 20
    GUICreate('test', 600, 400)
    For $i = 0 To 99
    $ahLabel[$i] = GUICtrlCreateLabel($i & ' = ' & Random(1, 9, 1), $iXPos + Int($i / 10) * $iXSpace, $iYPos + Mod($i, 10) * $iYSpace, $iWidth, $iHeight)
    Next
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Ja genau, danke. Wird dort mehrere Labels erstellt oder nur einer?

    Ich kapiere die beiden Stellen nicht:

    [autoit]

    $iXPos + Int($i / 10) * $iXSpace,

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

    $iYPos + Mod($i, 10) * $iYSpace

    [/autoit]


    Was passiert da?
    Ist ja doch komplizierter als ich dachte.

  • Dabei werden 100 Stück erstellt :)

    In Zeile 4 werden eben die relevaten Daten fürs Label errechnet (in Abhängigkeit von $i)

    Int & Mod werden mit der Hilfe nicht klar?

    Je nach Anforderung wirds einfacher:

    Spoiler anzeigen
    [autoit]


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

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

    Opt("GUICoordMode", 1)
    Global $HA = @DesktopHeight -200
    Global $VA = @DesktopWidth -800

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

    #Region HauptGUI
    Global $binfo = "Aktiviere DVB Viewer|Aktiviere Tastatur|Aktiviere Winamp|Aktiviere PowerDVD|Devcon|Anwendungs-Stop|Auflösungen|Shutdown|Reboot|Standby|Exit" ;Buttonbeschriftung für jeden Button mit | getrennt eingeben -> Anzahl der Beschriftungen bestimmt gleichzeitig die Anzahl der Buttons
    Global $abfinfo = StringSplit($binfo, '|')
    Global $banzahl = $abfinfo[0]
    Global $babstandleft = 50 ;Abstand links und rechts zur HauptGUI
    Global $babstandtop = 10 ;Abstand zwischen den Buttons
    Global $bwidth = $VA - 2* $babstandleft ;Button Left ausrechnen
    Global $bheight = $HA / $banzahl - $babstandtop* ($banzahl +1) / $banzahl ;Button Höhe in Abhängigkeit zur Auflösung ausrechnen
    Global $HauptGUI = GUICreate("HTPC", $VA, $HA, -1, -1)

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

    ;Buttons erstellen und Button TOP ausrechnen
    For $i = 1 to $banzahl
    Global $Button = GUICtrlCreateButton($abfinfo[$i], $babstandleft, $i*$babstandtop+ ($i -1)* $bheight, $bwidth, $bheight,$BS_BITMAP )
    GUICtrlSetFont(-1, 20)
    next
    #EndRegion HauptGUI

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

    GUISetState(@SW_SHOW, $HauptGUI)

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

    While 1

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

    $msg = GUIGetMsg()
    switch $msg
    case $GUI_EVENT_Close
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von nuts (2. September 2009 um 10:42)

  • Nur Mod hab ich nicht verstanden. Und die Positionen wie das gemacht ist.

    Beispiel hier

    [autoit]

    Dim $ahLabel[500], $iXPos = 50, $iYPos = 10, $iXSpace = 45, $iYSpace = 15, $iWidth = 45, $iHeight = 20, $iUnterReihe = 25
    Dim $sSpace
    GUICreate('test', 600, 400)
    For $i = 0 To 150
    Switch $i
    Case 0 to 9
    $sSpace = ""
    Case 10 to 99
    $sSpace = " "
    Case Else
    $sSpace = ""
    EndSwitch
    $ahLabel[$i] = GUICtrlCreateLabel($sSpace & $i & ' = ' & 0, $iXPos + Int($i / ($iUnterReihe +1)) * $iXSpace, $iXPos + Mod($i, ($iUnterReihe +1)) * $iYSpace, $iWidth, $iHeight)
    Next
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Wenn ich $iXPos = 50 mache verschiebt sich das von links nach rechts UND von oben nach unten. Soll ja aber nicht sein. $iYPos = 1000 passiert nichts.

    EDIT: Ahh, ok.. mein Fehler... ich hab iYPos zu x gemacht.