Sprungmarke setzen

  • Moin Moin zusammen.

    Es geht um folgendes Script:

    Spoiler anzeigen
    [autoit]


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

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.

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

    Global $hListBox

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

    _Main()

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

    Func _Main()
    Local $hGUI

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

    ; Erstellt eine GUI
    $hGUI = GUICreate("(UDF) ListBox: Erzeugen", 400, 296)
    $hListBox = _GUICtrlListBox_Create($hGUI, "String bei Erzeugung", 2, 2, 396, 296, $LBS_SORT)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_AddString($hListBox, "Musterfrau D1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann D2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind D3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum D4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad D5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau DK1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann DK2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind DK3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum DK4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad DK5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau DKD 1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann DKD 2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind DKD 4")
    _GUICtrlListBox_AddString($hListBox, "Mustermum DKD4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad DKD5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau PD1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann PD2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind PD3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum PD4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad PD5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau PDK1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann PDK2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind PDK3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum PDK4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad PDK5")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc ;==>_Main

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Niederwertiges Wort (WORD)
    $iCode = BitShift($iwParam, 16) ; Höherwertiges Wort (WORD)

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

    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK ; Wird gesendet, wenn der Benutzer einen Doppelklick auf einen String in einer ListBox ausführt
    ; Test MsgBox
    ; MsgBox(0,"hWndFrom / IDFrom / Code", "hWndFrom / IDFrom / Code: " & $hWndFrom & "---" & $iIDFrom & "---" & $iCode)
    MsgBox(4160, "ausgewählt", "Sie haben folgende Auswahl getroffen: " & _GUICtrlListBox_GetText($hListBox, $iCode))
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]

    1.)
    Wenn ich nun eine Auswahl wähle, zeigt er es mir richtig an. Treffe ich dann eine neue Entscheidung, wird immer die Auswahl angezeigt, die ich als erstes getroffen habe. Wie kann ich das ändern. Ich möchte, wenn ich auf "Musterfrau PDK1" einen Doppelklick durchführe, das "Musterfrau PDK1" angezeigt wird und wenn ich ""Musterkind PDK3"", das dann "Musterkind PDK3" angezeigt wird und nicht "Musterfrau PDK1", nur weil ich dieses als erstes aufgewählt habe.

    2.)
    Anstelle von später 697 mal "_GUICtrlListBox_AddString($hListBox, "XXX") möchte ich aus der st_list.txt, die untereinander stehenden Begriffe noch automatisch für das "XXX" einsetzen.
    a) ist das sinnvoll, da sich die Daten nie ändern
    b) wie ist es am sinnvollsten

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (12. Dezember 2014 um 14:11)

  • Zu Punkt 1.
    Du musst natürlich auch angeben welche Position aus der Liste ausgelesen werden soll. "$iCode", ist glaube ich in dem Code für etwas anderes verantwortlich nicht für die Position.

    Ich habe dir mal eine Funktion zur Erkennung des angewählten Beitrags eingebaut.


    Spoiler anzeigen
    [autoit]


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

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.

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

    Global $hListBox

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

    _Main()

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

    Func _Main()
    Local $hGUI

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

    ; Erstellt eine GUI
    $hGUI = GUICreate("(UDF) ListBox: Erzeugen", 400, 296)
    $hListBox = _GUICtrlListBox_Create($hGUI, "String bei Erzeugung", 2, 2, 396, 296, $LBS_SORT)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_AddString($hListBox, "Musterfrau D1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann D2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind D3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum D4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad D5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau DK1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann DK2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind DK3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum DK4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad DK5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau DKD 1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann DKD 2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind DKD 4")
    _GUICtrlListBox_AddString($hListBox, "Mustermum DKD4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad DKD5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau PD1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann PD2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind PD3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum PD4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad PD5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau PDK1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann PDK2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind PDK3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum PDK4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad PDK5")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    EndFunc ;==>_Main

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $hWndFrom, $iIDFrom, $iCode, $hWndListBox
    If Not IsHWnd($hListBox) Then $hWndListBox = GUICtrlGetHandle($hListBox)
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Niederwertiges Wort (WORD)
    $iCode = BitShift($iwParam, 16) ; Höherwertiges Wort (WORD)

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

    Switch $hWndFrom
    Case $hListBox, $hWndListBox
    Switch $iCode
    Case $LBN_DBLCLK ; Wird gesendet, wenn der Benutzer einen Doppelklick auf einen String in einer ListBox ausführt
    ; Test MsgBox
    ; MsgBox(0,"hWndFrom / IDFrom / Code", "hWndFrom / IDFrom / Code: " & $hWndFrom & "---" & $iIDFrom & "---" & $iCode)
    local $aItem
    $aItem = _GUICtrlListBox_GetCurSel($hListBox) ;Eintrags Position bekommen
    MsgBox(4160, "ausgewählt", "Sie haben folgende Auswahl getroffen: " & _GUICtrlListBox_GetText($hListBox, $aItem))

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

    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]


    Punkt 2.

    Ja du kannst eine .txt Datei erstellen und die mit einem Array über FileReadLine einlesen und dabei deiner Listbox übergeben.

    2 Mal editiert, zuletzt von KloMeister (12. Dezember 2014 um 15:14)

    • Offizieller Beitrag

    Auch wenn es dort nur zur Testausgabe geschieht:

    Zitat

    Warnung: Das Blockieren von laufenden Benutzerfunktionen, die Fensternachrichten verwenden (z.B. mit Befehlen wie "Msgbox()"), kann zu unerwartetem Verhalten führen. So schnell wie möglich sollte dann die Rückkehr zum System stattfinden !!!

    ^^

    Das Verhalten tritt auf, weil die registrierte Message noch nicht an das System weitergereicht wurde. Du wertest einen Zustand aus, der erst beim Verlassen der Funktion vom System umgesetzt wird.

    Edit:
    Hier mal ein Weg, wie man das sauber löst.

    Spoiler anzeigen
    [autoit]

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

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

    Global $hListBox, $fDouble = False

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

    _Main()

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

    Func _Main()
    Local $hGUI = GUICreate("(UDF) ListBox: Erzeugen", 400, 296)
    $hListBox = _GUICtrlListBox_Create($hGUI, "String bei Erzeugung", 2, 2, 396, 296, $LBS_SORT)
    GUISetState()

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

    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_AddString($hListBox, "Musterfrau D1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann D2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind D3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum D4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad D5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau DK1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann DK2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind DK3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum DK4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad DK5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau DKD 1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann DKD 2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind DKD 4")
    _GUICtrlListBox_AddString($hListBox, "Mustermum DKD4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad DKD5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau PD1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann PD2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind PD3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum PD4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad PD5")
    _GUICtrlListBox_AddString($hListBox, "Musterfrau PDK1")
    _GUICtrlListBox_AddString($hListBox, "Mustermann PDK2")
    _GUICtrlListBox_AddString($hListBox, "Musterkind PDK3")
    _GUICtrlListBox_AddString($hListBox, "Mustermum PDK4")
    _GUICtrlListBox_AddString($hListBox, "Musterdad PDK5")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $GUI_EVENT_PRIMARYUP
    If $fDouble Then
    $fDouble = False
    ConsoleWrite(_GUICtrlListBox_GetText($hListBox, _GUICtrlListBox_GetCurSel($hListBox)) & @CRLF)
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>_Main

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg
    Local $iCode = BitShift($iwParam, 16)
    If $ilParam = $hListBox And $iCode = $LBN_DBLCLK Then $fDouble = True
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

    [/autoit]