$INCLUDE "Rapidq.inc"
$TYPECHECK ON
CONST WM_COMMAND = &H111
CONST WM_SYSCOMMAND = &H112
CONST WM_SETFONT = &H30
CONST WM_GETFONT = &H31
CONST WM_KILLFOCUS=(&H8)
CONST WM_SETFOCUS=(&H7)
CONST WM_CTLCOLOREDIT = &H133
CONST WM_MOUSEFIRST = &H200
CONST WM_MOUSEMOVE = &H200
CONST WM_LBUTTONDOWN = &H201
CONST WM_LBUTTONUP = &H202
CONST WM_LBUTTONDBLCLK = &H203
CONST WM_RBUTTONDOWN = &H204
CONST WM_RBUTTONUP = &H205
CONST WM_RBUTTONDBLCLK = &H206
CONST WM_MBUTTONDOWN = &H207
CONST WM_MBUTTONUP = &H208
CONST WM_MBUTTONDBLCLK = &H209
CONST WM_MOUSELAST = &H209
CONST WM_KEYFIRST = &H100
CONST WM_KEYDOWN = &H100
CONST WM_KEYUP = &H101
CONST WM_CHAR = &H102
CONST WM_DEADCHAR = &H103
CONST WM_SYSKEYDOWN = &H104
CONST WM_SYSKEYUP = &H105
CONST WM_SYSCHAR = &H106
CONST WM_SYSDEADCHAR = &H107
CONST WM_KEYLAST = &H108
CONST WS_EX_CLIENTEDGE = &H200
CONST WS_CHILD = &H40000000
CONST WS_VISIBLE = &H10000000
CONST WS_BORDER = &H800000
CONST ES_LEFT = &H0
CONST ES_CENTER = &H1
CONST ES_RIGHT = &H2
CONST ES_MULTILINE = &H4
CONST ES_UPPERCASE = &H8
CONST ES_LOWERCASE = &H10
CONST ES_PASSWORD = &H20
CONST ES_AUTOVSCROLL = &H40
CONST ES_AUTOHSCROLL = &H80
CONST ES_NOHIDESEL = &H100
CONST ES_OEMCONVERT = &H400
CONST EM_GETSEL = &HB0
CONST EM_SETSEL = &HB1
CONST EM_GETRECT = &HB2
CONST EM_SETRECT = &HB3
CONST EM_SETRECTNP = &HB4
CONST EM_SCROLL = &HB5
CONST EM_LINESCROLL = &HB6
CONST EM_SCROLLCARET = &HB7
CONST EM_GETMODIFY = &HB8
CONST EM_SETMODIFY = &HB9
CONST EM_GETLINECOUNT = &HBA
CONST EM_LINEINDEX = &HBB
CONST EM_SETHANDLE = &HBC
CONST EM_GETHANDLE = &HBD
CONST EM_GETTHUMB = &HBE
CONST EM_LINELENGTH = &HC1
CONST EM_REPLACESEL = &HC2
CONST EM_GETLINE = &HC4
CONST EM_LIMITTEXT = &HC5
CONST EM_CANUNDO = &HC6
CONST EM_UNDO = &HC7
CONST EM_FMTLINES = &HC8
CONST EM_LINEFROMCHAR = &HC9
CONST EM_SETTABSTOPS = &HCB
CONST EM_SETPASSWORDCHAR = &HCC
CONST EM_EMPTYUNDOBUFFER = &HCD
CONST EM_GETFIRSTVISIBLELINE = &HCE
CONST EM_SETREADONLY = &HCF
CONST EM_SETWORDBREAKPROC = &HD0
CONST EM_GETWORDBREAKPROC = &HD1
CONST EM_GETPASSWORDCHAR = &HD2
CONST EN_SETFOCUS = &H100
CONST EN_KILLFOCUS = &H200
CONST EN_CHANGE = &H300
CONST EN_UPDATE = &H400
CONST EN_ERRSPACE = &H500
CONST EN_MAXTEXT = &H501
CONST EN_HSCROLL = &H601
CONST EN_VSCROLL = &H602
CONST GWL_WNDPROC = (-4)
CONST GWL_HINSTANCE = (-6)
CONST GWL_HWNDPARENT = (-8)
CONST GWL_STYLE = (-16)
CONST GWL_EXSTYLE = (-20)
CONST GWL_USERDATA = (-21)
CONST GWL_ID = (-12)
DECLARE FUNCTION CreateEdit LIB "USER32" ALIAS "CreateWindowExA" _
(ExStyle&,ClassName$,WindowName$,Style&,X&,Y&,W&,H&,WndParent&,hMenu&,hInstance&,Param&) AS LONG
DECLARE FUNCTION SetWindowLong LIB "user32" ALIAS "SetWindowLongA"_
(BYVAL hwnd AS LONG, BYVAL nIndex AS LONG, BYVAL dwNewLong AS LONG) AS LONG
DECLARE FUNCTION GetWindowLong LIB "user32" ALIAS "GetWindowLongA" _
(BYVAL hwnd AS LONG, BYVAL nIndex AS LONG) AS LONG
DECLARE FUNCTION SetWindowText LIB "user32" ALIAS "SetWindowTextA" _
(BYVAL hwnd AS LONG, BYVAL lpString AS STRING) AS LONG
DECLARE FUNCTION GetWindowText LIB "user32" ALIAS "GetWindowTextA" _
(BYVAL hwnd AS LONG, ByRef lpString AS STRING, BYVAL cch AS LONG) AS LONG
DECLARE FUNCTION GetWindowTextLength LIB "user32" ALIAS "GetWindowTextLengthA" _
(BYVAL hwnd AS LONG) AS LONG
DECLARE FUNCTION CallWindowProc LIB "user32" ALIAS "CallWindowProcA" _
(BYVAL lpPrevWndFunc AS LONG, BYVAL hWnd AS LONG, BYVAL Msg AS LONG, BYVAL wParam AS LONG, _
BYVAL lParam AS LONG) AS LONG
DECLARE FUNCTION SM LIB "user32" ALIAS "SendMessageA" _
(BYVAL hwnd AS LONG, _
BYVAL wMsg AS LONG, _
BYVAL wParam AS INTEGER, _
BYVAL lParam AS LONG _
) AS LONG
DECLARE FUNCTION GetParent LIB "User32" ALIAS "GetParent" (hWnd AS LONG) AS LONG
DECLARE SUB OnChange_EventTemplate(Sender AS QPANEL )
DECLARE SUB OnGetFocus_EventTemplate(Sender AS QPANEL )
DECLARE SUB OnLoseFocus_EventTemplate(Sender AS QPANEL )
DECLARE SUB OnKeyDown_EventTemplate(Sender AS QPANEL )
DECLARE SUB OnKeyPress_EventTemplate(Sender AS QPANEL )
DECLARE SUB OnKeyUp_EventTemplate (Sender AS QPANEL )
DECLARE SUB WndProc_EventTemplate(hWnd AS LONG, uMsg AS LONG, wParam AS LONG, lParam AS LONG)
DECLARE SUB OnSelChange_EventTemplate (Sender AS QPANEL )
DECLARE SUB OnMouseMove_EventTemplate(Sender AS QPANEL )
TYPE RQEdit EXTENDS QPANEL
WITH RQEdit
PRIVATE:
EditStyle AS INTEGER
eAlignment AS INTEGER
eCharCase AS INTEGER
OldPanelWndProc AS LONG
SelLengthCr AS LONG
SelStartCr AS LONG
SelMaxCr AS LONG
PUBLIC:
EditHandle AS LONG PROPERTY SET SetHandle
SelMax AS LONG
Font AS QFONT PROPERTY SET SetFont
Text AS STRING PROPERTY SET SetText
Alignment AS LONG PROPERTY SET SetAlignment
CharCase AS LONG PROPERTY SET SetCharCase
EnterKey AS LONG PROPERTY SET Set_EnterKey
SelLength AS LONG PROPERTY SET SetSelLength
SelStart AS LONG PROPERTY SET SetSelStart
SelText AS STRING PROPERTY SET SetSelText
LineCount AS LONG
Line (.LineCount) AS STRING
WhereX AS LONG
WhereY AS LONG
Wordwrap AS LONG
OnGetFocus AS EVENT(OnGetFocus_EventTemplate)
OnLoseFocus AS EVENT(OnLoseFocus_EventTemplate)
OnChange AS EVENT(OnChange_EventTemplate)
OnKeyDown AS EVENT(OnKeyDown_EventTemplate)
OnKeyPress AS EVENT(OnKeyPress_EventTemplate)
OnKeyUp AS EVENT(OnKeyUp_EventTemplate)
OnSelChange AS EVENT(OnSelChange_EventTemplate)
OnMouseMove AS EVENT(OnMouseMove_EventTemplate)
WndProc AS EVENT(WndProc_EventTemplate)
PROPERTY SET Set_EnterKey(NewEnterKey AS LONG)
.EnterKey = NewEnterKey
END PROPERTY SET
FUNCTION PanelProc(hWnd AS LONG, uMsg AS LONG, wParam AS LONG, lParam AS LONG) AS LONG
Result = CallWindowProc(.OldPanelWndProc, hWnd, uMsg, wParam, lParam)
IF uMsg = WM_CTLCOLOREDIT AND lParam = .Edithandle THEN
DIM ret AS LONG
ret =(SM (this.Edithandle, EM_GETSEL, .SelStart, .SelMax))
.SelStart=ret AND &HFFFF
.SelMax=(ret AND &HFFFF0000) SHR 16
.SelLength=.SelMax-.SelStart
DIM wParam1 AS LONG
wParam1=EN_UPDATE
wParam1=wParam1 SHL 16
SENDMESSAGE .handle, WM_COMMAND,wParam1,.Edithandle
END IF
IF uMsg = WM_COMMAND THEN
IF lParam = .Edithandle THEN
SELECT CASE (wParam SHR 16)
CASE IS = EN_SETFOCUS
CALLFUNC(.OnGetFocus, This)
CASE IS = EN_KILLFOCUS
CALLFUNC(.OnLoseFocus, This)
CASE IS = EN_CHANGE
CASE IS = EN_UPDATE
DIM MyStr1 AS STRING
MyStr1 =SPACE$(GetWindowTextLength (.EDIThandle)+1)
DEFSTR ST
DEFLNG LH
LH = GETWINDOWTEXT(.EDIThandle,MyStr1, LEN(MyStr1))
ST = LEFT$(MyStr1, LH)
.Text=ST
.CAPTION=.Text
CALLFUNC(.OnChange, This)
CASE IS = EN_ERRSPACE
CASE IS = EN_MAXTEXT
CASE IS = EN_HSCROLL
CASE IS = EN_VSCROLL
CASE ELSE
END SELECT
END IF
END IF
END FUNCTION
PROPERTY SET SetHandle(EditHandle AS INTEGER)
.OldPanelWndProc = SetWindowLong(this.Handle, GWL_WNDPROC, CODEPTR(this.PanelProc))
this.EditHandle = CreateEdit(WS_EX_CLIENTEDGE,"edit", this.Text, this.EditStyle, _
5, 5, .width-10, .height-120, _
this.handle, 0, 0 ,0)
.CAPTION=this.Text
END PROPERTY
PROPERTY SET SetSelText ( SelText AS STRING)
END PROPERTY
PROPERTY SET SetSelLength (SelLength AS LONG )
.SelStart=.SelStartCr
.SelLengthCr=SelLength
.SelMax=.SelStart+.SelLength
SendMessage this.Edithandle,EM_SETSEL, .SelStart, .SelMax
SelLength=.SelLengthCr
.SelStart=.SelStartCr
.SelText=MID$(.Text,.SelStartCr,.SelLengthCr )
END PROPERTY
PROPERTY SET SetSelStart (SelStart AS LONG )
.SelStartCr=SelStart
.SelLength=.SelLengthCr
.SelStartCr=.SelStart
SendMessage this.Edithandle,EM_SETSEL, .SelStart, .SelMax
SelStart=.SelStartCr
.SelLength=.SelLengthCr
.SelText=MID$(.Text,.SelStartCr,.SelLengthCr )
END PROPERTY
PROPERTY SET SetCharCase (CharCase AS INTEGER )
SELECT CASE CharCase
CASE ecNormal
SetWindowLong this.Edithandle, GWL_STYLE , .EditStyle
.CharCase=CharCase
CASE ecUpperCase
.eCharCase = ES_UPPERCASE
SetWindowLong this.Edithandle, GWL_STYLE , .EditStyle OR ES_UPPERCASE
.CharCase=CharCase
CASE ecLowerCase
.eCharCase = ES_LOWERCASE
SetWindowLong this.Edithandle, GWL_STYLE , .EditStyle OR ES_LOWERCASE
.CharCase=CharCase
CASE ELSE
END SELECT
.repaint
END PROPERTY
PROPERTY SET SetText(Text AS STRING)
.Text=Text
SetWindowText this.Edithandle, Text
END PROPERTY
PROPERTY SET SetFont(Font AS QFONT )
SendMessage this.EditHandle, WM_SETFONT, Font.handle, 1
END PROPERTY
PROPERTY SET SetAlignment (Alignment AS INTEGER)
SELECT CASE Alignment
CASE taLeftJustify
.eAlignment =ES_LEFT
CASE taRightJustify
.eAlignment =ES_RIGHT
CASE taCenter
.eAlignment =ES_CENTER
CASE ELSE
END SELECT
SetWindowLong .Edithandle, GWL_STYLE , .EditStyle OR .eAlignment
END PROPERTY
SUB Clear
SetWindowText .EDIThandle,""
DIM wParam1 AS LONG
wParam1=EN_UPDATE
wParam1=wParam1 SHL 16
SENDMESSAGE .handle, WM_COMMAND,wParam1,.Edithandle
END SUB
CONSTRUCTOR
CharCase=ecNormal
CAPTION="case"
Text="DefaultText"
Left=5
Top=5
Width=250
Height=200
COLOR=clYellow
Font.COLOR=clRed
EditStyle=WS_CHILD OR WS_VISIBLE OR WS_BORDER OR ES_MULTILINE OR _
ES_AUTOVSCROLL OR ES_AUTOhSCROLL OR ES_NOHIDESEL
END CONSTRUCTOR
END WITH
END TYPE
DECLARE SUB FormWndProc (Handle AS INTEGER, Msg AS DWORD, wParam AS LONG, lParam AS LONG)
DECLARE SUB FormOnShow
DECLARE SUB Button1Click
DECLARE SUB Button2Click
DECLARE SUB GET(Sender AS RQEdit)
DECLARE SUB Lose(Sender AS RQEdit)
DECLARE SUB EditChange (Sender AS RQEdit)
DECLARE SUB WndProc(hWnd AS LONG, uMsg AS LONG, wParam AS LONG, lParam AS LONG)
DIM xFont AS QFONT
xFont.Name ="Arial"
xFont.Size =14
xFont.COLOR=ClYellow
DIM LastFocused AS INTEGER
CREATE Form AS QFORM
CAPTION = "Form"
top=50 :left=250
Width = 500 : Height = 450
OnShow=FormOnShow
WndProc=FormWndProc
CREATE PEdit AS RQEdit
SetHandle=1
Text="Edit0--"
Height = 200
Font =xFont
Alignment=taRightJustify
COLOR=clGreen
OnGetFocus = GET
OnLoseFocus = Lose
OnChange=EditChange
Tag=0
CREATE Button1 AS QBUTTON
CAPTION = "Clear"
Left = 20
Top = 147
OnClick = Button1Click
END CREATE
END CREATE
CREATE PEdit1 AS RQEdit
SetHandle=1
Text="Edit1----"
Top=210
Height = 200
Font =xFont
Alignment=taRightJustify
COLOR=clRed
OnGetFocus = GET
OnLoseFocus = Lose
OnChange=EditChange
SelStart=2
SelLength=3
Tag=1
CREATE Button2 AS QBUTTON
CAPTION = "CharCase"
Left = 20
Top = 147
Width = 120
OnClick = Button2Click
END CREATE
END CREATE
CREATE RichEdit AS QRICHEDIT
Left = 260
Top = 5
Height = 99
TabOrder = 1
Font.COLOR =clRed
Text=PEdit.Text
END CREATE
CREATE RichEdit1 AS QRICHEDIT
Left = 260
Top = 210
Height = 99
TabOrder = 1
Font.COLOR =clBlue
Text=PEdit1.Text
END CREATE
END CREATE
Form.SHOWMODAL
SUB FormOnShow
END SUB
SUB Button1Click (Sender.Tag)
SELECT CASE LastFocused
CASE PEdit.Tag
PEdit.Clear
CASE PEdit1.Tag
PEdit1.Clear
CASE ELSE
END SELECT
END SUB
SUB Button2Click (Sender.Tag)
SELECT CASE LastFocused
CASE PEdit.Tag
Button2.CAPTION = "CharCase Edit0"
IF PEdit.CharCase=ecUpperCase THEN
PEdit.CharCase=ecLowerCase
PEdit.CAPTION="LowerCase"
ELSEIF PEdit.CharCase=ecLowerCase THEN
PEdit.CharCase=ecNormal
PEdit.CAPTION="Normal"
ELSE
PEdit.CharCase=ecUpperCase
PEdit.CAPTION="UpperCase"
END IF
CASE PEdit1.Tag
Button2.CAPTION = "CharCase Edit1"
IF PEdit1.CharCase=ecUpperCase THEN
PEdit1.CharCase=ecLowerCase
PEdit1.CAPTION="LowerCase"
ELSEIF PEdit1.CharCase=ecLowerCase THEN
PEdit1.CharCase=ecNormal
PEdit1.CAPTION="Normal"
ELSE
PEdit1.CharCase=ecUpperCase
PEdit1.CAPTION="UpperCase"
END IF
CASE ELSE
END SELECT
END SUB
SUB GET (sender)
Form.CAPTION = "Focused: " + sender.CAPTION
Sender.COLOR = &H00FFFF
SELECT CASE sender.tag
CASE PEdit.Tag
Button1.CAPTION = "Clear Edit0"
Button2.CAPTION = "CharCase Edit0"
CASE PEdit1.Tag
Button1.CAPTION = "Clear Edit1"
Button2.CAPTION = "CharCase Edit1"
CASE ELSE
END SELECT
END SUB
SUB Lose (sender)
Form.CAPTION = "Not Focused"
Sender.COLOR = &HFFFFFF
LastFocused=Sender.Tag
END SUB
SUB WndProc
IF uMsg = &H100 THEN
Form.CAPTION = "Key"
END IF
END SUB
SUB EditChange (sender)
SELECT CASE sender.tag
CASE PEdit.Tag
RichEdit.Text=PEdit.Text
RichEdit.SelStart=PEdit.SelStart
RichEdit.SelLength=PEdit.SelLength
CASE PEdit1.Tag
RichEdit1.Text=PEdit1.Text
RichEdit1.SelStart=PEdit1.SelStart
RichEdit1.SelLength=PEdit1.SelLength
CASE ELSE
END SELECT
END SUB
|
|