Input werte der größe nach ordnen lassen

  • er gibt mir einen fehler aus:

    C:\Dokumente und Einstellungen\Dtex.DTEX-YI8SXFHVNC\Desktop\dkp manager.au3(78,42) : ERROR: _FileReadToArray(): undefined function.
    _FileReadToArray($sLVdat, $aItems)

  • Hallo dtex,

    er gibt mir einen fehler aus:C:\Dokumente und Einstellungen\Dtex.DTEX-YI8SXFHVNC\Desktop\dkp manager.au3(78,42) : ERROR: _FileReadToArray(): undefined function._FileReadToArray($sLVdat, $aItems)


    ja da fehlt am Anfang noch #include <File.au3>, hier noch einmal das ganze Skript (jetzt auch getestet, sorry hatte gestern ein zeitaufwendiges Skript gestartet so das ich nicht testen konnte):

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>

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

    Global $sLVdat = @ScriptDir & "\LV_Daten.Dat"

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

    GuiCreate("DKP Manager",300,500,100,100)
    $check = 0

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

    $input_name=GUICtrlCreateInput("", 15, 15, 110, 20)
    $input_dkp=GUICtrlCreateInput("", 140, 15, 60, 20)
    $button_create=GUICtrlCreateButton("Add char", 210, 15, 75, 20)

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

    $liste=GUICtrlCreateListView("Name|DKP", 15, 50, 270, 400,-1, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($liste,$LVM_SETCOLUMNWIDTH, 0, 160)
    GUICtrlSendMsg($liste,$LVM_SETCOLUMNWIDTH, 1, 110)

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

    $button_delete=GUICtrlCreateButton("Delete character", 15, 465, 270, 20)

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

    _LoadLV()
    GuiSetState()

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

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($liste)]

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

    While 1
    $msg=GuiGetMsg()
    If $msg=-3 Then
    _saveLV()
    Exit
    EndIf
    If $msg = $button_create then
    $check = 0
    For $i = 0 To _GUICtrlListView_GetItemCount($liste) - 1
    If _GUICtrlListView_GetItemText($liste, $i) = GUICtrlRead($input_name) Then
    _GUICtrlListView_SetItemText($liste, $i, GUICtrlRead($input_dkp), 1)
    $B_DESCENDING = True
    _GUICtrlListView_SimpleSort($liste, $B_DESCENDING, 1)
    GUICtrlSetData($input_name, "")
    GUICtrlSetData($input_dkp, "")
    $check = 1
    ExitLoop
    EndIf
    next
    If $check = 0 then
    GUICtrlCreateListViewItem(GUICtrlRead($input_name) & "|" & GUICtrlRead($input_dkp), $liste)
    $B_DESCENDING = True
    _GUICtrlListView_SimpleSort($liste, $B_DESCENDING, 1)
    GUICtrlSetData($input_name, "")
    GUICtrlSetData($input_dkp, "")
    EndIf
    endif
    If $msg = $button_delete Then
    If GUICtrlRead($liste) <> 0 Then
    _GUICtrlListView_DeleteItemsSelected($liste)
    endif
    endif
    Wend

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

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

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

    Func _LoadLV()
    Local $aItems
    If FileExists($sLVdat) Then
    $aItems = ""
    _FileReadToArray($sLVdat, $aItems)
    If IsArray($aItems) Then
    For $j = 1 To $aItems[0]
    GUICtrlCreateListViewItem($aItems[$j], $Liste)
    Next
    EndIf
    EndIf
    EndFunc ;==>_LoadLVs

    [/autoit]

    mfg (Auto)Bert

  • ah gut vielen dank.
    Nun noch eine frage^^

    Und zwar kann man es machen, das das inputfeld für den namen imma angewählt ist, d.h. man imma reinschreiben kann ohne erst mit der maus einmal ins feld klicken zu müssen?
    mfg

  • ja mit ControlFocus. hier das geänderte Skript (2 Zeilen weggekürzt, ControlFocus eingefügt)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>

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

    Global $sLVdat = @ScriptDir & "\LV_Daten.Dat"

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

    $hGui = GuiCreate("DKP Manager",300,500,100,100)
    $check = 0

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

    $input_name=GUICtrlCreateInput("", 15, 15, 110, 20)
    $input_dkp=GUICtrlCreateInput("", 140, 15, 60, 20)
    $button_create=GUICtrlCreateButton("Add char", 210, 15, 75, 20)

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

    $liste=GUICtrlCreateListView("Name|DKP", 15, 50, 270, 400,-1, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($liste,$LVM_SETCOLUMNWIDTH, 0, 160)
    GUICtrlSendMsg($liste,$LVM_SETCOLUMNWIDTH, 1, 110)

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

    $button_delete=GUICtrlCreateButton("Delete character", 15, 465, 270, 20)

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

    _LoadLV()
    GuiSetState()

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

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($liste)]

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

    While 1
    $msg=GuiGetMsg()
    If $msg=-3 Then
    _saveLV()
    Exit
    EndIf
    If $msg = $button_create then
    $check = 0
    For $i = 0 To _GUICtrlListView_GetItemCount($liste) - 1
    If _GUICtrlListView_GetItemText($liste, $i) = GUICtrlRead($input_name) Then
    _GUICtrlListView_SetItemText($liste, $i, GUICtrlRead($input_dkp), 1)
    $B_DESCENDING = True
    _GUICtrlListView_SimpleSort($liste, $B_DESCENDING, 1)
    $check = 1
    ExitLoop
    EndIf
    next
    If $check = 0 then
    GUICtrlCreateListViewItem(GUICtrlRead($input_name) & "|" & GUICtrlRead($input_dkp), $liste)
    $B_DESCENDING = True
    _GUICtrlListView_SimpleSort($liste, $B_DESCENDING, 1)
    EndIf
    GUICtrlSetData($input_name, "")
    GUICtrlSetData($input_dkp, "")
    ControlFocus($hGui,"",$input_name)
    endif
    If $msg = $button_delete Then
    If GUICtrlRead($liste) <> 0 Then
    _GUICtrlListView_DeleteItemsSelected($liste)
    endif
    endif
    Wend

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

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

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

    Func _LoadLV()
    Local $aItems
    If FileExists($sLVdat) Then
    $aItems = ""
    _FileReadToArray($sLVdat, $aItems)
    If IsArray($aItems) Then
    For $j = 1 To $aItems[0]
    GUICtrlCreateListViewItem($aItems[$j], $Liste)
    Next
    EndIf
    EndIf
    EndFunc ;==>_LoadLVs

    [/autoit]

    leider wieder keine Möglichkeit zum testen

    mfg (Auto)Bert

  • Ah super vielen Dank. Ist es bei Listview auch möglich, dass etwas passiert, wenn man doppel auf einen eintrag klickt?... kann man sowas einstellen?Mfg

  • Ja dazu musst du GuiRegisterMsg verwenden, hier das geänderte Skript:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>

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

    Global $sLVdat = @ScriptDir & "\LV_Daten.Dat"

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

    $hGui = GuiCreate("DKP Manager",300,500,100,100)
    $check = 0

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

    $input_name=GUICtrlCreateInput("", 15, 15, 110, 20)
    $input_dkp=GUICtrlCreateInput("", 140, 15, 60, 20)
    $button_create=GUICtrlCreateButton("Add char", 210, 15, 75, 20)

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

    $liste=GUICtrlCreateListView("Name|DKP", 15, 50, 270, 400,-1, $LVS_EX_FULLROWSELECT)
    GUICtrlSendMsg($liste,$LVM_SETCOLUMNWIDTH, 0, 160)
    GUICtrlSendMsg($liste,$LVM_SETCOLUMNWIDTH, 1, 110)

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

    $button_delete=GUICtrlCreateButton("Delete character", 15, 465, 270, 20)

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

    _LoadLV()
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick

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

    GuiSetState()

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

    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($liste)]

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

    While 1
    $msg=GuiGetMsg()
    If $msg=-3 Then
    _saveLV()
    Exit
    EndIf
    If $msg = $button_create then
    $check = 0
    For $i = 0 To _GUICtrlListView_GetItemCount($liste) - 1
    If _GUICtrlListView_GetItemText($liste, $i) = GUICtrlRead($input_name) Then
    _GUICtrlListView_SetItemText($liste, $i, GUICtrlRead($input_dkp), 1)
    $B_DESCENDING = True
    _GUICtrlListView_SimpleSort($liste, $B_DESCENDING, 1)
    $check = 1
    ExitLoop
    EndIf
    next
    If $check = 0 then
    GUICtrlCreateListViewItem(GUICtrlRead($input_name) & "|" & GUICtrlRead($input_dkp), $liste)
    $B_DESCENDING = True
    _GUICtrlListView_SimpleSort($liste, $B_DESCENDING, 1)
    EndIf
    GUICtrlSetData($input_name, "")
    GUICtrlSetData($input_dkp, "")
    ControlFocus($hGui,"",$input_name)
    endif
    If $msg = $button_delete Then
    If GUICtrlRead($liste) <> 0 Then
    _GUICtrlListView_DeleteItemsSelected($liste)
    endif
    endif
    Wend

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

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

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

    Func _LoadLV()
    Local $aItems
    If FileExists($sLVdat) Then
    $aItems = ""
    _FileReadToArray($sLVdat, $aItems)
    If IsArray($aItems) Then
    For $j = 1 To $aItems[0]
    GUICtrlCreateListViewItem($aItems[$j], $Liste)
    Next
    EndIf
    EndIf
    EndFunc ;==>_LoadLVs

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

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

    [/autoit]

    im Moment erscheint eine MsgBox und gibt dir die Name und DKP aus. Für was steht das Kürzel DKP

    mfg (Auto)Bert
    mfg (Auto)Bert

  • ok schön ung gut. ich habe mittlerweile die farbe meiner liste geändert und die schriftfarbe der einträge. Jedoch würde ich gerne die scharftefarbe eines einzelnen eintrages verändern. Wie könnte ich das am besten machen?
    mfg

  • Hallo dtex,

    schau dir dazu das Beispiel FormatSubItemLVex.au3 in ListView - SubItem einzeln färben/formatieren, Finale Version! an. Die Func WM_NOTIFY aus deinem musst du entsprechend anpassen, bzw. die von BugFix mit dem gewünschten Funktionen für Doppelklick ergänzen

    mfg (Auto)Bert