GUI die bilder eines verzeichnisses nacheinander anzeigt

  • Hallo....

    ich möchte eine GUI schreiben, die sämtliche Bilder in einem bestimmten verzeichnis nacheinander anzeigt.
    dazu will ich für jedes angezeigte bild eine kommentarfunktion. das eingegebene Komentar soll nach der eingabe in eine ini datei oder ne andere gesepeichert werden. das belegen der buttons und das schreiben der ini-datei werde ich später festlegen.
    mir gehts lediglich darum dass sich die gui öffnet, das erste gefundene bild angezeigt wird, ich ein kommentar eingeben kann. einen button klicke oder am besten in der inputbox enter drücke, der inhalt der inputbox einer variable übergeben wird. wenn das erledigt ist beginnt es von vorne. also nächste gefundenes bild soll angezeigt werden und etc.

    hab zwei scripte geschrieben.
    das eine sucht im verzeichnis jede bilddatei und übergibt mir den dateinamen (ohne verzeichnisname).
    das zweite script ist die gui, die mittels einer vorgebeben-pfad-variable und datei-variable ein bild in der gui anzeigt.
    habs es deswegen erstmal in 2 scripte geschrieben, damit ich die funktionen besser testen kann.

    nun kommt der, für mich, schwierige teil... das verschmelzen der scripte.
    das schreiben des kommentares, die belegung der buttons sind nicht wichtig!!

    nun endlich das mal bisher erstellte script.


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

    #include <GUIConstants.au3>
    Const $SS_REALSIZEIMAGE = 0x800
    $pfad = "C:\Bilder"

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

    $search = FileFindFirstFile($pfad & "\" & "*.jp*g")
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es konnten keine Bilder gefunden werden!!")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    $Form1 = GUICreate("Form1", 721, 477, -1, -1)
    $Pic1 = GUICtrlCreatePic($pfad & "\" & $file, -1, -1, 454, 64, BitOR($SS_NOTIFY, $SS_REALSIZEIMAGE, $WS_GROUP, $WS_CLIPSIBLINGS))
    $Input1 = GUICtrlCreateInput("", 308, 328, 113, 21)
    $Button1 = GUICtrlCreateButton("Kommentar speichern", 232, 384, 97, 33, 0)
    $Button2 = GUICtrlCreateButton("Beenden", 392, 384, 113, 33, 0)
    GUISetState(@SW_SHOW)

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

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

    EndSwitch
    WEnd

    WEnd

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

    FileClose($search)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Habe hier ein problem mit der schleife bzw. mit zwei schleifen.

    die eine die ständig meine eingabe der GUI abfrägt, und die andere die immer das nächste bild sucht und einer variable übergibt.

    wie ist es denn am besten?
    sollte die abfrage der bild-dateien zuerst an ein array übergeben werden und erst dann wenn dass erledigt ist, die GUI angezeigt werden, dass array ausgelesen?
    ach ka.
    macht kein grossen unterschied. hab trotzdem 2 verschalchtelte schleifen....
    wenn jemand einen tipp weiss, wäre ich dankbar.


    MfG

  • mal ein beispiel, bei fragen bitte melden:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <array.au3>
    Const $SS_REALSIZEIMAGE = 0x800
    Dim $arr[1]
    $pfad = "e:\Bilder"
    $comments = $pfad & "\comments.ini"
    $search = FileFindFirstFile($pfad & "\" & "*.jp*g")
    $curIndex = 1
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es konnten keine Bilder gefunden werden!!")
    Exit
    EndIf

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    _ArrayAdd($arr,$file)
    WEnd
    FileClose($search)

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

    $arr[0] = UBound($arr) -1
    _ArrayDisplay($arr)

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

    #Region ### START Koda GUI section ### Form=
    $frmMain = GUICreate("Bildbeschreiber.....", 489, 434, 899, 382)
    $Pic1 = GUICtrlCreatePic($pfad & "\" & $arr[1], 16, 24, 454, 100, BitOR($SS_NOTIFY, $SS_REALSIZEIMAGE, $WS_GROUP, $WS_CLIPSIBLINGS))
    $txtComment = GUICtrlCreateEdit("", 16, 168, 454, 193)
    _ChangeImg()
    $cmdBack = GUICtrlCreateButton("<<", 184, 136, 49, 25, 0)
    $cmdNext = GUICtrlCreateButton(">>", 248, 136, 49, 25, 0)
    $cmdSaveComment = GUICtrlCreateButton("Kommentar speichern", 16, 368, 457, 25, 0)
    $cmdClose = GUICtrlCreateButton("Beenden", 16, 400, 457, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cmdClose
    Exit
    Case $cmdBack
    _Prev()
    Case $cmdNext
    _Next()
    Case $cmdSaveComment
    IniWrite($comments,"comments",$arr[$curIndex],StringReplace(GUICtrlRead($txtComment),@CRLF,"|"))
    EndSwitch
    WEnd

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

    Func _Next()
    If $curIndex < $arr[0] Then
    $curIndex += 1
    Else
    $curIndex = 1
    EndIf
    _ChangeImg()
    EndFunc

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

    Func _Prev()
    If $curIndex > 1 Then
    $curIndex -= 1
    Else
    $curIndex = $arr[0]
    EndIf
    _ChangeImg()
    EndFunc

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

    Func _ChangeImg()
    GUICtrlDelete($Pic1)
    $Pic1 = GUICtrlCreatePic($pfad & "\" & $arr[$curIndex], 16, 24, 454, 100, BitOR($SS_NOTIFY, $SS_REALSIZEIMAGE, $WS_GROUP, $WS_CLIPSIBLINGS))
    $str = IniRead($comments,"comments",$arr[$curIndex],"")
    $str = StringReplace($str,"|",@CRLF)
    GUICtrlSetData($txtComment,$str)
    EndFunc

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

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Da hast du ganze arbeit geleistet. Vielen Dank.
    werds gleich mal testen.
    noch ne frage.
    wenn ich eine func definiere, kann ich diese definierte func 5 mal nacheinander aufrufen?
    als beispiel:

    [autoit]

    _blabla()
    _blabla()
    _blabla()

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

    func _blabla
    msgbox(0,"","blubb")
    endfunc

    [/autoit]
  • [autoit]

    For $i = 1 To 5
    _blabla()
    Next

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

    Func _blabla()
    MsgBox(0, "", "blubb")
    EndFunc ;==>_blabla

    [/autoit]
  • verstehe schon dass es einfacher ist das in eine schleife zu setzen.
    hab das mal getestet ohne schleife mit 2 mal. ging aber nur einmal. deswegen die frage :D


    MfG


    //edit....


    hab garnichts gesagt und nochweniger geschrieben :whistling:

    muss wohl letztens was schiefgegangen sein


    MfG