Progressbar/PDF/ListView

  • Hallo
    ich habe vor, ein neues kleines Programm zu schreiben, jedoch haben sich mir schon in der Planung einige Fragen aufgetan, welche ich teilweise selbst lösen konnte, andere wiederum nicht.
    Das Programm soll eine Preisliste, welche sozusagen meine Datenbank ist, in eine ListView einlesen. Diese möchte ich später nach bestimmten Stichwörtern durchsuchen können, um direkt zum richtige Artikel zu gelangen. Diesen möchte ich dann durch das klicken eines Button auf eine 2te ListView übertragen, auf welcher ich die benötigten Artikel sammle. Wenn die Liste fertig ist, möchte ich diese in eine Exceldatei übertragen.
    Hierbei habe ich folgende Probleme, die ich nicht selbst lösen kann:
    1. Die Preisliste ist eine PDF-Datei. Kann ich von Dort Texte an einer bestimmten Stelle einlesen? Die Datei besitzt ~140 Seiten und es wäre daher sehr Zeitaufwenid diese beispielsweise manuell in ein anderes Format umzuwandeln.
    2. Wie übertrage ich ein Listvieweintrag von einer zur anderen ListView?
    3. Wie kann ich durch Eingabe eines Suchbegriffes in einer Inputbox direkt zum gewünschten Eintrag gelangen?

  • Du kannst eine PDF auch als Textdokument öffnen ;). Nur sind dann ein paar kryptische Zeichenketten enthalten.
    Außerdem solltest du dir die _GUICtrlListView_... Befehle anschauen. Damit kannst du Beispielsweise herausfinden, welcher Eintrag ausgewählt ist wenn du den Button klickst und dann einfach diesen Eintrag in ein 2tes ListView kopieren.

  • D.h. wenn ich die PDF in eine Textdatei umwandle, dann kann ich eine Normale Textdatei als Datenbank nutzen? Wenn ja, vermute ich, dass die Textdatei dann als Array eingelesen wird. Muss dann jeder Eintrag in einer extra Zeile sein? Ich habe nämlich unterschiedliche Zeilen im Listview, in welche die Daten eingeordnet werden sollen. Wie soll ich das dann machen? Muss ich dies dann über Stringsplit aufteilen?

    Habe mal kurz ein GUI erstellt um zu verdeutlichen, wie das ganze ungefähr aussehen soll.

    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.6.0
    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 <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 730, 587, 170, 78)
    $Tab1 = GUICtrlCreateTab(0, 8, 729, 577)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem(" Preisliste ")
    $ListView1 = GUICtrlCreateListView("Arikelnummer|Bezeichnung|Menge|Preis", 8, 88, 706, 486)
    $Input1 = GUICtrlCreateInput("", 8, 48, 121, 21)
    $Button1 = GUICtrlCreateButton("Suchen", 136, 46, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Übertragen", 240, 46, 75, 25, 0)
    $TabSheet2 = GUICtrlCreateTabItem(" Auswahl ")
    $ListView2 = GUICtrlCreateListView("Arikelnummer|Bezeichnung|Menge|Preis", 8, 88, 706, 486)
    $Button3 = GUICtrlCreateButton("Löschen", 8, 46, 75, 25, 0)
    $Button4 = GUICtrlCreateButton("Liste >> Excel", 104, 46, 91, 25, 0)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

    [/autoit]
  • Hallo descent,

    zu

    • schau dir Listview-Datenbank-Beispiel
    • Spoiler anzeigen
      [autoit]

      #include <GUIConstantsEx.au3>
      #include <GUIConstants.au3>
      #include <WindowsConstants.au3>
      #include <GuiListView.au3>
      #include <ListViewConstants.au3>
      #include <File.au3>

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

      ;#include <array.au3>

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

      Local $tZeit, $s1, $s2

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

      $main = GUICreate("Test Drag & Drop from LV1 to LV2 DblClick in LV1 with ContextMenu in LV1 (copies to ClipBoard", 600, 400)
      $listview = GUICtrlCreateListView("Gruppe1| BlubText", 10, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
      GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
      GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1

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

      $listview2 = GUICtrlCreateListView("Gruppe2 | BlubText", 230, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
      GUICtrlSetState($listview2, $GUI_DROPACCEPTED)
      $hbtnInfo = GUICtrlCreateButton("Info", 10, 120, 100, 20)
      $hbtnSave = GUICtrlCreateButton("&Speichern", 230, 120, 100, 20)
      $hbtnLoad = GUICtrlCreateButton("&Laden", 230, 150, 100, 20)

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

      For $i = 1 To 9
      $listitem = GUICtrlCreateListViewItem("test" & $i & " |Blub " & Random(1, 9), $listview)
      if $i=5 Then GUICtrlSetFont($listitem,14,800)
      GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
      Next
      $idContextmenu = GUICtrlCreateContextMenu($listview)
      $idClipmenu = GUICtrlCreateMenuItem("Selektierte ins ClipBoard", $idContextmenu)
      $idAllClipmenu = GUICtrlCreateMenuItem("Alle aus Splate 2 ins ClipBoard", $idContextmenu)
      $idDragmenu = GUICtrlCreateMenuItem("In LV 2", $idContextmenu)

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

      GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick
      GUISetState()
      $first = True
      While 1
      $msg = GUIGetMsg()
      Switch $msg
      Case $GUI_EVENT_DROPPED, $idDragmenu
      $ar = _GUICtrlListView_GetSelectedIndices($listview, True)
      ;_ArrayDisplay($ar)
      For $i = 1 To $ar[0]
      $sItem = _GUICtrlListView_GetItemTextString($listview, $ar[$i])
      GUICtrlCreateListViewItem($sItem, $listview2)
      Next
      Case $hbtnInfo
      $Wert = _GUICtrlListView_GetItemTextArray($listview)
      If $Wert[2] <> "" Then
      MsgBox(0, "Eintrag für " & $Wert[1], "ist: " & $Wert[2])
      Else
      MsgBox(0, "", "Kein Eintrag ausgewählt")
      EndIf
      Case $hbtnSave
      SaveLV(@ScriptDir & "\LV2.DAT")
      Case $hbtnLoad
      LoadLV(@ScriptDir & "\LV2.DAT")
      Case $idClipmenu
      $aItems = _GUICtrlListView_GetSelectedIndices($listview, True)
      $sItemText = ""
      For $i = 1 To $aItems[0]
      ;Schleifenbeginn 1 da $aItem[0] die Anzahl enhält
      $sItemText &= _GUICtrlListView_GetItemTextString($listview, $aItems[$i]) & @CRLF
      ConsoleWrite($sItemText & @CRLF)
      Next ;= > weiter mit For
      ;ClipPut($sItemText & @CRLF)
      Case $idAllClipmenu
      $sToClip = ""
      For $i = 0 To _GUICtrlListView_GetItemCount($listview)
      $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
      $sToClip &= $aItem[2] & @CRLF
      Next
      ClipPut($sToClip)
      Case $GUI_EVENT_CLOSE
      Exit
      EndSwitch
      WEnd

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

      Func SaveLV($sFile)
      Local $hFileOut, $aItem
      $hFileOut = FileOpen($sFile, 2)
      For $j = 0 To _GUICtrlListView_GetItemCount($listview2) - 1
      $aItem = _GUICtrlListView_GetItemTextString($listview2, $j)
      FileWriteLine($hFileOut, $aItem)
      Next
      FileClose($hFileOut)
      EndFunc ;==>SaveLV

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

      Func LoadLV($sFile)
      Local $aItems
      If FileExists($sFile) Then
      _FileReadToArray($sFile, $aItems)
      If IsArray($aItems) Then
      _GUICtrlListView_DeleteAllItems($listview2)
      ;_ArrayDisplay($aItems)
      For $j = 1 To $aItems[0]
      GUICtrlCreateListViewItem($aItems[$j], $listview2)
      Next
      EndIf
      EndIf
      EndFunc ;==>LoadLV

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

      Func WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam) ;<================== Benachrichtigung Doppelklick (Original from Chaoskeks [in ChaosExecution])
      Local $tagNMHDR, $event, $hwndFrom, $code
      $tagNMHDR = DllStructCreate("int;int;int", $lParam)
      If @error Then Return 0
      $code = DllStructGetData($tagNMHDR, 3)
      If $wParam = $listview Then
      ;ConsoleWrite($code & @CRLF)
      Switch $code
      Case -3
      If _GUICtrlListView_GetSelectedCount($listview) > 0 Then
      For $i = 0 To _GUICtrlListView_GetItemCount($listview)
      If _GUICtrlListView_GetItemSelected($listview, $i) Then
      $aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
      MsgBox(0, "Doppel-Klick auf ", $aItem[1] & @CRLF & @CRLF & $aItem[2])
      EndIf
      Next
      EndIf
      EndSwitch
      EndIf
      Return $GUI_RUNDEFMSG
      EndFunc ;==>WM_NOTIFY

      [/autoit]
    • schau dir die Hilfe zu[autoit]_GUICtrlListView_FindText[/autoit] an

    Du könntest dir auch überlegen, das ganze mit SQLite zu realisieren,

    mfg (Auto)Bert

  • Ok danke, werd mir das gleich mal anschauen.
    Das mit SQL habe ich mir auch schon überlegt. Habe hier nur das Problem das ich nicht weiß wie ich alle Einträge von der PDF bzw wenn ich es umwandel der Textdatei ind die SQL -DAtenbank übertragen soll.