C++Builder 11 中如何使用不进行缩放的固定尺寸窗体
Delphi窗体固定像素尺寸禁用缩放解决方案
问题根本原因
你遇到的现象是VCL窗体的默认处理逻辑导致的:
Scaled设为False时,VCL会跳过设计尺寸的DPI适配逻辑,直接套用系统默认的窗体基础尺寸,所以会丢失设计值Scaled设为True时会按系统DPI比例缩放窗体,不符合固定像素的需求- DPI感知设置不生效,大概率是项目manifest配置被覆盖,或者IDE设置没有同步到编译产物中
实操解决方案
1. 项目配置调整
- 打开项目选项,依次进入「应用程序」→「清单」选项卡
- 直接关闭「启用DPI感知」开关,高版本Delphi选择DPI感知级别为无
- 保存设置后清理项目编译缓存,重新生成可执行文件,避免旧manifest残留
2. 窗体属性配置
- 窗体
BorderStyle属性设置为bsSingle或bsDialog,禁止用户拖动边框修改尺寸 - 移除窗体
BorderIcons中的biMaximize选项,禁用最大化按钮 - 保持
Position属性为poScreenCenter,确保启动时居中显示
3. 代码兜底强制固定尺寸
在窗体的OnCreate事件中添加如下代码,直接锁定设计时的像素尺寸,绕过VCL的自动调整逻辑:
procedure TYourForm.FormCreate(Sender: TObject); begin // 替换为你设计时的窗体实际宽高像素值 Self.Width := 设计时宽度数值; Self.Height := 设计时高度数值; end;
如果项目有多个窗体需要统一规则,可以将上述逻辑封装为公共窗体基类,所有需要固定尺寸的窗体直接继承即可。
内容的提问来源于stack exchange,提问作者vision
相关产品推荐
相关产品推荐

