Hey,
folgendes Problem: Ich habe eine Eingabemaske, bestehend aus mehreren Inputfeldern.
Sobald man mit Enter die Eingabe bestättigt sollen verschiedene Funktionen aufgerufen werden (Inhalt prüfen, zum nächsten springen usw.)
Leider bereiten mir die Methoden zum Abfangen der Messagecodes in Verbindung mit der Enter-Taste Probleme
Hier mal ein Skript:
Spoiler anzeigen
#include <GuiImageList.au3>
#include <GUIListView.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <ComboConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 633, 447, 193, 125)
$Input1 = GUICtrlCreateInput("Input1", 144, 48, 177, 21)
$hWndi1 = GUICtrlGetHandle($Input1)
$Input2 = GUICtrlCreateInput("Input2", 144, 96, 177, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg, $iwParam
ConsoleWrite("message=" & $hWnd & @CRLF & $iMsg & @CRLF & $iwParam & @CRLF & $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
ConsoleWrite("icode=" & $iCode & @CRLF)
ConsoleWrite("iIDForm=" & $iIDFrom & @CRLF)
ConsoleWrite("hwnd=" & $hWndFrom & @CRLF)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $hWndEdit
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16)
ConsoleWrite("iIParam=" & $hWndFrom & @CRLF)
ConsoleWrite("iIDForm=" & $iIDFrom & @CRLF)
ConsoleWrite("icode=" & $iCode & @CRLF)
Switch $iIDFrom
Case $Input1
Switch $iCode
Case 0 ; $icode für Enter?
MsgBox(1, "Input1", "WM_Command")
EndSwitch
case $Input2
Switch $iCode
Case 0 ; $icode für Enter?
MsgBox(1, "Input2", "WM_Command")
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Nach langem Suchen in den includes meine ich das richtige gefunden zu haben (aus der Structureconstants.au3):
[autoit]
; #STRUCTURE# ===================================================================================================================
; Name...........: $tagNMCBEENDEDIT
; Description ...: Contains information about the conclusion of an edit operation within a ComboBoxEx control
; Fields ........: $tagNMHDR - Contains information about a notification message
; fChanged - Indicating whether the contents of the control's edit box have changed
; NewSelection - The zero-based index of the item that will be selected after completing the edit operation
; +This value can be $CB_ERR if no item will be selected
; Text - A zero-terminated string that contains the text from within the control's edit box
; Why - The action that generated the $CBEN_ENDEDIT notification message
; +This value can be one of the following:
; |$CBENF_DROPDOWN - The user activated the drop-down list
; |$CBENF_ESCAPE - The user pressed ESC
; |$CBENF_KILLFOCUS - The edit box lost the keyboard focus
; |$CBENF_RETURN - The user completed the edit operation by pressing ENTER
; Author ........: Gary Frost (gafrost)
; Remarks .......:
; ===============================================================================================================================
Global Const $tagNMCBEENDEDIT = $tagNMHDR & ";int fChanged;int NewSelection;char Text[1024];int Why"
Nur leider klappt die Umsetzung nicht, $WM_Notify liefert gar nichts und $WM_Command liefert (s. Skript)
iIParam=0x00000000
iIDForm=1
icode=0
Vielleicht hat ja jemand einen Tipp für mich?
Gruß nuts
edit \ Hab oben ein $WM_Command Lösung editiert.
Mit der Struktur kämpfe ich noch :wacko: