Ermittelt das Handle zu dem Änderungscontrol, welches für das Ändern eines Itemtextes verwendet wird
#include <GuiListView.au3>
_GUICtrlListView_GetEditControl ( $hWnd )
$hWnd | Control-ID / Handle des Controls |
Erfolg: | Das Handle des Änderungscontrols |
Fehler: | 0 |
Wenn das Ändern eines Labels beginnt, wird ein Änderungscontrol erstellt, positioniert und initialisiert. Vor dem Darstellen sendet das Control an das Elternfenster eine $LVN_BEGINLABELEDIT Nachricht.
Falls das Label angepasst werden soll, wird ein Handle für $LVN_BEGINLABELEDITA, $LVN_BEGINLABELEDITAW erstellt und es wird eine $LVM_GETEDITCONTROL Nachricht an das Control gesendet. Wenn das Label geändert wird, wird der Rückgabewert ein Handle zu dem Änderungscontrol sein. Dieses Handle ist durch Senden einer EM_XXX Nachricht zu benutzen, um das Änderungscontrol anzupassen.
Wenn der Benutzer das Ändern abschließt oder abbricht, wird das Änderungscontrol zerstört und das Handle ist nicht mehr länger gültig.
Das Änderungscontrol kann unterteilt werden, aber es sollte nicht zerstört werden. Um das Ändern abzubrechen ist eine $WM_CANCELMODE Nachricht zu senden.
Das zu ändernde Item entspricht dem gegenwärtig fokusiertem Item. Um ein Item abhängig von seinem Status zu finden, ist eine $LVM_GETNEXTITEM Nachricht zu senden.
- - - - - - - - Erklärung der Controls - - - - - - - -
_GUICtrlListView_CancelEditLabel
#include <Extras\WM_NOTIFY.au3>
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
Global $g_hListView, $g_idMemo
Example()
Func Example()
Local $hGui = GUICreate("ListView: Ermittelt das Handle zu dem Änderungscontrol (v" & @AutoItVersion & ")", 500, 300, Default, Default, Default, $WS_EX_CLIENTEDGE)
$g_hListView = _GUICtrlListView_Create($hGui, "", 2, 2, 394, 118, BitOR($LVS_EDITLABELS, $LVS_REPORT))
$g_idMemo = GUICtrlCreateEdit("", 2, 124, 396, 174, 0)
_GUICtrlListView_SetExtendedListViewStyle($g_hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
GUISetState(@SW_SHOW)
; Lädt die Bilder
Local $hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap(GUICtrlGetHandle($g_hListView), 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap(GUICtrlGetHandle($g_hListView), 0x00FF00, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap(GUICtrlGetHandle($g_hListView), 0x0000FF, 16, 16))
_GUICtrlListView_SetImageList($g_hListView, $hImage, 1)
; Fügt die Spalten hinzu
_GUICtrlListView_AddColumn($g_hListView, "Spalte 1", 100)
_GUICtrlListView_AddColumn($g_hListView, "Spalte 2", 100)
_GUICtrlListView_AddColumn($g_hListView, "Spalte 3", 100)
; Fügt die Items hinzu
_GUICtrlListView_AddItem($g_hListView, "Zeile 1: Spalte 1", 0)
_GUICtrlListView_AddSubItem($g_hListView, 0, "Zeile 1: Spalte 2", 1)
_GUICtrlListView_AddSubItem($g_hListView, 0, "Zeile 1: Spalte 3", 2)
_GUICtrlListView_AddItem($g_hListView, "Zeile 2: Spalte 1", 1)
_GUICtrlListView_AddSubItem($g_hListView, 1, "Zeile 2: Spalte 2", 1)
_GUICtrlListView_AddItem($g_hListView, "Zeile 3: Spalte 1", 2)
; Ändert das Label von Item 0 mit einem Timeout
_WM_NOTIFY_Register($g_idMemo)
_GUICtrlListView_EditLabel($g_hListView, 0)
MemoWrite("Edit Handle: 0x" & Hex(_GUICtrlListView_GetEditControl($g_hListView)) & _
" IsPtr = " & IsPtr(_GUICtrlListView_GetEditControl($g_hListView)) & " IsHWnd = " & IsHWnd(_GUICtrlListView_GetEditControl($g_hListView)))
; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndListView = $g_hListView
If Not IsHWnd($g_hListView) Then $hWndListView = GUICtrlGetHandle($g_hListView)
Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
Local $iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_BEGINLABELEDITA, $LVN_BEGINLABELEDITW ; Beginn der Änderung der Bezeichnung eines Items
_WM_NOTIFY_DebugEvent("$LVN_BEGINLABELEDIT", $tagNMLVDISPINFO, $lParam, "IDFrom,,Mask,Item,SubItem,State,StateMask,Image,Param,Indent,,GroupID,Columns,pColumns")
Return False ; Erlaubt dem Benutzer, die Bezeichnung zu ändern
;Return True ; Verbietet dem Benutzer, die Bezeichnung zu ändern
Case $LVN_COLUMNCLICK ; Es wurde auf eine Spalte geklickt
_WM_NOTIFY_DebugEvent("$LVN_COLUMNCLICK", $tagNMLISTVIEW, $lParam, "IDFrom,,Item,SubItem,NewState,OldState,Changed,ActionX,ActionY,Param")
; Kein Rückgabewert
Case $LVN_ENDLABELEDITA, $LVN_ENDLABELEDITW ; Ende der Änderung der Bezeichnung eines Items
Local $tInfo = DllStructCreate($tagNMLVDISPINFO, $lParam)
Local $pText = DllStructGetData($tInfo, "Text")
If $pText <> 0 Then
_WM_NOTIFY_DebugEvent("$LVN_ENDLABELEDIT", $tagNMLVDISPINFO, $lParam, "IDFrom,,Mask,Item,SubItem,State,StateMask,Image,Param,Indent,,GroupID,Columns,pColumns,,TextMax,*Text")
Return True ; Wenn das Input-Control nicht leer ist, führt der Rückgabewert True zum Übernehmen des Textes als Itembezeichnung, False verwirft den eingegebenen Text.
EndIf
; Wenn das Input-Control leer ist, wird der Rückgabewert ignoriert
Case $NM_CLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste anklickt
_WM_NOTIFY_DebugEvent("$NM_CLICK", $tagNMITEMACTIVATE, $lParam, "IDFrom,,Index,SubItem,NewState,OldState,Changed,ActionX,ActionY,,lParam,KeyFlags")
; Kein Rückgabewert
Case $NM_DBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste doppelklickt
_WM_NOTIFY_DebugEvent("$NM_DBLCLK", $tagNMITEMACTIVATE, $lParam, "IDFrom,,Index,SubItem,NewState,OldState,Changed,ActionX,ActionY,,lParam,KeyFlags")
; Kein Rückgabewert
Case $NM_KILLFOCUS ; Das Control hat den Eingabefokus verloren
_WM_NOTIFY_DebugEvent("$NM_KILLFOCUS", $tagNMHDR, $lParam, "hWndFrom,IDFrom")
; Kein Rückgabewert
Case $NM_RCLICK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste anklickt
_WM_NOTIFY_DebugEvent("$NM_RCLICK", $tagNMITEMACTIVATE, $lParam, "IDFrom,,Index,SubItem,NewState,OldState,Changed,ActionX,ActionY,,lParam,KeyFlags")
;Return 1 ; Verhindert die weitere Standard-Nachrichtenbehandlung
Return 0 ; Erlaubt die weitere Standard-Nachrichtenbehandlung
Case $NM_RDBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der rechten Maustaste doppelklickt
_WM_NOTIFY_DebugEvent("$NM_RDBLCLK", $tagNMITEMACTIVATE, $lParam, "IDFrom,,Index,SubItem,NewState,OldState,Changed,ActionX,ActionY,,lParam,KeyFlags")
; Kein Rückgabewert
Case $NM_RETURN ; Das Control hat den Eingabefokus und der Benutzer hat die ENTER-Taste gedrückt
_WM_NOTIFY_DebugEvent("$NM_RETURN", $tagNMHDR, $lParam, "hWndFrom,IDFrom")
; Kein Rückgabewert
Case $NM_SETFOCUS ; Das Control erhält den Eingabefokus
_WM_NOTIFY_DebugEvent("$NM_SETFOCUS", $tagNMHDR, $lParam, "hWndFrom,IDFrom")
; Kein Rückgabewert
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
; Schreibt eine Zeile in das Memo Control
Func MemoWrite($sMessage)
GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite