某些字體只有中等和粗體的重量。鑑於下面的代碼,我必須一起避免TFontDialog? 從對話框中選擇樣式中時,它會返回重量500套樣式BOLD。如果我保存此樣式並打開TFontDialog,則它現在被設置爲BOLD。如何使用TFontDialog設置中等重量的字體?
FW_THIN = 100;
{$EXTERNALSYM FW_EXTRALIGHT}
FW_EXTRALIGHT = 200;
{$EXTERNALSYM FW_LIGHT}
FW_LIGHT = 300;
{$EXTERNALSYM FW_NORMAL}
FW_NORMAL = 400;
{$EXTERNALSYM FW_MEDIUM}
FW_MEDIUM = 500;
{$EXTERNALSYM FW_SEMIBOLD}
FW_SEMIBOLD = 600;
{$EXTERNALSYM FW_BOLD}
FW_BOLD = 700;
{$EXTERNALSYM FW_EXTRABOLD}
FW_EXTRABOLD = 800;
{$EXTERNALSYM FW_HEAVY}
FW_HEAVY = 900;
{$EXTERNALSYM FW_REGULAR}
FW_REGULAR = FW_NORMAL;
procedure TFontDialog.UpdateFromLogFont(const LogFont: TLogFont);
var
Style: TFontStyles;
begin
with LogFont do
begin
Font.Name := LogFont.lfFaceName;
Font.Height := LogFont.lfHeight;
if FFontCharsetModified then
Font.Charset := TFontCharset(LogFont.lfCharSet);
Style := [];
with LogFont do
begin
if lfWeight > FW_REGULAR then Include(Style, fsBold);
if lfItalic <> 0 then Include(Style, fsItalic);
if lfUnderline <> 0 then Include(Style, fsUnderline);
if lfStrikeOut <> 0 then Include(Style, fsStrikeOut);
end;
Font.Style := Style;
end;
end;
根據該代碼,是的 - TFontDialog不會爲你工作,因爲任何字體加權> FW_REGULAR只是將'fsBold'加到'Font.Style'上,並且沒有考慮其他的字體權重。這意味着權重<= FW_REGULAR不會是粗體,並且> FW_REGULAR將是,沒有其他考慮。 –
請注意,這是'TFontDialog'本身的限制,而不是底層的Win32'ChooseFont()'API。 VCL沒有字體的「中等」風格概念,字體不是粗體就是粗體。 –