是的,你做错了什么。 :)
在这种情况下,只需移动Parent属性的赋值,使其在您尝试更改字体之前发生。风格:
DatEdit.OnEnter := CtrlInputProc;
DatEdit.OnExit := CtrlExitProc;
DatEdit.Enabled := false;
DatEdit.Parent := Canvas;
DatEdit.Font.Style := DatEdit.Font.Style + [fsItalic];
我不知道字体是否可以通过这种方式成功设置为斜体,但这至少可以解决您的异常。
更新:
我已经确认,只要您首先设置了控件Parent,字体就可以以这种方式变为斜体。(我使用了Delphi 2009,但如果它在Delphi 5中不起作用,我会感到惊讶)
仅供参考:我会的
强烈地
InvalidRect()
CMFontChanged()
需要窗口句柄的消息处理程序(这反过来又要求控件为父级)。
之后
,您可以从以下内容派生自己的控制类
TDateTimePicker
并对
CMFontChanged()
type
TMyDateTimePicker = class(TDateTimePicker)
protected
procedure CMFontchanged(var Message: TMessage); message CM_FONTCHANGED;
end;
procedure TMyDateTimePicker.CMFontchanged(var Message: TMessage);
procedure AdjustHeight;
var
DC: HDC;
SaveFont: HFont;
SysMetrics, Metrics: TTextMetric;
begin
DC := GetDC(0);
try
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
finally
ReleaseDC(0, DC);
end;
Height := Metrics.tmHeight + (GetSystemMetrics(SM_CYBORDER) * 8);
end;
begin
if HasParent then
inherited
else
AdjustHeight;
end;
请注意
程序从
私有的
TDateTimePicker
字体。风格
您可能不需要复制此代码,可以删除它和对它的调用,但如果您更改了
那么这应该确保控件的大小正确。
继承的