diff --git a/components/richmemo/win32/win32richmemo.pas b/components/richmemo/win32/win32richmemo.pas index 4b7ca658b..3f146b67b 100644 --- a/components/richmemo/win32/win32richmemo.pas +++ b/components/richmemo/win32/win32richmemo.pas @@ -59,6 +59,7 @@ type class function GetStrings(const ACustomMemo: TCustomMemo): TStrings; override; class procedure SetColor(const AWinControl: TWinControl); override; + class procedure SetFont(const AWinControl: TWinControl; const AFont: TFont); override; class procedure SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); override; class procedure SetSelLength(const ACustomEdit: TCustomEdit; NewLength: integer); override; @@ -378,6 +379,14 @@ begin SendMessage(AWinControl.Handle, EM_SETBKGNDCOLOR, 0, ColorToRGB(AWinControl.Color)); end; +class procedure TWin32WSCustomRichMemo.SetFont(const AWinControl: TWinControl; + const AFont: TFont); +begin + if not Assigned(AWinControl) then Exit; + Windows.SendMessage(AWinControl.Handle, WM_SETFONT, Windows.WParam(AFont.Reference.Handle), 1); + RichEditManager.SetDefaultTextStyle(AWinControl.Handle, GetFontParams(AFont)); +end; + class procedure TWin32WSCustomRichMemo.SetSelStart(const ACustomEdit: TCustomEdit; NewStart: integer); var range : Tcharrange; diff --git a/components/richmemo/win32/win32richmemoproc.pas b/components/richmemo/win32/win32richmemoproc.pas index 2bf2456fb..b3847a8f9 100644 --- a/components/richmemo/win32/win32richmemoproc.pas +++ b/components/richmemo/win32/win32richmemoproc.pas @@ -163,6 +163,7 @@ type class function SetEventMask(RichEditWnd: Handle; eventmask: integer): Integer; class function GetTextLength(RichEditWnd: Handle): Integer; + class function SetDefaultTextStyle(RichEditWnd: Handle; Params: TIntFontParams): Boolean; virtual; class function SetSelectedTextStyle(RichEditWnd: Handle; Params: TIntFontParams): Boolean; virtual; class function GetSelectedTextStyle(RichEditWnd: Handle; var Params: TIntFontParams): Boolean; virtual; class procedure SetTextUIStyle(RichEditWnd: Handle; const ui: TTextUIParam); virtual; @@ -333,6 +334,38 @@ begin Result := SendMessage(RichEditWnd, EM_GETTEXTLENGTHEX, WPARAM(@textlen), 0); end; +class function TRichEditManager.SetDefaultTextStyle(RichEditWnd: Handle; + Params: TIntFontParams): Boolean; +var + w : WPARAM; + fmt : TCHARFORMAT2; +begin + if RichEditWnd = 0 then begin + Result := false; + Exit; + end; + + w := SCF_DEFAULT; + + FillChar(fmt, sizeof(fmt), 0); + fmt.cbSize := sizeof(fmt); + + fmt.dwMask := fmt.dwMask or CFM_COLOR; + fmt.crTextColor := Params.Color; + + fmt.dwMask := fmt.dwMask or CFM_FACE; + // keep last char for Null-termination? + CopyStringToCharArray(Params.Name, fmt.szFaceName, LF_FACESIZE-1); + + fmt.dwMask := fmt.dwMask or CFM_SIZE; + fmt.yHeight := Params.Size * TwipsInFontSize; + + fmt.dwMask := fmt.dwMask or CFM_EFFECTS or CFM_SUBSCRIPT or CFM_SUPERSCRIPT; + fmt.dwEffects := FontStylesToEffects(Params.Style) or VScriptPosToEffects(Params.VScriptPos); + + Result := SendMessage(RichEditWnd, EM_SETCHARFORMAT, w, PtrInt(@fmt))>0; +end; + class function TRichEditManager.SetSelectedTextStyle(RichEditWnd: Handle; Params: TIntFontParams): Boolean; var