RichEdit Code PowerBASIC Peer Support Community (original) (raw)
No need to jump in, Jules has already answered. Also no need to create any fonts - just do what Jules shows. The flags can be %SCF_ALL, %SCF_SELECTION (most common) or combination %SCF_WORD OR %SCF_SELECTION (word at caret's place is changed). Here's an old "Tiny word" example that may be of help:
'
Code:
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' RichEdit demo - Public Domain by Borje Hagsten, October 2002 ' Shows how to change font settings in selection and update controls ' when caret moves around, etc. Even handles WingDings font properly. ' ' Basically the same as a sample I posted a year ago, but updated ' for PBWIN 7.0 (can now use plain CHARFORMAT structure), plus I ' added a working right-click popup edit menu. Also implemented ' %SCF_WORD to enable settings on non-selected word at caret's place. ' Note: no sub-classing needed or used for right-click popup menu. ' %EM_SETEVENTMASK enables us to get the notifications we need anyway. ' ' Tip: Can combine this sample with Don Dickinson's excellent RTF routines ' (see: http://dickinson.basicguru.com/code.htm), add ways to set bulleted ' paragraphs, etc. via EM_SETPARAFORMAT, mix it all up in NotePad sample ' and you have made yourself an almost complete Word Processor. Also, lots ' of other RichEdit samples here with code that can be fun to add.. :) '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ #COMPILE EXE #INCLUDE "WIN32API.INC" #INCLUDE "RICHEDIT.INC"
%IDBTN_BOLD = 110 %IDBTN_ITALIC = 111 %IDBTN_ULINE = 112 %IDBTN_STRIKE = 113 %IDCHK_COLOR = 120 %IDCB_FONTNAMES = 130 %IDCB_FONTSIZES = 131 %ID_RICHEDIT = 151 %IDM_UNDO = 220 %IDM_CUT = 222 %IDM_COPY = 223 %IDM_PASTE = 224 %IDM_DELETE = 225 %IDM_SELALL = 226
GLOBAL hDlg AS LONG, hEdit AS LONG, gLF AS LOGFONT
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Create dialog and controls, etc '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION PBMAIN () AS LONG LOCAL hLib AS DWORD
hLib = LoadLibrary("MSFTEDIT.DLL") IF hLib = 0 THEN EXIT FUNCTION '---------------------------------------------------------- DIALOG NEW 0, "TinyWord - RichEdit sample for PBWIN",,, 400, 242, _ %WS_BORDER OR %WS_SYSMENU, 0 TO hDlg '---------------------------------------------------------- CONTROL ADD "RICHEDIT50W", hDlg, %ID_RICHEDIT, "Here is some text to start with..", _ 1, 22, 395, 202, _ %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %WS_VSCROLL OR _ %ES_AUTOVSCROLL OR %ES_MULTILINE OR %ES_WANTRETURN OR _ %ES_NOHIDESEL OR %ES_SAVESEL, %WS_EX_CLIENTEDGE CONTROL HANDLE hDlg, %ID_RICHEDIT TO hEdit
CONTROL ADD COMBOBOX, hDlg, %IDCB_FONTNAMES, , 4, 4, 100, 120, _ %CBS_DROPDOWNLIST OR %CBS_SORT OR %WS_VSCROLL
'should enumerate, but lazy - with TrueType font one can simply list desired sizes.. REDIM fs(15) AS STRING fs(0) = "8" : fs(1) = "9" : fs(2) = "10" : fs(3) = "11" fs(4) = "12" : fs(5) = "14" : fs(6) = "16" : fs(7) = "18" fs(8) = "20" : fs(9) = "22" : fs(10) = "24" : fs(11) = "26" fs(12) = "28" : fs(13) = "36" : fs(14) = "48" : fs(15) = "72" CONTROL ADD COMBOBOX, hDlg, %IDCB_FONTSIZES, fs(), 110, 4, 30, 120, _ %CBS_DROPDOWNLIST OR %WS_VSCROLL
CONTROL ADD BUTTON, hDlg, %IDBTN_BOLD, "&B", 150, 4, 14, 14, %BS_AUTOCHECKBOX OR %BS_PUSHLIKE CONTROL ADD BUTTON, hDlg, %IDBTN_ITALIC, "&I", 164, 4, 14, 14, %BS_AUTOCHECKBOX OR %BS_PUSHLIKE CONTROL ADD BUTTON, hDlg, %IDBTN_ULINE , "&U", 178, 4, 14, 14, %BS_AUTOCHECKBOX OR %BS_PUSHLIKE CONTROL ADD BUTTON, hDlg, %IDBTN_STRIKE , "&S", 192, 4, 14, 14, %BS_AUTOCHECKBOX OR %BS_PUSHLIKE CONTROL ADD CHECKBOX, hDlg, %IDCHK_COLOR , "&Red ", 210, 4, 30, 14 CONTROL ADD BUTTON, hDlg, %IDOK, "&Open file", 242, 4, 50, 14
'---------------------------------------------------------- DIALOG SHOW MODELESS hDlg, CALL DlgProc DO DIALOG DOEVENTS LOOP WHILE ISWIN(hDlg)
IF hLib THEN FreeLibrary hLib 'unload RichEdit on exit.. END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Main callback '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ CALLBACK FUNCTION DlgProc() AS LONG
SELECT CASE CBMSG CASE %WM_INITDIALOG 'first message - initiate LOCAL hDC AS LONG, lRet AS LONG, txt AS STRING, cr AS CHARRANGE
lRet = 1 'enumerate all fonts and fill font name combobox
hDC = GetDC(%HWND_DESKTOP)
EnumFontFamilies hDC, BYVAL %NULL, CODEPTR(EnumFontFamProc), BYVAL VARPTR(lRet)
ReleaseDC %HWND_DESKTOP, hDC
'set event mask so we'll get EN_SELCHANGE and %ENM_MOUSEEVENTS notifications
SendMessage(hEdit, %EM_SETEVENTMASK, 0, %ENM_SELCHANGE OR %ENM_MOUSEEVENTS)
'start out with this font
SendMessage(hEdit, %EM_SETSEL, 0, -1)
SetRFname(hEdit, "Times New Roman")
SetRFsize(hEdit, 12)
SendMessage(hEdit, %EM_SETSEL, 0, 0)
SendMessage(hEdit, %EM_EMPTYUNDOBUFFER, 0, 0)
UpdateControls(CB.HNDL, hEdit)
'uncomment next line to test with another background color
'SendMessage hEdit, %EM_SETBKGNDCOLOR, 0, RGB(196,255,255)
CASE %WM_COMMAND
SELECT CASE CBCTL
CASE %IDCANCEL 'EXIT (also via Escape key)
IF CBCTLMSG = %BN_CLICKED THEN DIALOG END CBHNDL
CASE %IDOK
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
LOCAL dwStyle AS DWORD, sBuf, sFile AS STRING
dwStyle = %OFN_EXPLORER OR %OFN_FILEMUSTEXIST OR %OFN_HIDEREADONLY
DISPLAY OPENFILE CB.HNDL, , , "", CURDIR$, _
CHR$("RTF Files", 0, "*.rtf", 0, _
"Text Files", 0, "*.txt", 0, _
"All Files", 0, "*.*", 0), _
"", "rtf", dwStyle TO sFile
IF LEN(sFile) THEN
DIALOG SET TEXT CB.HNDL, PATHSCAN$(NAMEX, sFile)
OPEN sFile FOR BINARY AS #1
GET$ #1, LOF(1), sBuf
CLOSE #1
LOCAL stx AS SETTEXTEX
stx.flags = %ST_DEFAULT
stx.codepage = 1200
SendMessage hEdit, %EM_SETTEXTEX, VARPTR(stx), STRPTR(sBuf) ' works
END IF
END IF
'EDIT MENU COMMANDS
CASE %IDM_UNDO
IF CBCTLMSG = %BN_CLICKED THEN
SendMessage hEdit, %EM_UNDO, 0, 0
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDM_CUT
IF CBCTLMSG = %BN_CLICKED THEN
SendMessage hEdit, %WM_CUT, 0, 0
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDM_COPY
IF CBCTLMSG = %BN_CLICKED THEN
SendMessage hEdit, %WM_COPY, 0, 0
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDM_PASTE
IF CBCTLMSG = %BN_CLICKED THEN
SendMessage hEdit, %WM_PASTE, 0, 0
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDM_DELETE
IF CBCTLMSG = %BN_CLICKED THEN
SendMessage hEdit, %WM_CLEAR, 0, 0
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDM_SELALL
IF CBCTLMSG = %BN_CLICKED THEN
cr.cpMin = 0 : cr.cpMax = -1
SendMessage(hEdit, %EM_EXSETSEL, 0, VARPTR(cr)) 'Get selStart and selEnd
END IF
'FORMAT CONTROLS COMMANDS
CASE %IDCB_FONTNAMES
IF CBCTLMSG = %CBN_SELENDOK THEN
COMBOBOX GET TEXT CBHNDL, %IDCB_FONTNAMES TO txt
SetRFname(hEdit, txt)
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDCB_FONTSIZES
IF CBCTLMSG = %CBN_SELENDOK THEN
COMBOBOX GET TEXT CBHNDL, %IDCB_FONTSIZES TO txt
SetRFsize(hEdit, VAL(txt))
UpdateControls(CB.HNDL, hEdit)
END IF
CASE %IDBTN_BOLD
IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION
IF SendMessage(CBLPARAM, %BM_GETCHECK, 0, 0) THEN
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) OR %CFE_BOLD))
ELSE
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) AND NOT %CFE_BOLD))
END IF
UpdateControls(CB.HNDL, hEdit)
CASE %IDBTN_ITALIC
IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION
IF SendMessage(CBLPARAM, %BM_GETCHECK, 0, 0) THEN
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) OR %CFE_ITALIC))
ELSE
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) AND NOT %CFE_ITALIC))
END IF
UpdateControls(CB.HNDL, hEdit)
CASE %IDBTN_ULINE
IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION
IF SendMessage(CBLPARAM, %BM_GETCHECK, 0, 0) THEN
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) OR %CFE_UNDERLINE))
ELSE
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) AND NOT %CFE_UNDERLINE))
END IF
UpdateControls(CB.HNDL, hEdit)
CASE %IDBTN_STRIKE
IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION
IF SendMessage(CBLPARAM, %BM_GETCHECK, 0, 0) THEN
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) OR %CFE_STRIKEOUT))
ELSE
SetRFeffect(hEdit, BYVAL (GetRFEffect(hEdit) AND NOT %CFE_STRIKEOUT))
END IF
UpdateControls(CB.HNDL, hEdit)
CASE %IDCHK_COLOR
IF CBCTLMSG <> %BN_CLICKED THEN EXIT FUNCTION
IF SendMessage(CBLPARAM, %BM_GETCHECK, 0, 0) THEN
SetRFcolor(hEdit, %RED)
ELSE
SetRFcolor(hEdit, %BLACK)
END IF
UpdateControls(CB.HNDL, hEdit)
END SELECT
CASE %WM_NOTIFY
LOCAL hMenuEdit AS LONG, pNmh AS NMHDR PTR, mf AS MSGFILTER PTR, pt AS POINTAPI
pNmh = CBLPARAM
IF @pNmh.hWndFrom = hEdit THEN
IF @pNmh.code = %EN_SELCHANGE THEN 'update comboboxes and effect buttons..
UpdateControls(CB.HNDL, hEdit)
ELSEIF @pNmh.code = %EN_MSGFILTER THEN 'see if user right-clicked for popup menu
mf = CBLPARAM
IF @mf.msg = %WM_RBUTTONDOWN THEN 'ok, so build and show popup menu
SendMessage hEdit, %EM_EXGETSEL, 0, VARPTR(cr) 'Get selStart and selEnd
MENU NEW POPUP TO hMenuEdit
MENU ADD STRING, hMenuEdit, "&Undo" & $TAB & "Ctrl + Z", %IDM_UNDO, _
IIF&(SendMessage(hEdit, %EM_CANUNDO, 0, 0), %MF_ENABLED, %MF_GRAYED)
MENU ADD STRING, hMenuEdit, "-", 0, 0
MENU ADD STRING, hMenuEdit, "Cu&t" & $TAB & "Ctrl + X", %IDM_CUT, _
IIF&(cr.cpMin <> cr.cpMax, %MF_ENABLED, %MF_GRAYED)
MENU ADD STRING, hMenuEdit, "&Copy" & $TAB & "Ctrl + C", %IDM_COPY, _
IIF&(cr.cpMin <> cr.cpMax, %MF_ENABLED, %MF_GRAYED)
MENU ADD STRING, hMenuEdit, "&Paste" & $TAB & "Ctrl + V", %IDM_PASTE, _
IIF&(SendMessage(hEdit, %EM_CANPASTE, 0, 0), %MF_ENABLED, %MF_GRAYED)
MENU ADD STRING, hMenuEdit, "&Delete" & $TAB & "Del", %IDM_DELETE, _
IIF&(cr.cpMin <> cr.cpMax, %MF_ENABLED, %MF_GRAYED)
MENU ADD STRING, hMenuEdit, "-", 0, 0
MENU ADD STRING, hMenuEdit, "&Select all" & $TAB & "Ctrl + A", %IDM_SELALL, _
IIF&(SendMessage(hEdit, %WM_GETTEXTLENGTH, 0, 0), %MF_ENABLED, %MF_GRAYED)
pt.x = LOWRD(@mf.lParam)
pt.y = HIWRD(@mf.lParam)
ClientToScreen hEdit, pt 'convert mouse position
TrackPopupMenu hMenuEdit, 0, pt.x, pt.y, 0, CBHNDL, BYVAL %NULL
END IF
END IF
END IF
END SELECT END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Set font name at caret's place/selection '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ SUB SetRFname(BYVAL hEdit AS DWORD, BYVAL fontName AS STRING) LOCAL hDC AS LONG, lRet AS LONG, cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_FACE OR %CFM_CHARSET
hDC = GetDC(%HWND_DESKTOP) 'important: get proper bCharSet and bPitchAndFamily via enumeration EnumFontFamilies hDC, BYVAL STRPTR(fontName), CODEPTR(EnumFontFamProc), BYVAL VARPTR(lRet) ReleaseDC %HWND_DESKTOP, hDC
cf.szFaceName = gLF.lfFaceName cf.bCharSet = gLF.lfCharSet cf.bPitchAndFamily = gLF.lfPitchAndFamily
CALL SendMessage(hEdit, %EM_SETCHARFORMAT, %SCF_WORD OR %SCF_SELECTION, VARPTR(cf))
END SUB
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Set font size at caret's place/selection '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ SUB SetRFsize(BYVAL hEdit AS DWORD, BYVAL fontSize AS LONG) LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_SIZE cf.yHeight = fontSize * 20
CALL SendMessage(hEdit, %EM_SETCHARFORMAT, %SCF_WORD OR %SCF_SELECTION, VARPTR(cf)) END SUB
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Set font effect at caret's place/selection '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ SUB SetRFeffect(BYVAL hEdit AS DWORD, BYVAL fontEffect AS LONG) LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_BOLD OR %CFM_ITALIC OR %CFM_UNDERLINE OR %CFM_STRIKEOUT cf.dwEffects = fontEffect
CALL SendMessage(hEdit, %EM_SETCHARFORMAT, %SCF_WORD OR %SCF_SELECTION, VARPTR(cf)) END SUB
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Set text color at caret's place/selection '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ SUB SetRFcolor(BYVAL hEdit AS DWORD, BYVAL fontColor AS LONG) LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_COLOR cf.crTextColor = fontColor
CALL SendMessage(hEdit, %EM_SETCHARFORMAT, %SCF_WORD OR %SCF_SELECTION, VARPTR(cf)) END SUB
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Enumerate fonts '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION EnumFontFamProc(lf AS LOGFONT, tm AS TEXTMETRIC, _ BYVAL FontType AS LONG, lRet AS LONG) AS LONG IF lRet = 0 THEN gLF = lf ELSE IF (FontType AND %TRUETYPE_FONTTYPE) AND _ ASC(lf.lfFaceName) <> 64 THEN ' no leading @ COMBOBOX ADD hDlg, %IDCB_FONTNAMES, lf.lfFaceName END IF END IF FUNCTION = lRet 'lRet decides: 0 stops enumeration, <> 0 makes sure it continues END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Return font name at caret's place '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION GetRFname(BYVAL hEdit AS DWORD) AS STRING LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_FACE
CALL SendMessage(hEdit, %EM_GETCHARFORMAT, %SCF_SELECTION, VARPTR(cf))
FUNCTION = cf.szFaceName END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Return font size at caret's place '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION GetRFsize(BYVAL hEdit AS DWORD) AS LONG LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_SIZE
CALL SendMessage(hEdit, %EM_GETCHARFORMAT, %SCF_SELECTION, VARPTR(cf))
FUNCTION = cf.yHeight / 20 END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Return font effects at caret's place '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION GetRFeffect(BYVAL hEdit AS DWORD) AS LONG LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_BOLD OR %CFM_ITALIC OR %CFM_UNDERLINE OR %CFM_STRIKEOUT
CALL SendMessage(hEdit, %EM_GETCHARFORMAT, %SCF_SELECTION, VARPTR(cf))
FUNCTION = cf.dwEffects END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Return text color at caret's place '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ FUNCTION GetRFcolor(BYVAL hEdit AS DWORD) AS LONG LOCAL cf AS CHARFORMAT
cf.cbsize = LEN(cf) cf.dwMask = %CFM_COLOR
CALL SendMessage(hEdit, %EM_GETCHARFORMAT, %SCF_SELECTION, VARPTR(cf))
FUNCTION = cf.crTextColor END FUNCTION
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ ' Update comboboxes and font effect buttons '¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ SUB UpdateControls(BYVAL hDlg AS DWORD, BYVAL hEdit AS DWORD) LOCAL lRet AS LONG, txt AS STRING
txt = GetRFname(hEdit) SendMessage GetDlgItem(hDlg, %IDCB_FONTNAMES), %CB_SELECTSTRING, -1, BYVAL STRPTR(txt)
txt = FORMAT$(GetRFsize(hEdit)) SendMessage GetDlgItem(hDlg, %IDCB_FONTSIZES), %CB_SELECTSTRING, -1, BYVAL STRPTR(txt)
lRet = GetRFeffect(hEdit) CONTROL SEND hDlg, %IDBTN_BOLD, %BM_SETCHECK, _ IIF&((lRet AND %CFE_BOLD), %BST_CHECKED, %BST_UNCHECKED), 0
CONTROL SEND hDlg, %IDBTN_ITALIC, %BM_SETCHECK, _ IIF&((lRet AND %CFE_ITALIC), %BST_CHECKED, %BST_UNCHECKED), 0
CONTROL SEND hDlg, %IDBTN_ULINE, %BM_SETCHECK, _ IIF&((lRet AND %CFE_UNDERLINE), %BST_CHECKED, %BST_UNCHECKED), 0
CONTROL SEND hDlg, %IDBTN_STRIKE, %BM_SETCHECK, _ IIF&((lRet AND %CFE_STRIKEOUT), %BST_CHECKED, %BST_UNCHECKED), 0
lRet = GetRFcolor(hEdit) CONTROL SEND hDlg, %IDCHK_COLOR, %BM_SETCHECK, _ IIF&(lRet = %RED, %BST_CHECKED, %BST_UNCHECKED), 0
SetFocus hEdit
END SUB '