Button aus INI laden

  • Hat schon mal jemand Grafische Button in eine GUI geladen?
    Ich stelle mir das so vor : ich habe eine INI-Datei mit folgenden Inhalt:

    ini


    hier brauche ich noch ein wenig Hilfe mit den Befehlen für die einzelnen Buttons.
    wie frage ich welcher Button den Event ausgelöst hat in der Funktion Btn_Clicked() ab?

    Da ich nicht wusste wie ich den Event abfragen soll habe ich Kurzerhand eine Variable dazwischen geschoben.
    Jetzt habe ich aber das Problem wie erzeuge ich in einer Schleife mehrere Funktionen oder kann man die wiederum mit Error
    oder so zurück in eine einzelne Funktion schreiben. damit ich weiß welcher Button betätigt worden ist?

    Der Zeilenumbruch wird auch noch nicht erkannt. Vielleicht weis hier jemand Rad.

    au3
    [autoit]


    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <EditConstants.au3>
    #Include <Eventhandler.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <IE.au3>
    #include <StaticConstants.au3>
    #Include <string.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode", 1) ; Zum OnEvent-Mode wechseln

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

    HotKeySet("{ESC}", "On_Exit")
    Func On_Exit()
    Exit
    EndFunc
    Global $aGo = True
    Global $gMain, $h_close,$ii

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

    Global $IniPath = @ScriptDir & "\data.ini"
    Global $oIE = _IECreateEmbedded ()
    $gMain = GUICreate("GUI on Top", 1200,200 , -1, 0, BitOR($WS_POPUP,$WS_BORDER, $WS_EX_TOPMOST ))

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

    ;$var_zahl = IniRead($IniPath, "sektion2", "Zahl", "0")
    $var_x = 20
    $var_y = 20
    $var_btn = IniReadSection($IniPath, "Button")
    $var_ico = IniReadSection($IniPath, "Ico")
    $var_caption = IniReadSection($IniPath, "Caption")
    $var_text = IniReadSection($IniPath, "Text")

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

    $GUI_Button_Home = GUICtrlCreateButton("Home", 18, 165, 80, 25)
    $GUI_Button_Stop = GUICtrlCreateButton("Exit", 100, 165, 80, 25)

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

    _GUICtrlSetOnEvent($EVENT_PRIMARY_CLICK, "On_Exit", $gMain,$GUI_Button_Stop)
    For $i = 1 To 4
    Func Btn_Clicked&$i&()
    MsgBox(0,$i,"Mach was")
    EndFunc
    Next
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var_btn[0][0]
    $Button_1 = GUICtrlCreateButton($var_caption[$i][1], $var_x,4, 80, 25)
    GUICtrlSetImage(-1,$var_ico[$i][1], -1)
    GUICtrlSetTip(-1, $var_text[$i][1],$var_caption[$i][1], 0, 1)
    ; events definieren
    _GUICtrlSetOnEvent($EVENT_PRIMARY_CLICK, "Btn_Clicked"&$i, $gMain, $Button_1 )
    $Pic1 = GUICtrlCreatePic(@ProgramFilesDir & "\AutoIt3\Examples\GUI\logo4.gif", ($var_x+82), 4, 60, 25)
    GUICtrlSetTip(-1, $var_text[$i][1],$var_caption[$i][1], 0, 1)
    _GUICtrlSetOnEvent($EVENT_PRIMARY_CLICK, "Btn_Clicked", $gMain, $Pic1)
    _GUICtrlSetOnEvent($EVENT_SECONDARY_CLICK, "Btn_Clicked", $gMain, $Pic1)
    ;ConsoleWrite($var_btn[$i][0])
    ;MsgBox(0,0,$var_btn[$i][0])
    $var_x = $var_x + 144
    ;Global GUICtrlSetCursor($_PicButton[0], 0) ; set the cursor to handpoint

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

    Next
    EndIf

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

    GUISetState(@SW_SHOW, $gMain) ; Zeigt das leere GUI-Fenster

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

    while $aGo
    Sleep(100)
    WEnd
    $d="hallo"

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

    GUIDelete()
    Func Btn_Clicked()

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

    MsgBox(0,0,"Btn_Clicked")
    EndFunc
    Func Btn_Clicked1()

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

    MsgBox(0,1,"Btn_Clicked1")
    EndFunc
    Func Btn_Clicked2()

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

    MsgBox(0,2,"Btn_Clicked2")
    EndFunc

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

    Func _screibe($a)
    MsgBox(0,1,$a)
    EndFunc

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

    Func ExitClicked() ; handle für End-Knopf
    $aGo = False
    EndFunc

    [/autoit]
    benötigte Dateien


    1. Nach Tipp von BugFix, neuere Version eingefügt:
    siehe Thread
    2. Beispieldatei hinzugefügt:
    Eventhandler.au3
    Bsp_Eventhandler.au3

    6 Mal editiert, zuletzt von gabischatz (31. August 2010 um 09:38) aus folgendem Grund: Dateien aktualisiert

  • hmm
    ich denke das

    [autoit]

    $var_btn[$i][1] = GUICtrlCreateButton($var_caption[$i][1], $var_x,4, 55, 25, BitOR($BS_ICON,$WS_GROUP))

    [/autoit]


    wird nicht gehen
    den das was da in $var_btn[$i][1] drin steht is n string
    auserdem überschreibst du damit die in $var_btn[$i][1] drin stehende verzeichnisangabe
    also wird er kein bild setzen

  • Hallo gabischatz,

    wie yxyx schon anmerkte überschreibst du den Pfad zum Bild im Array, ausserdem kann afaik ein Button entweder Bild oder Text haben, wobei das Bild (sofern gültiger Pfad vorhanden) den Vorang hat,

    mfg autoBert

  • Danke erst mal allen ich werde es mir mal genau anschauen und melde mich dann wieder.

  • Hi habe nochmal darüber geschaut und jetzt funktioniert es. Ich habe einen Button mit einem Bild darauf und den Text hat er auch, nur halt nicht sichtbar, ist so auch ok.

    [autoit]

    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var_btn[0][0]
    $var_btn[$i][0] = GUICtrlCreateButton($var_caption[$i][1], $var_x,4, 55, 25, BitOR($BS_ICON,$WS_GROUP))
    ConsoleWrite($var_btn[$i][0])
    MsgBox(0,0,$var_btn[$i][0])
    GUICtrlSetImage(-1, $var_btn[$i][1], -1)
    $var_x = $var_x + 57
    ;Global GUICtrlSetCursor($_PicButton[0], 0) ; set the cursor to handpoint

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

    Next
    EndIf

    [/autoit]


    Wie bekomme ich aber jetzt die auszuführenden Befehle in die Case siehe "Hier die Buttons"
    zB.

    [autoit]

    ; Waiting for user to close the window
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    ;Case $msg = $GUI_Button_Home
    ;_IENavigate ($oIE, "http://localhost/CSS_Button/index.html")
    ;Hier die Buttons
    For $ii = 1 To $var_btn[0][0]

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

    Case $msg = $var_text[$ii][0]
    _screibe( $var_text[$ii][1])
    Next
    ;Bis hier die Buttons

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

    Case $msg = $GUI_Button_Stop
    _IEAction ($oIE, "stop")
    _IEQuit($oIE)
    GUIDelete()
    Exit
    EndSelect
    WEnd

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

    GUIDelete()

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

    Func _screibe($a)
    MsgBox(0,0,$a)
    EndFunc

    [/autoit]


    So geht jedenfalls nicht!

  • Hi,

    probiere bitte mal das hier ...

    Spoiler anzeigen
    [autoit]


    ; Waiting for user to close the window
    While (TRUE)

    Switch (GUIGetMsg( ))
    Case $GUI_EVENT_CLOSE
    ExitLoop
    ;Case $msg = $GUI_Button_Home
    ;_IENavigate ($oIE, "http://localhost/CSS_Button/index.html")
    ;Hier die Buttons

    Case $var_btn[1][0] To $var_btn[UBound ($var_btn) - 1][0]
    _screibe( $var_text[$ii][1])
    ;Bis hier die Buttons

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

    Case $GUI_Button_Stop
    _IEAction ($oIE, "stop")
    _IEQuit($oIE)
    GUIDelete()
    Exit
    EndSwitch
    WEnd

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

    GUIDelete()

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

    Func _screibe($a)
    MsgBox(0,0,$a)
    EndFunc

    [/autoit]

    Gruß
    Greenhorn


  • Hi bekomme es einfach nicht hin, die Buttons mit den Befehlen zu füllen. :cursing:
    Siehe Post 1
    Greenhorn hat leider nicht funktioniert.

    Einmal editiert, zuletzt von gabischatz (29. August 2010 um 21:26)

  • Weil ich nicht weiß wie viele Buttons ich brauche und ich den Text Flexibel einfügen möchte.

  • Ich habe die Daten Aktualisiert
    Brauche unbedingt die Abfrage welcher Button gedrückt wurde.

  • Ich habe die Daten Aktualisiert
    Bitte Oben nachschauen

    Da ich nicht wusste wie ich den Event abfragen soll habe ich Kurzerhand eine Variable dazwischen geschoben.
    Jetzt habe ich aber das Problem wie erzeuge ich in einer Schleife mehrere Funktionen oder kann man die wiederum mit Error
    oder so zurück in eine einzelne Funktion schreiben. damit ich weiß welcher Button betätigt worden ist?

  • Hi,

    man kann keine Funktionen dynamisch erzeugen.

    Ich habe ein kleines Beispiel geschrieben, wie ich es machen würde.
    Vielleicht hilft dir das ja weiter ...

    test.ini
    Code
    [Button]
    	Button 1=C:\Users\gabi\Documents\Downloads\Projekte\Slide-GUI\Button\normalize.ico
    	Button 2=C:\Users\gabi\Documents\Downloads\Projekte\Slide-GUI\Button\maxi.ico
    [ToolTip]
    	Button 1=Tooltip-Text 1 \n ist mehrzeilig
    	Button 2=Tooltip-Text 2 ist einzeilig
    test.au3
    [autoit]


    #include <Constants.au3>
    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>

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

    Global $aIniButton
    Global $aIniToolTip

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

    Global $aBtnInfo[1][2]

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

    $aIniButton = IniReadSection ("test.ini", "Button")
    $aIniToolTip = IniReadSection ("test.ini", "ToolTip")

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

    Func ButtonProc ($id_button)

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

    MsgBox (BitOR ($MB_OK, $MB_ICONASTERISK), _
    GUICtrlRead ($id_button) , _
    StringFormat ("Button mit der ID %d wurde gedrückt", $id_button))

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

    Return TRUE

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

    EndFunc

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

    Func AutoItMain ( )

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

    Local $hwnd
    Local $top = 20

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

    $hwnd = GUICreate ("Demo", 640, 480)

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

    ReDim $aBtnInfo[$aIniButton[0][0] + 1][2]

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

    For $i = 1 To $aIniButton[0][0]

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

    $aBtnInfo[$i][0] = GUICtrlCreateButton ($aIniButton[$i][0], 20, $top, 80)

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

    GUICtrlSetImage ($aBtnInfo[$i][0], $aIniButton[$i][1])

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

    GUICtrlSetTip ($aBtnInfo[$i][0], StringFormat ($aIniToolTip[$i][1], 0))

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

    $aBtnInfo[0][0] += 1
    $top += 30
    Next

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

    GUISetState (@SW_SHOW, $hwnd)

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

    While (TRUE)

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

    $msg = GUIGetMsg (FALSE)

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

    Switch ($msg)

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

    Case $aBtnInfo[1][0] To $aBtnInfo[$aBtnInfo[0][0]][0]

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

    ButtonProc ($msg)

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

    Case $GUI_EVENT_CLOSE
    ExitLoop
    EndSwitch
    WEnd

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

    Return 0

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

    EndFunc

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

    Exit (AutoItMain ( ))

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

    ;«««««««««««««««««««««««««««««««« End Of File «««««««««««««««««««««««««««««««««

    [/autoit]

    Gruß
    Greenhorn