Guictrlread & GUICtrlCreateList - auslesen

  • Hey,

    ich würde gerne die Einträge einer List, sprich GUICtrlCreateList auslesen.

    Sprich der soll oben anfangen und runter bis zum letzten Eintrag, die anzahl ist unbekannt.
    am besten irgendwie in nem Array mit ner Forschleife.

    Aber wie sag ich dem er soll immer ein Item nach runter, bis zum ende ^^

    Gruß

  • das ist doch schnell selbst gebastelt:

    [autoit]

    For $i = 0 To _GUICtrlListBox_GetCount(GUICtrlGetHandle($List1))-1
    msgbox(0,"",_GUICtrlListBox_GetText(GUICtrlGetHandle($List1), $i))
    Next

    [/autoit]
  • Hallo kev,

    schau dir die beiden Befehle in der Hilfe an,

    [autoit]

    #Include <GuiListBox.au3>
    _GUICtrlListBox_GetCount($hWnd) ;gibt die Anzahl der Einträge zurück
    _GUICtrlListBox_GetText($hWnd, $iIndex) ;gibt den Text des mit $iIndex gewählten Eintrags zurück

    [/autoit]

    Edit: Schnitzel GUICtrlGetHandle ist nicht notwendig (siehe die Beispiele in der Hilfe, da werden es auch nicht verwendet)

    mfg (Auto)Bert

  • Edit: Schnitzel GUICtrlGetHandle ist nicht notwendig (siehe die Beispiele in der Hilfe, da werden es auch nicht verwendet)

    da haste Recht ;)
    Hab mir nur die Parameterbeschreibung angesehn...

  • Alles klar danke ;)

    habs so gelößt

    [autoit]

    func read()
    $lesen = _GUICtrlListBox_GetCount($list)
    for $i = 0 To $lesen -1
    $ergebnis = _GUICtrlListBox_GetText($list, $i)
    Next
    Endfunc

    [/autoit]
  • Sprich der soll oben anfangen und runter bis zum letzten Eintrag, die anzahl ist unbekannt.
    am besten irgendwie in nem Array mit ner Forschleife.

    müsste es dann nicht so sein:

    [autoit]

    func read()
    $lesen = _GUICtrlListBox_GetCount($list)
    Dim $ergebnis[$lesen)
    for $i = 0 To $lesen -1
    $ergebnis[$i] = _GUICtrlListBox_GetText($list, $i)
    Next
    _arrayDisplay($ergebnis)
    Endfunc

    [/autoit]

    edit: komplettes Beispiel-Skript (Button Info klicken):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GuiListBox.au3>
    #include <ListboxConstants.au3>
    #include <File.au3>
    #include <array.au3>

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

    Global $szDrive, $szDir, $szFName, $szExt
    Global $aDropFiles[1], $WM_DROPFILES = 0x233

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

    $idGUI = GUICreate("Flaggen", 300, 115, -1, -1, -1, $WS_EX_ACCEPTFILES)
    $idListe = GUICtrlCreateList("", 10, 10, 180, 80, BitOR($WS_VSCROLL, $LBS_NOTIFY)) ;,BitOR($LBS_SORT, $LBS_MULTIPLESEL)
    GUICtrlSetState($idListe, $GUI_DROPACCEPTED)
    $idNeu = GUICtrlCreateButton("...", 200, 10, 30, 25)
    $idVorschau = GUICtrlCreatePic(@ScriptDir & "\Flaggen\NA.jpg", 210, 40, 36, 24)
    $idInfo = GUICtrlCreateButton("&alle auslesem", 10, 90, 180, 25)
    GUISetState()

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

    GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_DROPPED
    _FilesDropped()
    Case $idInfo
    $count = _GUICtrlListBox_GetCount($idListe)
    Dim $aListe[$count]
    For $i = 0 To $count - 1
    $aListe[$i] = _GUICtrlListBox_GetText($idListe, $i)
    Next
    _ArrayDisplay($aListe)
    Case $idNeu
    $sAlt = GUICtrlRead($idListe)
    $sPlus = FileOpenDialog("La(e)nder auswählen:", @ScriptDir & "\Flaggen", "Bilder (*.jpg)", 7, "", $idGUI)
    $aPlus = StringSplit($sPlus, "|")
    If IsArray($aPlus) Then
    ;_ArrayDisplay($aPlus)
    If $aPlus[0] > 1 Then
    For $i = 2 To $aPlus[0]
    ConsoleWrite($aPlus[$i] & @CRLF)
    _GUICtrlListBox_InsertString($idListe, $aPlus[$i], $i - 2)
    Next
    Else
    _PathSplit($sPlus, $szDrive, $szDir, $szFName, $szExt)
    ConsoleWrite($szFName & @CRLF)
    _GUICtrlListBox_InsertString($idListe, $szFName & $szExt, 0)
    EndIf
    EndIf
    Case $idListe
    ConsoleWrite(GUICtrlRead($idListe) & ".jpg" & @CRLF)
    GUICtrlSetImage($idVorschau, @ScriptDir & "\Flaggen\" & GUICtrlRead($idListe))
    EndSwitch
    WEnd

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

    Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
    Local $nSize, $pFileName
    Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
    For $i = 0 To $nAmt[0] - 1
    $nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
    $nSize = $nSize[0] + 1
    $pFileName = DllStructCreate("char[" & $nSize & "]")
    DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
    ReDim $aDropFiles[$i + 1]
    $aDropFiles[$i] = DllStructGetData($pFileName, 1)
    $pFileName = 0
    Next
    EndFunc ;==>WM_DROPFILES_FUNC

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

    Func _FilesDropped()
    Local $szDrive, $szDir, $szFName, $szExt, $split
    For $i = 0 To UBound($aDropFiles) - 1
    $split = _PathSplit($aDropFiles[$i], $szDrive, $szDir, $szFName, $szExt)
    $szExt = StringUpper($szExt)
    ;ConsoleWrite($aDropFiles[$i] & ", " & $szExt & @CRLF)
    ; Switch $szExt
    ; Case ".JPG"
    _GUICtrlListBox_InsertString($idListe,$szFName & $szExt,0)
    ; EndSwitch
    Next
    EndFunc ;==>_FilesDropped

    [/autoit]

    dazu wird noch Flaggen.zip benötigt, die in @Scriptdir\flaggen entpackt werden müssen

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (24. Juni 2010 um 17:26)

  • das komische ist.

    wenn ichs so wie bei dir mach, steht bei array nix drin ;)

    auf meine art:

    in der messagebox displayt er alle items die in der list sind.
    trägt aber iwie nur den ersten in die db ein.

    why?
    :o

    [autoit]

    Func mysql()
    If Not _EzMySql_Startup() Then
    MsgBox(0, "Error Starting MySql", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    $Pass = "pass"
    If Not _EzMySql_Open("localhost", "root", $Pass, "keys", "3306") Then
    MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    If Not _EzMySql_Exec("CREATE DATABASE IF NOT EXISTS EzMySqlTest") Then
    MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    If Not _EzMySql_SelectDB("keys") Then
    MsgBox(0, "Error setting Database to use", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    $lesen = _GUICtrlListBox_GetCount($list)
    for $i = 0 To $lesen -1
    $ergebnis = _GUICtrlListBox_GetText($list, $i)
    msgbox(0,"",$ergebnis)
    $insert = 'INSERT INTO licence (licence,used) VALUES (' & $ergebnis & ',1)'
    Next
    If Not _EzMySql_Exec($insert) Then
    MsgBox(0, "Error inserting data to Table", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    EndFunc ;==>mysql

    [/autoit]
  • das komische ist.

    wenn ichs so wie bei dir mach, steht bei array nix drin ;)

    ich habe es Online geschrieben, da kein komplett lauffähiges Skriptbeispiel dabei, sorry habs nicht getestet kann aber keinen Fehler sehen

    Edit: ich habe in meinem vorherigen Post ein Skriptbeispiel hinein editiert


    so sollte es funktionieren;

    [autoit]

    Func mysql()
    If Not _EzMySql_Startup() Then
    MsgBox(0, "Error Starting MySql", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    $Pass = "pass"
    If Not _EzMySql_Open("localhost", "root", $Pass, "keys", "3306") Then
    MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    If Not _EzMySql_Exec("CREATE DATABASE IF NOT EXISTS EzMySqlTest") Then
    MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    If Not _EzMySql_SelectDB("keys") Then
    MsgBox(0, "Error setting Database to use", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    $lesen = _GUICtrlListBox_GetCount($list)
    for $i = 0 To $lesen -1
    $ergebnis = _GUICtrlListBox_GetText($list, $i)
    msgbox(0,"",$ergebnis)
    $insert = 'INSERT INTO licence (licence,used) VALUES (' & $ergebnis & ',1)'
    If Not _EzMySql_Exec($insert) Then
    MsgBox(0, "Error inserting data to Table", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
    EndIf
    Next
    EndFunc ;==>mysql

    [/autoit]

    natürlich wieder ungetestet,

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (24. Juni 2010 um 17:29)

  • autoBert: Deine erste Version scheint schon richtig gewesen zu sein - kann da ebenfalls keinen Fehler sehen ;)

    Aber folgendes:

    Nun, wenn man sich mal überlegt, dass eine MsgBox kein Array anzeigen kann.. ;)
    Und dass deine Version nur einen Eintrag in die Datenbank geschrieben hat liegt daran, dass du $ergebnis in der For-Schleife immer wieder neu definiert und erst nach der Schleife nur einen Eintrag geschrieben hast.

    AutoBerts letzte Version dürfte auch funktionieren, ich persönlich würde aber einen getrennten Ablauf bevorzugen - der Übersicht halber:
    Erst auslesen aus der Liste in ein Array,
    dann die Werte aus dem Array in die DB schreiben. ^^

    Ist aber jedem selbst überlassen, wollte ich nur nochmal angemerkt haben ;)

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.