Code: Select all
#CFM_BACKCOLOR = $4000000
Global lpPrevFunc
Global hwndRichEdit
OpenWindow(0,0,0,500,400,"Owner-Draw Text Selection")
hwndRichEdit = EditorGadget(0,0,0,WindowWidth(0),WindowHeight(0))
For i=1 To 30
AddGadgetItem(0,-1,"Lorem ipsum dolor sit ipsum dolor sit am vinci clares itams semper cals petre" )
Next
Procedure WindowProc(hwnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_LBUTTONDOWN
cf.CHARFORMAT2
cf\cbSize = SizeOf(CHARFORMAT2)
cf\dwMask = #CFM_COLOR | #CFM_BACKCOLOR
cf\crTextColor = #Black
cf\crBackColor = #White
SendMessage_(hwndRichEdit,#EM_SETCHARFORMAT,#SCF_ALL,cf)
Case #WM_MOUSEMOVE
If wParam = #MK_LBUTTON
SendMessage_(hwndRichEdit,#EM_HIDESELECTION,1,0)
cf.CHARFORMAT2
cf\cbSize = SizeOf(CHARFORMAT2)
cf\dwMask = #CFM_COLOR | #CFM_BACKCOLOR
cf\crTextColor = #Black
cf\crBackColor = #White
SendMessage_(hwndRichEdit,#EM_SETCHARFORMAT,#SCF_ALL,cf)
cf\crTextColor = #Black
cf\crBackColor = #Yellow
SendMessage_(hwndRichEdit,#EM_SETCHARFORMAT,#SCF_SELECTION,cf)
; SendMessage_(GadgetID(0), #WM_SETREDRAW, 1,0)
; InvalidateRect_(GadgetID(0),0,0)
EndIf
EndSelect
ProcedureReturn CallWindowProc_(lpPrevFunc,hwnd,uMsg,wParam,lParam)
EndProcedure
lpPrevFunc = SetWindowLong_(hwndRichEdit,#GWL_WNDPROC,@WindowProc())
Repeat : Until WaitWindowEvent() = 13116