'Uploaded by : psyclops420 <psyclops420@yahoo.com>
'Description : New QEDIT component, two new events, OnGetFocus and OnLoseFocus, plus implemented WndProc
' v1.0:
' Fixed WndProc (actually, wrote it from scratch ·)
' Two new events, OnGetFocus and OnLoseFocus
' When using the new events, you MUST use the Sender parameter
' Custom events MUST have at least one paramater, haven't found
' a way aroud this yet
' v1.1:
' Fixed a little bug in WndProc(check for assignment)
' Added Property EnterKey
DECLARE FUNCTION CallWindowProc LIB "User32" ALIAS "CallWindowProcA"(lpPrevWndFunc AS LONG, hWnd AS LONG, uMsg AS LONG, wParam AS LONG, lParam AS LONG) AS LONG
DECLARE FUNCTION SetWindowLong LIB "User32" ALIAS "SetWindowLongA"(hWnd AS LONG, nIndex AS LONG, dwNewLong AS LONG) AS LONG
DECLARE FUNCTION GetParent LIB "User32" ALIAS "GetParent" (hWnd AS LONG) AS LONG
CONST ekNormal = 0
CONST ekTab = 1
DECLARE SUB OnGetFocus_EventTemplate(Sender AS QEDIT)
DECLARE SUB OnLoseFocus_EventTemplate(Sender AS QEDIT)
DECLARE SUB WndProc_EventTemplate(hWnd AS LONG, uMsg AS LONG, wParam AS LONG, lParam AS LONG)
TYPE QxEDIT EXTENDS QEDIT
Tmr AS QTIMER
OldWndProc AS LONG
EnterKey AS LONG PROPERTY SET Set_EnterKey
OnGetFocus AS EVENT(OnGetFocus_EventTemplate)
OnLoseFocus AS EVENT(OnLoseFocus_EventTemplate)
WndProc AS EVENT(WndProc_EventTemplate)
WITH This
PROPERTY SET Set_EnterKey(NewEnterKey AS LONG)
.EnterKey = NewEnterKey
END PROPERTY SET
FUNCTION Proc(hWnd AS LONG, uMsg AS LONG, wParam AS LONG, lParam AS LONG) AS LONG
IF hWnd = .Handle THEN
Result = CallWindowProc(.OldWndProc, hWnd, uMsg, wParam, lParam)
IF uMsg = &H7 THEN
CALLFUNC(.OnGetFocus, This)
ELSEIF uMsg = &H8 THEN
CALLFUNC(.OnLoseFocus, This)
ELSEIF uMsg = &H100 AND wParam = &HD AND .EnterKey THEN
KillMessage(GetParent(.Handle), &H102)
SendMessage(GetParent(.Handle), &H28, 0, 0)
END IF
IF .WndProc>0 THEN CALLFUNC(.WndProc, hWnd, uMsg, wParam, lParam)
END IF
END FUNCTION
EVENT Tmr.OnTimer
.OldWndProc = SetWindowLong(This.Handle, -4, CODEPTR(This.Proc))
.Tmr.Enabled = 0
END EVENT
CONSTRUCTOR
Tmr.Interval = 1
END CONSTRUCTOR
END WITH
END TYPE
$UNDEF QEDIT
$DEFINE QEDIT QxEDIT