Page 1 of 1
Message when change text cursor position in editor gadget
Posted: Sat Feb 19, 2005 11:26 am
by Stefan Schnell
Hi community,
I am looking for a solution to get a message, for a callback routine, after change the text cursor position in an editor gadget with mouse or keyboard. I want to analyze the character format (e.g. font, color, style) of the actual text cursor position, but what is the right way to get the text cursor change event? Thanks for tips.
Stefan
Re: Message when change text cursor position in editor gadge
Posted: Sat Feb 19, 2005 11:35 am
by PB
[OT reply] Where have I seen your name before???
Posted: Sat Feb 19, 2005 12:46 pm
by Stefan Schnell
Hi PB,
>Where have I seen your name before???
I do not know, maybe here in forum with a question
A longer time ago I have a question about an error for a migration from PB 3.8 to 3.9, but I solve the problem, so that is the only thing. Hope it is a good souvenir on my name.
Stefan
P.S. The problem was the call of a callback routine, PB 3.8 allows to create callback without any window, PB 3.9 do not (and it is the better way).
Posted: Sat Feb 19, 2005 6:31 pm
by Sparkie
How about somethong like this:
Code: Select all
#SCF_ALL = $4
#CFM_BOLD = $1
#CFM_CHARSET = $8000000
#CFM_COLOR = $40000000
#CFM_DISABLED = $2000
#CFM_FACE = $20000000
#CFM_ITALIC = $2
#CFM_OFFSET = $10000000
#CFM_PROTECTED = $10
#CFM_SIZE = $80000000
#CFM_STRIKEOUT = $8
#CFM_UNDERLINE = $4
#CFE_AUTOCOLOR = $40000000
#CFE_BOLD = $1
#CFE_DISABLED = #CFM_DISABLED
#CFE_ITALIC = $2
#CFE_STRIKEOUT = $8
#CFE_UNDERLINE = $4
#CFE_PROTECTED = $10
; --> Structure for EditorGadget formatting info
ecf.CHARFORMAT
Global ecf
Procedure myWindowCallback(hWnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*pnmhdr.NMHDR = lParam
If *pnmhdr\hwndFrom = GadgetID(0) And *pnmhdr\code = #EN_SELCHANGE
ecf\cbSize = SizeOf(CHARFORMAT)
SendMessage_(*pnmhdr\hwndFrom, #EM_GETCHARFORMAT, #SCF_SELECTION, @ecf)
color$ = Str(ecf\crTextColor)
size$ = Str(ecf\yHeight/20)
effext$ = ""
If ecf\dwEffects & #CFE_AUTOCOLOR : effect$ + "Autocolor " : EndIf
If ecf\dwEffects & #CFE_BOLD : effect$ + "Bold " : EndIf
If ecf\dwEffects & #CFE_DISABLED : effect$ + "Disabled " : EndIf
If ecf\dwEffects & #CFE_ITALIC : effect$ + "Italic " : EndIf
If ecf\dwEffects & #CFE_STRIKEOUT : effect$ + "Strikeout " : EndIf
If ecf\dwEffects & #CFE_UNDERLINE : effect$ + "Underline " : EndIf
If ecf\dwEffects & #CFE_PROTECTED : effect$ + "Protected " : EndIf
StatusBarText(0, 0, "Color: " + color$)
StatusBarText(0, 1, "Effect: " + effect$)
StatusBarText(0, 2, "Size: " + size$)
EndIf
EndSelect
ProcedureReturn result
EndProcedure
ecf\cbSize = SizeOf(CHARFORMAT)
If OpenWindow(0, 0, 0, 500, 150, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "EditorGadget Info") And CreateGadgetList(WindowID(0))
CreateStatusBar(0, WindowID())
AddStatusBarField(100)
AddStatusBarField(300)
AddStatusBarField(100)
StatusBarText(0, 0, "Color: ")
StatusBarText(0, 1, "Effects: ")
StatusBarText(0, 2, "Size: ")
EditorGadget (0, 0, 0, 500, 125)
; --> Set event mask for EditorGadget so we can catch selection changes
SendMessage_(GadgetID(0), #EM_SETEVENTMASK, 0, #ENM_SELCHANGE)
; --> Set our formatting mask
ecf\dwMask = #CFM_SIZE | #CFM_ITALIC | #CFM_COLOR | #CFM_BOLD | #CFM_STRIKEOUT
; --> Format line 0
ecf\crTextColor = RGB(255, 0, 0)
ecf\dwEffects = #CFE_ITALIC
ecf\yHeight = 10*20 ; twips
SendMessage_(GadgetID(0), #EM_SETCHARFORMAT, #SCF_SELECTION, ecf)
AddGadgetItem(0, 0, "Line 0")
; --> Format line 1
ecf\crTextColor = RGB(0, 255, 0)
ecf\dwEffects = #CFE_BOLD | #CFE_ITALIC
ecf\yHeight = 14*20 ; twips
SendMessage_(GadgetID(0), #EM_SETCHARFORMAT, #SCF_SELECTION, ecf)
AddGadgetItem(0, 1, "Line 1")
; --> Format line 2
ecf\crTextColor = RGB(0, 0, 255)
ecf\dwEffects = #CFE_BOLD | #CFE_ITALIC | #CFE_STRIKEOUT
ecf\yHeight = 18*20 ; twips
SendMessage_(GadgetID(0), #EM_SETCHARFORMAT, #SCF_SELECTION, ecf)
AddGadgetItem(0, 2, "Line 2")
; --> Set window callback to catch #EN_SELCHANGE
SetWindowCallback(@myWindowCallback())
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
End
Posted: Mon Feb 21, 2005 1:13 pm
by Stefan Schnell
Hello Sparkie,
thanks for your source, it is a good help for me.
Bye
Stefan