【问题标题】:How to change font size of Delphi XE6 IDE如何更改 Delphi XE6 IDE 的字体大小
【发布时间】:2014-09-12 10:30:20
【问题描述】:

如何更改 Delphi XE6 IDE 本身的字体大小。

IDE 的对话框没有使用我的 Windows 字体首选项,我找不到任何选项来更改 IDE 使用的字体。

或者,how do i get Delphi XE6 to honor the user's font preferences?

【问题讨论】:

  • AFAIK,你不能改变字体。它是硬编码的。
  • 你是那些(和我一样)眼睛有问题的人之一吗?
  • @Rigel。是的,但不止于此。 1991 年,当我们在 14" 显示器 (43 ppi) 上运行 640x480 时,8pt 字体很好。现在我们在 22" 显示器 (58 ppi) 上运行 1920x1080。一切都变小了 26%。 16 像素的工具栏图像在 1991 年可能还不错,但今天它太小了。 30 年来,开发人员一直在以像素而不是对话框单位来布置事物。如果他们设计错误,是时候更新他们错误的设计了:工具栏图像现在必须为 24 像素,字体必须为 11 磅,按钮必须为 31 像素高。或者他们可以做正确的事:遵循用户的偏好。
  • 我开始在我的程序(设置面板)中添加一个选项,以允许用户更改表单的字体大小。

标签: delphi delphi-xe6


【解决方案1】:

你不能
字体是硬编码的。你不能改变它。

这是我尝试过的方法

1 - 使用 HEX 编辑器更改 BDS.EXE

如果您在 HEX 编辑器中打开 BDS.EXE,查找 TextHeight 并将值从 $0D (13) 更改为更大的值,那么更改后的 bds.exe 将看起来完全一样。

2 - 使用 EnumChildWindows 向 Delphi IDE 发送带有 WM_SETFONT 消息的垃圾邮件

您可以向正在运行的 Delphi 主窗口发送WM_SETFONT 消息。
您必须使用FindWindow API 调用找到窗口。

发件人:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632642%28v=vs.85%29.aspx

wParam
字体句柄 (HFONT)。如果此参数为 NULL,则控件使用默认系统字体来绘制文本。
lParam
lParam 的低位字指定是否应在设置字体后立即重绘控件。如果此参数为 TRUE,则控件重绘自身。

因为你希望 Delphi 使用默认字体,所以消息非常简单。

Delphi XE6 主窗口称为TAppBuilder,因此您必须使用FindWindow 获取该窗口的句柄。

我试过了,但是没有用。

unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm4 = class(TForm)
    FontDialog1: TFontDialog;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

const
  DelphiWindows: array [1 .. 1] of PWideChar = ('TAppBuilder');

function EnumChildProc(const hWindow: hWnd; const hFont: LParam): boolean; stdcall;
begin
  SendMessage(hWindow, WM_SETFONT, hFont, 1);
  Result:= True;
end;

procedure TForm4.Button1Click(Sender: TObject);
var
  BDSWindow: HWND;
  ChildWindow: HWnd;
  Font: HFONT;
  i: Integer;
begin
  if FontDialog1.Execute then begin
    BDSWindow:= FindWindow(DelphiWindows[1], nil);
    Font:= FontDialog1.Font.Handle;
    EnumChildWindows(BDSWindow, @EnumChildProc, Font);
    ShowMessage('Done');
  end;
end;

end.

我没有尝试过默认字体,因为我的系统上的Delphi字体和默认字体是一样的。而且我不想更改默认字体。

这样做改变了我的 Delphi 上的 2 个 dropdown_boxes。不是很好的表现。

我将此作为答案发布,希望您能从这里找到解决方案。

【讨论】:

  • 可能值得注意的是,即使您确实设法更改了字体大小,IDE 也是使用当前字体大小设计的,因此它可能不适用于新大小(您可能甚至使它无法使用)。有时在 UI 中适应字体大小和缩放是一项艰巨的工作,而 Delphi IDE 有 很多 复杂的 UI 可以满足这方面的要求。 (顺便说一句,这可能是没有内置功能来更改字体大小的原因。)
  • 您不能将字体句柄发送给另一个进程,它不会起作用:"GDI 对象的句柄是进程私有的。也就是说,只有创建 GDI 的进程对象可以使用对象句柄。” (GDI Objects)
  • @SertacAkyuz,是的,你是对的,但你可以发送一个 null 的 hFont,它告诉窗口使用系统默认字体。但是我怀疑 DBS.EXE 忽略了 WM_SETFONT 消息。
  • 奇怪的是,Raymond Chen 刚刚发布了关于 WM_SETFONT 和 WM_GETFONT 的帖子,以及为什么它们可能不起作用。见When I send a WM_GETFONT message to a window, why don't I get a font?
【解决方案2】:

最好的方法是使用 Delphi IDE 主题编辑器,它非常简单。试试Delphi IDE Theme Editor,预览:

【讨论】:

  • 这将改变编辑器中的字体大小,而不是在整个 IDE 环境中。请再次阅读问题,这次要仔细:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2014-07-06
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多