有些字体只有中等和粗体。鉴于下面的代码,我必须一起避免 TFontDialog 吗?
当从 Dialog 中选择 style medium 时,它返回 weight 500 set style BOLD。如果我保存此样式并打开 TFontDialog 备份它现在设置为 BOLD。

  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;

最佳答案

不幸的是,VCL 提供的 TFontDialog 对此一无所知,Delphi 中的 TFont 也不知道。 VCL 只承认粗体或不粗体,没有中间字体粗细。您必须完全绕过这些并实现您自己的对话框和字体对象才能完成此类功能。

关于delphi - 如何使用 TFontDialog 设置中等粗细字体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36093385/

10-08 22:41