Hallo,
Wenn ich das Beispiel von der Function _GUICtrlListView_EditLabel aus der Hilfe ausführen, kann ich nur immer die erste Spalte editieren. Weiss jemand wie ich die zweite Spalte editieren kann?
Paule
Hallo,
Wenn ich das Beispiel von der Function _GUICtrlListView_EditLabel aus der Hilfe ausführen, kann ich nur immer die erste Spalte editieren. Weiss jemand wie ich die zweite Spalte editieren kann?
Paule
Damit kannst du nur die erste Spalte bearbeiten.
Aber hier eine Version von mir, da kannst du jede Spalte editieren in einem über die Spalte gelegten Bearbeitungsfenster (in der Größe des Eintrages).
- Zum Editieren Doppelklick auf Eintrag
- wenn editiert, mit ENTER Eintrag übernehmen und Edit-Fenster schließen
- wenn nichts geändert wurde, mit ESC schließen
#include<StaticConstants.au3>
#include<GUIConstantsEx.au3>
#include<ListViewConstants.au3>
#include<StructureConstants.au3>
#include<WindowsConstants.au3>
#include <GUIListView.au3>
Opt("GUIOnEventMode", 1)
Global $currentItem[2], $title
$gui = GUICreate('test')
GUISetOnEvent($GUI_EVENT_CLOSE, '_ende')
$hListView = GUICtrlCreateListView('Spalte1|Spalte2|Spalte3', 10, 10, 300, 200, $LVS_REPORT)
_GUICtrlListView_SetColumnWidth($hListView, 0, 70)
_GUICtrlListView_SetColumnWidth($hListView, 1, 60)
_GUICtrlListView_SetColumnWidth($hListView, 2, $LVSCW_AUTOSIZE_USEHEADER )
For $i = 1 To 9
GUICtrlCreateListViewItem('Z. ' & $i & ' - Sp. 1|Z. ' & $i & ' - Sp. 2|Z. ' & $i & ' - Sp. 3', $hListView)
Next
$EditBox = GUICreate('', 200, 30, -1, -1, BitOR($WS_POPUP,$WS_BORDER), $WS_EX_TOPMOST)
$edit = GUICtrlCreateInput('', 5, 5, 190, 20, $SS_CENTER)
GUICtrlSetOnEvent(-1, '_EditEnter')
HotKeySet('{ESC}', '_escEdit')
GUISetState(@SW_SHOW, $gui)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
While True
Sleep(100)
WEnd
Func _LeftDblClick($Info)
If $Info[3] = -1 Then Return
_GUICtrlListView_SetSelectedColumn($Info[1], $Info[4])
$title = WinGetTitle($gui)
Local $mouse = MouseGetPos(), $wndEdit = WinGetPos($EditBox)
Local $wndGUI = WinGetPos($gui), $wndLV = ControlGetPos($gui, '', $hListView)
Local $colInfo = _GUICtrlListView_GetColumn($Info[1], $Info[4]), $sumWidth = 0, $tmp
WinSetTitle($gui, '', 'Editiere: Zeile ' & $Info[3]+1 & ', ' & $colInfo[5])
For $i = 0 To $Info[4]
$tmp = _GUICtrlListView_GetColumn($Info[1], $i)
$sumWidth += $tmp[4]
Next
$sumWidth -= $colInfo[4]
Local $xPos = $wndGUI[0]+$wndLV[0]+$sumWidth
If $xPos+$colInfo[4]+10 > @DesktopWidth Then $xPos = @DesktopWidth - ($colInfo[4] + 10)
If $xPos < 0 Then $xPos = 0
WinMove($EditBox, '', $xPos, $mouse[1]-$wndEdit[3], $colInfo[4]+10)
GUICtrlSetData($edit, _GUICtrlListView_GetItemText($Info[1], $Info[3], $Info[4]))
$currentItem[0] = $Info[3]
$currentItem[1] = $Info[4]
GUISetState(@SW_SHOW, $EditBox)
EndFunc
Func _escEdit()
WinSetTitle($gui, '', $title)
GUISetState(@SW_HIDE, $EditBox)
EndFunc
Func _EditEnter()
WinSetTitle($gui, '', $title)
_GUICtrlListView_SetItemText($hListView, $currentItem[0], GUICtrlRead($edit), $currentItem[1])
GUISetState(@SW_HIDE, $EditBox)
EndFunc
Func _ende()
Exit
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$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 ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Local $aInfo[5] = [$hWndFrom, $iIDFrom, $iCode, DllStructGetData($tInfo, "Index"), _
DllStructGetData($tInfo, "SubItem")]
_LeftDblClick($aInfo)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Erster Klick --> Zeile markieren
Zweiter Klick auf die markierte Zeile --> editieren
EDIT: Hoppla, nicht Zeile, sondern Spalte! Sorry!
BugFix : Danke! Das ging aber schnell. Das ist genau das ich brauche.
Paule
BugFix : Gedacht ist das für die Tabellendarstellung mit sqLite. Ich habe gesehen, dass du angefangen hast mit einer GUI für die Administration von sqLite. Hast du das weiter entwickelt?
Paule
Ist schon ziemlich weit gediehen. Wenn du das bisherige Produkt mal sehen möchtest, melde dich per PN - publikationsreif ist es noch nicht