Bilder öffnen durch einem Pfad aus einer .csv Datei

  • Hallo alle zu sammen,

    ich bin recht neu im Thema und hab schon einiges verstanden. Also Ausgangsdatei hab ich das Bookmanagment script benutzt.
    Mein Projekt ist eine Fehlerdatenbank in den man Fehlernummer, Fehlerbeschreibung, Mögliche Ursache, Fehler Beheben schreiben bzw auslesen kann!
    Das Klappt auch schon recht gut! So jetzt, wo ihr mir helfen könntet:

    Ich möchte gern Bilder zu den Einträge hinterlegen die mit einem Button, zu öffnen sind (cool wäre mehrere Bilder aber eins pro Eintrag wäre schon Top)

    Ich hab also versucht in die datenbank.csv einen eintrag mit dem pfad der jpg datei geschrieben nur ich bekomme es nicht hin die Datei zu öffen!

    Probiert hab ich schon Fileopen, SplashImageOn, ShellExecute, FileOpenDialog aber nichts hat geklappt.
    Vielleicht hab ich noch nicht den richtigen Befehl gefunden oder den script falsch geschrieben!
    Bin mir auch nicht sicher ob es nur mit einer func klappt!

    Hier eine vereinfachter Script

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

    #include <GUIConstantsEx.au3>
    #include <File.au3>

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

    Global $Dateiname = "datenbank.csv"
    Global $inhalt
    Global $Zeile
    Global $datensatz

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

    dim $input[4]
    dim $label[4]

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

    GUICreate("Fehlerabfrage", 400, 400, 250, 10)

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

    $label[0] = GUICtrlCreateLabel("", 1, 1, 1, 1)
    $label[1] = GUICtrlCreateLabel("Eingabe 1:", 20, 20, 200, 25)
    $label[2] = GUICtrlCreateLabel("Eingabe 2:", 20, 60, 200, 25)
    $label[3] = GUICtrlCreateLabel("Bild Pfad:", 20, 100, 200, 25)

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

    $input[0] = GUICtrlCreateInput("", 1, 1, 1, 1)
    $input[1] = GUICtrlCreateInput("", 100, 20, 200, 25)
    $input[2] = GUICtrlCreateInput("", 100, 60, 200, 25)
    $input[3] = GUICtrlCreateInput("", 100, 100, 200, 25)

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

    $Button1 = GUICtrlCreateButton("zurück", 100, 170, 80, 25)
    $Button2 = GUICtrlCreateButton("weiter", 200, 170, 80, 25)
    $Button3 = GUICtrlCreateButton("Bild", 100, 140, 80, 25)

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

    $mlMenuDatei = GUICtrlCreateMenu("Datei")
    $mlprogrammbeenden = GUICtrlCreateMenuItem("Beenden", $mlMenuDatei)

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

    GUISetState(@SW_SHOW)

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

    Einlesen_Datei()

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

    $datensatz = 2
    Anzeige_Datensatz_nr($datensatz)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button1
    $datensatz = $datensatz - 1
    Anzeige_Datensatz_nr($datensatz)
    case $Button2
    $datensatz = $datensatz + 1
    Anzeige_Datensatz_nr($datensatz)
    Case $Button3
    Anzeige_Bild()
    EndSwitch
    WEnd

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

    Func Anzeige_Bild()
    SplashImageOn("Splash Fenster", $input[3], 250, 50)
    Sleep(3000)
    SplashOff()
    EndFunc

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

    func Einlesen_Datei()
    $inhalt = FileRead($Dateiname)
    if $inhalt = "" then $inhalt = neue_Datei()
    $zeile = StringSplit($inhalt, @crlf, 3)
    endfunc

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

    func Anzeige_Datensatz_nr($nummer)
    if UBound($zeile) <= 2 then return
    if $nummer < 1 then $nummer = UBound($zeile) - 2
    if $nummer > UBound($zeile) - 2 then $nummer = 1
    $datensatz = $nummer
    $feld = StringSplit($zeile[$nummer], "|", 3)
    for $i = 0 to UBound($input) - 1
    GUICtrlSetData($input[$i], $feld[$i])
    Next
    endfunc

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

    func neue_Datei()
    $Datensatz = ""
    for $i = 0 to UBound($input) - 1
    $Datensatz = $Datensatz & GUICtrlRead($label[$i]) & "|"
    Next
    FileWrite($Dateiname, $Datensatz & @crlf)
    Einlesen_Datei()
    EndFunc

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

    Die datenbank.csv sieht so aus
    Anzahl id|Eintrag 1|Eintrag 2|Bild Pfad
    |Eintrag1|Eintrag1|"C:\bilder\1.JPG"
    |Eintrag2|Eintrag2|"C:\bilder\2.JPG"
    |Eintrag3|Eintrag3|"C:\bilder\3.JPG"

    Also wenn ihr lust habt mir zu helfen dann her mit Euren lösungen.

    Danke sagt Sascha

    • Offizieller Beitrag

    Probier es mal so:

    AutoIt
    SplashImageOn("Splash Fenster",GUICtrlRead( $input[3]), 250, 50)
  • Hi,
    anstatt den Pfad der Bilddatei in das Input einzutippern würde ich eine Auswahlbox GUICtrlCreateCombo() verwenden um aus einer bestimmten Anzahl Bilder das passende auszuwählen, alternativ ein Button für ein FileOpenDialog().
    Das mit den Bildern ist sowieso unklar, bestehen diese Bilder bereits irgendwo, werden diese bspw. per Mail geschickt oder sind das Screenshots?

    Alternativ dazu mach die GUI viel größer und teile die Eingabebereiche für Text und die Vorschau für die Bilder auf, so dass man nur noch das passende Bild/Control/Auswahl anklicken muss.

    Bevor man so ein Script anfängt, sollte man sich erst man Gedanken darüber machen, welche Anforderungen bestehen.
    Wenn solch ein Script bspw. an einer Telefonhotline eingesetzt werden soll, dann ist SCHNELLE und IDIOTENSICHERE Bedienung die Grundvorraussetzung.

    Ich habe das schon so umgesetzt, dass bspw. die gemeldeten Fehler/Reklamationen entweder per Dropdown-Liste, oder direkt aus einer Liste per Mausklick ausgewählt werden. Diese Liste wird mit jedem neuen Eintrag nach Häufigkeit sortiert, d.h. bei einer Reklamation muss der Mitarbeiter nur noch die Auftragsnummer eintippern, geht per TAB in die Liste, wählt dort ggf. einen der TOP10 Einträge aus oder Klickt diesen an oder erstellt eine neue Fehlerbeschreibung.
    Ich bin grundsätzlich für eine Bedienung per Tastatur für diese wenigen Controls (max. 10 Stück), denn für geübte Anwender ist das wesentlich schneller als jedes Mausgeschubse...

    In deinem Script steht der Cursor übrigens im INPUT[0] und ist nur durch TAB/ENTER in ein anderes Feld zu bewegen. Da INPUT[0] aber ein "unsichtbares" Feld ist, hängt der Cursor oben links in der GUI fest. Mach entweder INPUT[0] sichtbar oder lösche es einfach.

    Jetzt hab ich viel geschrieben, kein Script gepostet....
    Das kommt davon wenn die Anforderungen UNKLAR formuliert sind ;)

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (6. Mai 2015 um 18:41)

  • Klasse Raupi,

    vielen Dank der Schlüssel war "GUICtrlRead". Ich muss noch viel lernen :)

    Hab jetzt auch statt "SplashImageOn" den befehl "ShellExecute" angewendet, da ich es dort selbst beenden, und sich nicht auf Zeit das Fenster schliesst!

    Danke noch einmal, bestimmt nicht meine letzte Frage

    Gruß Sascha

    Einmal editiert, zuletzt von Tacheles75 (6. Mai 2015 um 22:00)