下面的图片(放大,因此您最好看到差异)显示动态创建的编辑控件(上面的两个示例)和从对话框编辑器(下面的示例)创建的编辑控件之间的字体差异.如何使我动态创建的CEdit控件的字体看起来像默认(下面的示例)?

我创建了CEdit控件,如下所示:
obj->CreateEx(WS_EX_CLIENTEDGE, _T("EDIT"), _T(""),
WS_CHILD | WS_VISIBLE | WS_TABSTOP,
rect.left, rect.top, rect.Width(), rect.Height(),
GetSafeHwnd(), reinterpret_cast<HMENU>(mId));
obj->SetFont(&mFont); // mFont was created in the Dialog Constructor
// with mFont.CreatePointFont(80, _T("MS Shell Dlg"));
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
您认为哪种最佳做法是使Windows对话框兼容标准字体(96 dpi)和"大字体"设置(120 dpi),以便对象不会重叠或被切断?
顺便说一句:万一它是相关的,我有兴趣为Delphi对话框做这个.
提前致谢!
我有一个GUI应用程序,其中包括用于工具栏按钮,菜单标志符号,通知图标等的许多图标.这些图标作为资源链接到应用程序,并且可以使用各种不同的大小.通常,对于工具栏按钮图像,我有16px,24px和32px版本.我的图标是32bpp,具有部分透明度.
该应用程序具有高DPI感知能力,可根据主流字体缩放调整所有可视元素的大小.因此,例如,在100%字体缩放,96dpi时,工具栏图标大小为16px.在125%缩放,120dpi时,工具栏图标大小为20px.我需要能够加载大小为20px的图标而不会产生任何混叠效果.我怎样才能做到这一点?请注意,我想支持Windows 2000及更高版本.
在Windows 7的高DPI模式下尝试使用我的Delphi 2010应用程序更多用户我已经尝试了几种方法来检索PixelsPerInch并与96进行比较.唉,无论我尝试什么,我总是得到96.我的问题是:
这是我尝试过的
dpiX := Form1.PixelsPerInch
Run Code Online (Sandbox Code Playgroud)
和
dpiX := Screen.PixelsPerInch
Run Code Online (Sandbox Code Playgroud)
最后:
D2DFactoryOptions.DebugLevel := D2D1_DEBUG_LEVEL_NONE;
pD2DFactoryOptions := @D2DFactoryOptions;
if D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
IID_ID2D1Factory,
PD2DFactoryOptions,
D2DFactory
) <> S_OK then exit;
D2DFactory.GetDesktopDpi(dpiX, dpiY)
Run Code Online (Sandbox Code Playgroud)
小心猜?这是正确的dpiX是100%,125%和150%的常数96
请指教.
我有两种"无模式"形式:
你可以看到:
从这种无模式的形式,我想展示一个模态:
的模态形式被构造为:
var
frmExchangeConfirm: TfrmExchangeConfirm;
begin
frmExchangeConfirm := TfrmExchangeConfirm.Create(Application);
try
//Setting popupMode and popupParent still makes the MainForm disabled
// frmExchangeConfirm.PopupMode := pmExplicit;
// frmExchangeConfirm.PopupParent := Self; //owned by us
frmExchangeConfirm.OwnerForm := Self; //tell the form which owner to use
frmExchangeConfirm.ShowModal;
finally
frmExchangeConfirm.Free;
end;
Run Code Online (Sandbox Code Playgroud)
模态表单被告知通过新OwnerForm属性使用哪个所有者:
protected
procedure SetOwnerForm(const Value: TForm);
public
property OwnerForm: TForm read GetOwnerForm write SetOwnerForm;
end;
Run Code Online (Sandbox Code Playgroud)
这迫使手柄娱乐:
procedure TfrmExchangeConfirm.SetOwnerForm(const Value: …Run Code Online (Sandbox Code Playgroud) 我有一个Delphi 3应用程序,已经广泛分发至少十年.今天我收到一份报告称该应用程序在华硕Transformer T100TA-C1-GR(S)Windows 8平板电脑上无法正常运行.具体来说,该应用程序拒绝运行,因为它检测到的屏幕分辨率太小,无法让应用程序正确显示自己.在应用程序中,我有以下条件检查:
if (Screen.Width < 800) or (Screen.Height < 600) then begin
// display a message reporting screen resolution too low
ShowMessage('blah blah...');
Application.Terminate;
Run Code Online (Sandbox Code Playgroud)
当我编译我的应用程序的特殊版本以帮助调试问题,并将应用程序提供给抱怨用户时,他们会报告以下数字:
Width: 980
Height: 550
Run Code Online (Sandbox Code Playgroud)
这是我添加了特殊编译的额外代码,然后我给用户:
ShowMessage('Width: ' + IntToStr(Screen.Width) + #13#10 +
'Height: ' + IntToStr(Screen.Height));
Run Code Online (Sandbox Code Playgroud)
但是,用户发誓他们的平板电脑配置为1368x768.他们甚至切换到1024x768并且Delphi报告了相同的错误数字.
所有TForm.Scaled属性都设置为False.
一条可能有帮助的线索......屏幕宽度和高度检测代码(上图)在以下过程中运行:
procedure TForm1.WMDisaplayChange(var m: TWMDisplayChange);
Run Code Online (Sandbox Code Playgroud)
知道可能会发生什么吗?
delphi ×5
winapi ×2
windows ×2
delphi-xe6 ×1
dialog ×1
font-size ×1
mfc ×1
pixel-fonts ×1
windows-7 ×1