Hallo zusammen,
ich bin dabei eine GUI zu programmieren und dabei ist mir aufgefallen die UDF _GUICtrlEdit_GetSel sich unterschiedlich verhält abhängig davon ob diese über einen Button oder ein Icon aufgerufen wird. In dem Beispiel-Code habe ich beide Varianten abgebildet.
Wenn ich im Edit-Fenster ein Stück Text markieren und auf das Icon klicke wird zuerst alles markiert und danach die Funktion _GUICtrlEdit_GetSel ausgeführt.
Wenn das gleiche mach und anstatt auf das Icon auf den Button klicke wird die Funktion direkt ausgeführt.
Kann mir jemand erklären was da schiff läuft
Was mich verwundert ist die Tatsache, dass es mit der Version 3.2.8.1 und der UDF _GUICtrlEditGetSel funktioniert hat und mit den Version 3.2.10.0 nicht mehr geht.
Spoiler anzeigen
C
#include GUIConstants.au3
#include Array.au3
#include GuiEdit.au3
#include String.au3
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 515, 220, -1, -1)
$Edit1 = GUICtrlCreateEdit("", 5, 5, 200, 200, BitOR($ES_NOHIDESEL,$WS_BORDER, $ES_READONLY))
GUICtrlSetData($Edit1, "Das ist mein Mustertext.")
Global $logdateien = GUICtrlCreateListView("LOG", 210, 50, 300, 155, BitOR($LVS_REPORT, $LVS_NOCOLUMNHEADER, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS, $WS_GROUP, $WS_VSCROLL), $WS_EX_CLIENTEDGE)
$hlogdateien = GUICtrlGetHandle($logdateien)
GUICtrlCreateListViewItem('Test', $logdateien)
$bgoto = GUICtrlCreateButton("Get Selected", 250, 10, 130, 25, 0)
Global $iconlib = 'shell32.dll'
Global $goto = GUICtrlCreateIcon('', 0, 220, 10, 24, 24)
GUICtrlSetImage($goto, $iconlib, 23)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY_Events")
#EndRegion ### END Koda GUI section ###
While 1
Local $msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then
Exit
ElseIf $msg = $bgoto Then
$aSel = _GUICtrlEdit_GetSel ($Edit1)
_ArrayDisplay ($aSel)
ElseIf $msg = $goto Then
$aSel = _GUICtrlEdit_GetSel ($Edit1)
_ArrayDisplay ($aSel)
EndIf
WEnd
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
#forceref $hWndGUI, $MsgID, $wParam
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3)
Select
Case $wParam = $logdateien
Select
Case $event = $NM_CLICK
GUICtrlSetData($Edit1, "Das ist mein Mustertext.")
Case $event = $NM_DBLCLK
Case $event = $NM_RCLICK
EndSelect
EndSelect
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc ;==>WM_Notify_Events
Alles anzeigen