Page 1 of 1
font qulalitiy
Posted: Sat Dec 17, 2011 2:32 am
by amethyst623
is there a method to set the font quality for text in the richviewedit?
LOGFONT logFont;
logFont.lfHeight = 8;
logFont.lfWidth = 0;
logFont.lfEscapement = 0;
logFont.lfOrientation = 0;
logFont.lfWeight = FW_NORMAL;
logFont.lfItalic = 0;
logFont.lfUnderline = 0;
logFont.lfStrikeOut = 0;
logFont.lfCharSet = ANSI_CHARSET;
logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
logFont.lfQuality = PROOF_QUALITY;
Posted: Sat Dec 17, 2011 11:36 am
by Sergey Tkachenko
There are no direct properties for changing a font quality.
A solution is possible using TRVStyle.OnApplyStyle event:
Code: Select all
// code for RVStyle.OnApplyStyle event
procedure TForm1.RVStyle1ApplyStyle(Sender: TRVStyle; Canvas: TCanvas;
StyleNo: Integer; var DoDefault: Boolean);
var LogFont: TLogFont;
tm: TTextMetric;
TextStyle: TFontInfo;
begin
DoDefault := False;
TextStyle := Sender.TextStyles[StyleNo];
TextStyle.AssignToLogFont(LogFont, Canvas, True, False, False);
LogFont.lfQuality := 3 {NONANTIALIASED_QUALITY};
Canvas.Font.Handle := CreateFontIndirect(LogFont);
// supporting CharScale property
if TextStyle.CharScale<>100 then begin
if GetTextMetrics(Canvas.Handle, tm) then
LogFont.lfWidth := tm.tmAveCharWidth*TextStyle.CharScale div 100
else
LogFont.lfWidth := Canvas.TextWidth('x')*TextStyle.CharScale div 100;
Canvas.Font.Handle := CreateFontIndirect(LogFont);
end;
// supporting CharSpacing property
SetTextCharacterExtra(Canvas.Handle, TextStyle.CharSpacing);
end;
This solution has the following problems:
1) it applies only to text; bullet and numbering still use the system settings
2) this solution ignores bidirected text properties, so it can be used only if your application does not need to support Arabic or Hebrew.