Hallo zusammen,
auf AutoItScript.com habe ich eine recht gelungeUDF für Listview gefunden. Mit ihr kann man u.a. Combo-Boxen und auch Datumsauswahl direkt in der Listview editieren. Leider gibt es das Datum immer im Langen Format zurück und ich kann den Fehler nicht finden, anbei UDF und Demo. Wäre nett wenn jemand bei Gelegenheit nachschauen könnte,
Edit1: vorerst betrachte ich es als gelöst, bis sich das Problem stellt in einer Listview kurzes und langes Datumsformat anzuzeigen,
Edit2: einige consts verursachen Fehler da bereits in Includes deklariert, daher auskommentiert und beides als ZIP eingestellt, die Orihinaldateien im Anhang habe ich aber nicht verändert,
Edit3: weiterer Bug bei der Positionierung behoben
UDF korrigierte Version
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
#forceref $hWndGUI, $MsgID, $wParam
Local $tagNMHDR, $pressed,$event, $retval = $GUI_RUNDEFMSG ;, $idFrom
$tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
If @error Then
$tagNMHDR =0
Return
EndIf
;~ $from = DllStructGetData($tagNMHDR, 1)
;~ $idFrom = DllStructGetData($tagNMHDR,2)
;ConsoleWrite("idFrom="&$idFrom&@LF)
$event = DllStructGetData($tagNMHDR, 3)
Select
case
Case ($event = $HDN_TRACK or $event = $HDN_TRACKW)
;column dragging
_CancelEdit()
Case $MsgID = $WM_MOVING
_MoveControl()
Case $wParam = $__LISTVIEWCTRL
Select
Case $event = $LVN_ITEMCHANGED
Local $ckcount = _LvGetCheckedCount($__LISTVIEWCTRL)
If $LVCHECKEDCNT <> $ckcount Then
$LVCHECKEDCNT = $ckcount
$bLVITEMCHECKED = True
_CancelEdit()
EndIf
Case $event = $NM_CLICK
If $bLVEDITONDBLCLICK = False Then
_LVGetInfo($lParam)
;scroll column into view.
Switch $LVINFO[1]
Case 0
_GUICtrlListView_Scroll ( $__LISTVIEWCTRL, -$LVINFO[4], 0 )
_FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO,0)
;_LVGetInfo($lParam)
Case Else
Local $ctrlSize = ControlGetPos("","",$__LISTVIEWCTRL)
If $LVINFO[2]+$LVINFO[4] > $ctrlSize[2] Then
_GUICtrlListView_Scroll ( $__LISTVIEWCTRL, $LVINFO[4], 0 )
_FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO,0)
EndIf
EndSwitch
if Not $bLVITEMCHECKED Then
_ListView_Click()
EndIf
Else
if $editFlag = 1 Then _CancelEdit()
EndIf
$bLVITEMCHECKED = False;
Case $event = $NM_DBLCLK
ConsoleWrite("$NM_DBLCLK"&@LF)
_LVGetInfo($lParam)
_ListView_DoubleClick()
Case $event = $NM_RCLICK
_LVGetInfo($lParam)
_ListView_RClick()
Case $event = -180
If $DebugIt Then ConsoleWrite("LVEVENT=-180"&@LF)
If $editFlag = 1 Then
Send("{Esc}")
_CancelEdit()
$retval = 0
EndIf
Case $event = -181
If $DebugIt Then ConsoleWrite("LVEVENT=-181"&@LF)
_FillLV_Info($__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1], $LVINFO,0)
Case $event= -121
If $DebugIt Then ConsoleWrite("LVEVENT=-121"&@LF)
_LVGetInfo($lParam,1)
Case Else
If $DebugIt Then ConsoleWrite("LV_EVENT>>"&$event&@LF)
EndSelect
Case $lvDate
Select
Case $event = $DTN_DROPDOWN
$bCanceled = False
$bDATECHANGED = False
Case $event = $DTN_WMKEYDOWNA
$pressed = _vKeyCheck()
If $pressed = 27 Then _CancelEdit()
Case $event = $DTN_DATETIMECHANGE
If $DebugIt Then ConsoleWrite("DTN_DATETIMECHANGE"&@LF)
If $bDATECHANGED = False Then $bDATECHANGED = True
$pressed = _vKeyCheck()
if $pressed = 27 Then
_CancelEdit()
$bDATECHANGED = False
EndIf
Case $event = $DTN_CLOSEUP
If $DebugIt Then ConsoleWrite("DTN_CLOSEUP"&@LF)
if $bCanceled or ($bDATECHANGED = False) Then
Send("{Esc}")
$bDATECHANGED = False
Else
; If $bLVUPDATEONFOCUSCHANGE = True Then
Send("{Enter}")
$bDATECHANGED = True
; Else
; Send("{Esc}")
; EndIf
EndIf
case $event = -7
If $DebugIt Then ConsoleWrite("dtn $event="&$event&@LF)
$bCanceled = False
$bDATECHANGED = False
Case $event = -8
If $DebugIt Then ConsoleWrite("dtn $event="&$event&" , ")
If $DebugIt Then ConsoleWrite("$bCanceled="&$bCanceled&@LF)
If $DebugIt Then ConsoleWrite("$bDATECHANGED="&$bDATECHANGED&@LF)
if $bCanceled = True Then
;or ($bDATECHANGED = False) Then
Send("{Esc}")
$bDATECHANGED = False
$bCanceled = False
Else
$bDATECHANGED = True
EndIf
EndSelect
Case $event = -326
ConsoleWrite("HDN Notification: "&$event&@LF)
if $editFlag Then _CancelEdit()
Case $MsgID = $WM_KEYDOWN
;----------------------------------------------------------------------------------------------
If $DebugIt Then ConsoleWrite(_DebugHeader("Keydown"))
;----------------------------------------------------------------------------------------------
Case Else
If $DebugIt Then ConsoleWrite("WPARAM = "&$wParam&@LF)
;;uncomment the following line to have the edit _LVUpdate if the mouse moves
;;off of the listview.
If $editFlag And Not(_HasFocus($editCtrl)) Then _LVUpdate($editCtrl, $__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1])
EndSelect
If $DebugIt Then
If $wParam <> $__LISTVIEWCTRL Then
ConsoleWrite($hWndGUI &" "& $event&@LF)
EndIf
EndIf
$tagNMHDR = 0
$event = 0
$lParam = 0
Return $retval
mfg (Auto)Bert