CSV-Editor V0.8 (Stand 23.04.2010)

  • Hallo Freunde!

    Anbei mein neuestes kleines Projekt. Ich habe einen kleinen CSV-Editor erstellt. Es sollen zwar noch weitere Optionen hinzukommen, aber es funktioniert schon ganz gut!
    Einfach den Eintrag doppelklicken, um ihn zu editieren. Enter übernimmt die Änderung. Strg+{Enter} fügt einen Linefeed zum Itemtext hinzu, um praktisch mehrzeilige Einträge zu generieren.
    Nun können auch neue Dateien erstellt werden.

    Viel Spaß!

    Infos zu den Versionen

    Version 0.2
    --> Erste Reihe kann als Header verwendet werden.

    Version 0.3
    --> Header editieren
    --> Dateien direkt mit dem kombilierten Skript öffnen
    --> Dateiname im Fenstertitel anzeigen
    --> Inifile um Optionen zu speichern

    Version 0.4
    --> Farbe für das Listview (zum selber auswählen)
    --> Optionales OnTop-Fenster
    --> Drag and drop von Dateien in das Listview
    --> Resizing des Fensters
    --> HTML-Export :!:

    Version 0.5
    --> Optionales Index-Anzeige hinzugefügt
    --> Listview nun mit abwechselnden Farben

    Version 0.6
    ;Improved saving speed
    ;Added saving the window position and size
    ;Added progressbar during saving and opening
    ;Added 'Delete rows' for selected rows in context menu
    ;Added 'Delete column' for selected column in context menu
    ;Added inserting of new columns and rows
    ;Added making backup files when saving
    ;Added toolbar
    ;Fixed some bugs
    ;Changed index showing

    Version 0.7
    ;Fixed bugs
    ;Added: Icon
    ;Added: Save file when exiting
    ;Added asterisk (star) to see if file has changed
    ;Added in context menu: row to clip
    ;Added in context menu: column to clip
    ;Added: Support full CSV format <-- thanks a lot to progandy!!
    ;Added: Enter @LF to item with Ctrl+{Enter}

    Version 0.8
    ;Fixed bugs
    ;Added: Cut, copy and paste rows
    ;Added: Renew index after changing row(s)
    ;Added: Accelerators
    ;Added: Search and replace strings
    ;Added: Hide toolbar if you want
    ;Added: Buttons for row up / row down
    ;Added: Create new file

    Icon

  • Nette Idee, um mal schnell CSV Dateien angezeigt zu bekommen, ohne gleich mit der Excel Keule zuzuschlagen!


    Ideen:

    • ich habe CSVs mit Header, d.h. wäre schön, wenn diese Header auch angezeigt werden könnten, anstelle von Col1, Col2, usw.
    • Fenstergröße sollte änderbar sein
    • Sortierfunktion auf die einzelnen Spalten, z.B. wenn ich nach Spalte x sortieren will + Speicherfunktion der veränderten Tabelle
    • vielleicht Editierfunktionen für Zellen (hast ja CSV Editior benannt ;))


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Sieht schön aus, jedoch weiss ich nicht ganz, was CSV is ^^
    Aber ich entnehme aus dem Post von UEZ das es sich um Excel dateien handelt.
    Finds also dementsprechend recht gut gelungen, jedoch nicht wirklich
    geeignet für normale text dateien.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Sieht schön aus, jedoch weiss ich nicht ganz, was CSV is ^^
    Aber ich entnehme aus dem Post von UEZ das es sich um Excel dateien handelt.
    Finds also dementsprechend recht gut gelungen, jedoch nicht wirklich
    geeignet für normale text dateien.
    MfG. PrideRage

    CSV = Comma-separated values

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Schönes Skript.

    Es sollen zwar noch weitere Optionen hinzukommen, aber es funktioniert schon ganz gut!


    Wie wäre es denn mit einer vollständigen Umsetzung des CSV-Formats? Also innerhalb von Anführungszeichen Zeilenumbrüche und den Separator auch als Text erlauben?

  • Ein "Always on Top", Drag'n'Drop und farbige Zeilen wären außerdem noch nett!

    Ansonsten kann ich keine Fehler finden!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Vielen Dank für die Vorschläge. Habe weitere Verbesserungen eingebaut! Siehe Post#1

    Update auf Version 0.4
    --> Farbe für das Listview (zum selber auswählen)
    --> Optionales OnTop-Fenster
    --> Drag and drop von Dateien in das Listview
    --> Resizing des Fensters
    --> HTML-Export 8)

    Bei den Farben dachte ich eher daran, das z.B. ungerade Zeilen eine andere farben haben als gerade Zeilen (zur besseren Übersicht) wie in dem HTML Export!

    Nette Idee mit dem HTML Export!

    Ein fortlaufender Index ganz links wäre auch nicht schlecht!

    Darf ich dein Tool mit in SIC2 packen? Passt nämlich wunderbar!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Zitat von UEZ

    Bei den Farben dachte ich eher daran, das z.B. ungerade Zeilen eine andere farben haben als gerade Zeilen (zur besseren Übersicht) wie in dem HTML Export!


    Wollte ich eigentlich auch, habe ich aber auf die schnelle nicht hinbekommen. Werde ich bei nächster Gelegenheit umsetzen.

    Zitat von UEZ

    Ein fortlaufender Index ganz links wäre auch nicht schlecht!


    Jetzt muss ich mir nur noch überlegen, wie ich das umsetzen kann / soll!?

    Zitat von UEZ

    Darf ich dein Tool mit in SIC2 packen? Passt nämlich wunderbar!


    Natürlich. Nimm dir was du brauchen kannst. :)


  • Wollte ich eigentlich auch, habe ich aber auf die schnelle nicht hinbekommen. Werde ich bei nächster Gelegenheit umsetzen.


    Jetzt muss ich mir nur noch überlegen, wie ich das umsetzen kann / soll!?


    Natürlich. Nimm dir was du brauchen kannst. :)

    Hier mit dem Index:

    [autoit]


    Func _Array1DTo2D($a1D, $sDelim = ";", $iSeveral = 0)
    ;funkey 17.02.2010
    Local $iUbound = UBound($a1D) - 1
    Local $iTemp = 0, $iColumn = 0
    For $i = 0 To $iUbound
    If $iSeveral Then
    $iTemp = UBound(StringRegExp($a1D[$i], $sDelim & "+", 3))
    Else
    $iTemp = UBound(StringSplit($a1D[$i], $sDelim, 3))
    EndIf
    If $iTemp > $iColumn Then $iColumn = $iTemp
    Next
    Local $a2D[UBound($a1D)][$iColumn + 2]
    Local $aTemp
    For $i = 0 To $iUbound
    If $iSeveral Then
    $aTemp = StringSplit(StringRegExpReplace($a1D[$i], $sDelim & "+", $sDelim), $sDelim, 3)
    Else
    $aTemp = StringSplit($a1D[$i], $sDelim, 3)
    EndIf
    For $j = 0 To UBound($aTemp) - 1
    $a2D[$i][0] = $i
    $a2D[$i][$j + 1] = $aTemp[$j]
    Next
    $a2D[0][0] = "Index"
    Next
    Return SetExtended($iColumn, $a2D)
    EndFunc ;==>_Array1DTo2D

    [/autoit]

    Für SIC2 wollte ich dein Tools komplett dazu tun (nicht in SIC2 integrieren), damit man die CSV's sich anschauen kann!

    Mache mich gleich an die Farben...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯


  • Mache mich gleich an die Farben...


    Bugfix hat das fürs Listview schon umgesetzt:

    Spoiler anzeigen
    [autoit]


    #Include <Array.au3>
    #include <FontConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    #region - required declarations for coloring and font
    Global $hFont, $defColLV = 0x000000, $defBkColLV = 0xFFFFFF
    ; Font long = $nHeight, $nWidth[, $nEscape = 0[, $nOrientn = 0[, $fnWeight = $FW_NORMAL[,
    ; $bItalic = False[, $bUnderline = False[, $bStrikeout = False[, $nCharset = $DEFAULT_CHARSET[,
    ; $nOutputPrec = $OUT_DEFAULT_PRECIS[, $nClipPrec = $CLIP_DEFAULT_PRECIS[, $nQuality = $DEFAULT_QUALITY[,
    ; $nPitch = 0[, $szFace = 'Arial']]]]]]]]]]]])]
    ; zur Unterscheidung:
    ; $nHeight mit vorangestelltem '-' bei Font long !!
    ; Font short = $nHeight, $fnWeight, $szFace

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

    Global $aSubItemSet[1][5] = [[-1]] ; [$i][$iItem, $iSubItem, $iBkCol, $iCol, $sFont]
    ;~ wenn [0][0] = -1
    ;~ $aSubItemSet[0][1] = Zeilen abwechselnd, -2 Spalten abwechselnd, -3 Einzelzeile, -4 Einzelspalte
    ;~ $aSubItemSet[0][2] = ungerade Zeile/Spalte Bk-Color oder Bk-Color Einzelzeile/-spalte
    ;~ $aSubItemSet[0][3] = gerade Zeile/Spalte Bk-Color oder Text-Color Einzelzeile/-spalte
    ;~ $aSubItemSet[0][4] = Zeile od. Spalte (bei [0][1]= -3 / -4)
    #endregion

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

    Global $setIndex, $setSubIndex

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

    $GUI = GUICreate("Listview Custom Draw", 400, 440)
    $cListView = GUICtrlCreateListView("", 2, 2, 394, 268, -1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    $hListView = GUICtrlGetHandle($cListView)
    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)
    For $i = 1 To 30
    _GUICtrlListView_AddItem($hListView, "Row" & $i & ": Col 1", $i-1)
    For $j = 1 To 2
    _GUICtrlListView_AddSubItem ($hListView, $i-1, "Row" & $i & ": Col " & $j+1, $j)
    Next
    Next
    GUICtrlCreateLabel('Item', 2, 278, 50, 17)
    GUICtrlCreateLabel('or Row', 2, 290, 50, 17)
    $inItem = GUICtrlCreateInput('10', 50, 280, 25, 20)
    GUICtrlCreateLabel('SubItem', 86, 278, 45, 17)
    GUICtrlCreateLabel('or Column', 86, 290, 50, 17)
    $inSubItem = GUICtrlCreateInput('1', 145, 280, 25, 20)
    GUICtrlCreateLabel('( 0-Index )', 185, 283, 50, 17)
    $btSet = GUICtrlCreateButton('Set', 260, 280, 50, 20)
    $btOff = GUICtrlCreateButton('Off', 340, 280, 50, 20)
    GUICtrlCreateLabel('Bk-Color', 2, 308, 40, 17)
    GUICtrlCreateLabel('or odd', 2, 320, 40, 17)
    $inBkCol = GUICtrlCreateInput('0x3DF8FF', 50, 310, 60, 20)
    GUICtrlCreateLabel('Color', 130, 308, 40, 17)
    GUICtrlCreateLabel('or even', 130, 320, 40, 17)
    $inCol = GUICtrlCreateInput('0xFF0000', 170, 310, 60, 20)
    GUICtrlCreateLabel('Font', 2, 343, 40, 17)
    $inFont = GUICtrlCreateInput('14,700,Courier New', 50, 340, 180, 20)
    GUICtrlCreateGroup(' Spalten od. Zeilen', 240, 315, 150, 120)
    $rRows = GUICtrlCreateRadio('Zeilen wechselnd', 245, 330, 130)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $rCols = GUICtrlCreateRadio('Spalten wechselnd', 245, 350, 130)
    $rOneRow = GUICtrlCreateRadio('Einzelzeile', 245, 370, 130)
    $rOneCol = GUICtrlCreateRadio('Einzelspalte', 245, 390, 130)
    $btSet2 = GUICtrlCreateButton('Set', 250, 412, 50, 18)
    $btOff2 = GUICtrlCreateButton('Off', 330, 412, 50, 18)
    GUICtrlCreateGroup('', -99, -99, 1, 1)
    $lbActiv = GUICtrlCreateLabel('Zeilen-/ Spaltenmodus aktiv', 40, 415, 200)
    GUICtrlSetFont(-1, 10, 400, -1, 'Comic Sans MS')
    GUICtrlSetColor(-1, 0xFF0000)
    GUICtrlSetState(-1, $GUI_HIDE)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    ExitLoop
    Case $btSet
    $setIndex = GUICtrlRead($inItem)
    $setSubIndex = GUICtrlRead($inSubItem)
    If ($setIndex <> '' And $setSubIndex <> '') Then _
    _SubItemColSet($setIndex, $setSubIndex, GUICtrlRead($inBkCol), GUICtrlRead($inCol), GUICtrlRead($inFont))
    Case $btOff
    $setIndex = GUICtrlRead($inItem)
    $setSubIndex = GUICtrlRead($inSubItem)
    If ($setIndex <> '' And $setSubIndex <> '') Then _
    _SubItemColOff($setIndex, $setSubIndex)
    Case $btSet2
    If BitAND(GUICtrlRead($rRows), $GUI_CHECKED) Then
    _RowsSetCol(GUICtrlRead($inBkCol), GUICtrlRead($inCol))
    ElseIf BitAND(GUICtrlRead($rCols), $GUI_CHECKED) Then
    _ColumnsSetCol(GUICtrlRead($inBkCol), GUICtrlRead($inCol))
    ElseIf BitAND(GUICtrlRead($rOneRow), $GUI_CHECKED) Then
    _OneRowSetCol(GUICtrlRead($inItem), GUICtrlRead($inBkCol), GUICtrlRead($inCol)) ;die brauch ich
    Else
    _OneColumnSetCol(GUICtrlRead($inSubItem), GUICtrlRead($inBkCol), GUICtrlRead($inCol))
    EndIf
    Case $btOff2
    _ColRowOff()
    EndSwitch
    WEnd
    _WinAPI_DeleteObject($hFont)
    Exit

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

    #region - functions for setting color and font
    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView
    Switch $iCode
    Case $NM_CUSTOMDRAW
    If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRect
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    $iSubitem = DllStructGetData($tCustDraw, 'iSubItem')
    _SetItemCol($hDC, $tCustDraw, $iItem, $iSubitem)
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _SetItemCol(ByRef $hDC, ByRef $tCustDraw, $iItem, $iSubitem)
    If $aSubItemSet[0][0] = -1 Then
    If $aSubItemSet[0][1] < 0 Then
    Switch $aSubItemSet[0][1]
    Case -1 ; Zeilen abwechselnd färben
    If Mod($iItem, 2) Then ; ungerade
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][2]))
    Else
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][3]))
    EndIf
    Case -2 ; Spalten abwechselnd färben
    If Mod($iSubItem, 2) Then ; ungerade
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][2]))
    Else
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][3]))
    EndIf
    Case -3 ; einzelne Zeile färben
    If $iItem = $aSubItemSet[0][4] Then
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($aSubItemSet[0][3]))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][2]))
    Else
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($defBkColLV))
    EndIf
    Case -4 ; einzelne Spalte färben
    If $iSubItem = $aSubItemSet[0][4] Then
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($aSubItemSet[0][3]))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][2]))
    Else
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($defBkColLV))
    EndIf
    Case Else
    Return
    EndSwitch
    $hDC = DllStructGetData($tCustDraw, 'hdc')
    $hFont = _WinAPI_CreateFont(14,0,0,0,$FW_NORMAL,False,False,False,$DEFAULT_CHARSET,$OUT_DEFAULT_PRECIS, _
    $CLIP_DEFAULT_PRECIS,$DEFAULT_QUALITY,0,'Arial')
    _WinAPI_SelectObject($hDC, $hFont)
    EndIf
    Else
    Local $indx, $aIndex = _ArrayFindAll($aSubItemSet, $iItem)
    If @error Then Return
    For $i = 0 To UBound($aIndex) -1
    If $aSubItemSet[$aIndex[$i]][1] = $iSubitem Then
    $indx = $aIndex[$i]
    ExitLoop
    EndIf
    Next
    Local $aDefFont[14] = [14,0,0,0,$FW_NORMAL,False,False,False, _
    $DEFAULT_CHARSET,$OUT_DEFAULT_PRECIS,$CLIP_DEFAULT_PRECIS,$DEFAULT_QUALITY,0,'Arial']
    Local $splitFont = StringSplit($aSubItemSet[$indx][4], ',')
    If StringLeft($splitFont[1], 1) <> '-' Then ; alternativer FontString?
    $aDefFont[0] = $splitFont[1]
    $aDefFont[4] = $splitFont[2]
    $aDefFont[13] = $splitFont[3]
    Else
    For $i = 1 To UBound($splitFont) -1
    If $i = 1 Then
    $aDefFont[0] = StringTrimLeft($splitFont[1], 1)
    Else
    $aDefFont[$i-1] = $splitFont[$i]
    EndIf
    Next
    EndIf
    If ($aSubItemSet[$indx][0] = $iItem) And ($aSubItemSet[$indx][1] = $iSubitem) Then
    $hDC = DllStructGetData($tCustDraw, 'hdc')
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($aSubItemSet[$indx][3]))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[$indx][2]))
    $hFont = _WinAPI_CreateFont($aDefFont[0],$aDefFont[1],$aDefFont[2],$aDefFont[3],$aDefFont[4],$aDefFont[5],$aDefFont[6], _
    $aDefFont[7],$aDefFont[8],$aDefFont[9],$aDefFont[10],$aDefFont[11],$aDefFont[12],$aDefFont[13])
    _WinAPI_SelectObject($hDC, $hFont)
    Else
    $hDC = DllStructGetData($tCustDraw, 'hdc')
    DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV))
    DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($defBkColLV))
    $hFont = _WinAPI_CreateFont(14,0,0,0,$FW_NORMAL,False,False,False,$DEFAULT_CHARSET,$OUT_DEFAULT_PRECIS, _
    $CLIP_DEFAULT_PRECIS,$DEFAULT_QUALITY,0,'Arial')
    _WinAPI_SelectObject($hDC, $hFont)
    EndIf
    EndIf
    EndFunc ;==>_SetItemCol

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

    Func RGB2BGR($iColor)
    Local $sH = Hex($iColor,6)
    Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
    EndFunc

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

    Func _SubItemColSet($iItem, $iSubItem, $iBkCol=-1, $iCol=-1, $sFont='-14,0,0,0,400,False,False,False,1,0,0,0,0,Arial')
    Local $Bk, $Col
    If $iBkCol = -1 Then $iBkCol = $defBkColLV
    If $iCol = -1 Then $iCol = $defColLV
    If $aSubItemSet[0][0] <> -1 Then ReDim $aSubItemSet[UBound($aSubItemSet)+1][5]
    $aSubItemSet[UBound($aSubItemSet)-1][0] = $iItem
    $aSubItemSet[UBound($aSubItemSet)-1][1] = $iSubItem
    $aSubItemSet[UBound($aSubItemSet)-1][2] = $iBkCol
    $aSubItemSet[UBound($aSubItemSet)-1][3] = $iCol
    $aSubItemSet[UBound($aSubItemSet)-1][4] = $sFont
    _WinAPI_InvalidateRect($hListView)
    EndFunc ;==>_SubItemColSet

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

    Func _SubItemColOff($iItem, $iSubItem)
    Local $indx, $aIndex = _ArrayFindAll($aSubItemSet, $iItem)
    If @error Then Return
    For $i = 0 To UBound($aIndex) -1
    If $aSubItemSet[$aIndex[$i]][1] = $iSubitem Then
    $indx = $aIndex[$i]
    ExitLoop
    EndIf
    Next
    If UBound($aSubItemSet) > 1 Then
    _ArrayDelete($aSubItemSet, $indx)
    Else
    $aSubItemSet[0][0] = -1
    $aSubItemSet[0][1] = 0
    $aSubItemSet[0][2] = 0
    $aSubItemSet[0][3] = 0
    $aSubItemSet[0][4] = 0
    EndIf
    _WinAPI_InvalidateRect($hListView)
    EndFunc ;==>_SubItemColOff

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

    Func _OneColumnSetCol($iIndex, $iBkCol=-1, $iCol=-1)
    If $iBkCol = -1 Then $iBkCol = $defBkColLV
    If $iCol = -1 Then $iCol = $defColLV
    $aSubItemSet[0][0] = -1
    $aSubItemSet[0][1] = -4
    $aSubItemSet[0][2] = $iBkCol
    $aSubItemSet[0][3] = $iCol
    $aSubItemSet[0][4] = $iIndex
    _WinAPI_InvalidateRect($hListView)
    EndFunc

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

    Func _OneRowSetCol($iIndex, $iBkCol=-1, $iCol=-1) ;die brauch ich
    If $iBkCol = -1 Then $iBkCol = $defBkColLV
    If $iCol = -1 Then $iCol = $defColLV
    $aSubItemSet[0][0] = -1
    $aSubItemSet[0][1] = -3
    $aSubItemSet[0][2] = $iBkCol
    $aSubItemSet[0][3] = $iCol
    $aSubItemSet[0][4] = $iIndex
    _WinAPI_InvalidateRect($hListView)
    EndFunc

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

    Func _ColumnsSetCol($iOddCol=-1, $iEvenCol=-1)
    If $iOddCol = -1 Then $iOddCol = $defBkColLV
    If $iEvenCol = -1 Then $iEvenCol = $defColLV
    $aSubItemSet[0][0] = -1
    $aSubItemSet[0][1] = -2
    $aSubItemSet[0][2] = $iOddCol
    $aSubItemSet[0][3] = $iEvenCol
    _WinAPI_InvalidateRect($hListView)
    EndFunc

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

    Func _RowsSetCol($iOddCol=-1, $iEvenCol=-1)
    If $iOddCol = -1 Then $iOddCol = $defBkColLV
    If $iEvenCol = -1 Then $iEvenCol = $defColLV
    $aSubItemSet[0][0] = -1
    $aSubItemSet[0][1] = -1
    $aSubItemSet[0][2] = $iOddCol
    $aSubItemSet[0][3] = $iEvenCol
    _WinAPI_InvalidateRect($hListView)
    EndFunc

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

    Func _ColRowOff()
    $aSubItemSet[0][0] = -1
    $aSubItemSet[0][1] = 0
    $aSubItemSet[0][2] = 0
    $aSubItemSet[0][3] = 0
    $aSubItemSet[0][4] = 0
    _WinAPI_InvalidateRect($hListView)
    EndFunc
    #endregion

    [/autoit]

    Einmal editiert, zuletzt von nuts (25. Februar 2010 um 18:00)

  • Hab wieder ein paar Verbesserungen durchgeführt.
    Version 0.5 siehe Post#1.

    Danke nuts für deinen Vorschlag, aber das geht auch einfacher.
    Sithlord, freut mich, dass du Verwendung für meinen Editor hast!

    UEZ, könntest du bitte wieder testen, ob alles so funktioniert, wie es soll, danke.

  • Sieht gut aus!

    Ich habe mal das Sortieren hinzugefügt, wenn die Spaltenfelder gedrückt werden:

    [autoit]


    Func _WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $B_ASCENDING
    $hWndListView = $hLV ; ID des LV
    $hWndListView2 = $hLVEditHeader ; ID des LV
    If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($hWndListView)
    If Not IsHWnd($hWndListView2) Then $hWndListView2 = GUICtrlGetHandle($hWndListView2)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _GUICtrlListView_EditItem($hWndListView, DllStructGetData($tInfo, "Index"), DllStructGetData($tInfo, "SubItem"))
    $hActive = $hWndListView
    Case $NM_CLICK
    GUICtrlSetState($hInput, $GUI_HIDE)
    Case $LVN_COLUMNCLICK ; A column was clicked -> sort ascendend
    Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_ASCENDING, DllStructGetData($tInfo, "SubItem"))
    EndSwitch
    Case $hWndListView2
    Switch $iCode
    Case $NM_DBLCLK
    Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _GUICtrlListView_EditItem($hWndListView2, DllStructGetData($tInfo, "Index"), DllStructGetData($tInfo, "SubItem"))
    $hActive = $hWndListView2
    Case $NM_CLICK
    GUICtrlSetState($hInput, $GUI_HIDE)
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_NOTIFY

    [/autoit]

    Kannst ja noch verfeinern...

    Performance:
    für eine CSV mit 18663 Zeilen und 5 Spalten benötigt meine Kiste ca. 60 Sekunden, um die Datei anzuzeigen! Eine Progressbar wäre da nicht schlecht!
    Das Sortieren nach einer Spalte dauert 50% länger als das Laden!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hallo!
    Hab wieder einiges dazugebaut: Jetzt funktioniert der CSV-Editor noch besser! Feature-Wünsche und konstruktive Kritik sind immer willkommen! :D
    An dieser Stelle wiedermal ein großes Lob an UEZ fürs Testen und für seine Verbesserungsvorschläge!! :thumbup:
    Weitere Verbesserungen sind bereits vorgesehen.

    Neues in der Version 0.6: (Aus Zeitdrang in englisch, sorry)
    ;Improved saving speed
    ;Added saving the window position and size
    ;Added progressbar during saving and opening
    ;Added 'Delete rows' for selected rows in context menu
    ;Added 'Delete column' for selected column in context menu
    ;Added inserting of new columns and rows
    ;Added making backup files when saving
    ;Added toolbar
    ;Fixed some bugs
    ;Changed index showing

  • Bin mittlerweile schon bei Version 0.8!

    Neuerungen

    ;Version 0.7: April 08, 2010

    ;Added: Icon
    ;Added: Save file when exiting
    ;Added asterisk (star) to see if file has changed
    ;Added in context menu: row to clip
    ;Added in context menu: column to clip
    ;Added: Support full CSV format <-- thanks a lot to progandy!!
    ;Added: Enter @CRLF to item with Ctrl+{Enter}


    ;Version 0.8: April 23, 2010

    ;Added: Cut, copy and paste rows
    ;Added: Renew index after changing row(s)
    ;Added: Accelerators
    ;Added: Search and replace strings
    ;Added: Hide toolbar if you want
    ;Added: Buttons for row up / row down
    ;Added: Create new file