代码之家  ›  专栏  ›  技术社区  ›  smok1

设置TDateTimePicker时出错。字体。Delphi 5中的斜体样式

  •  1
  • smok1  · 技术社区  · 16 年前

    是否可以将TDateTimePickers字体设置为斜体?我用这段代码来做

    var
      DatEdit : TDateTimePicker;
    begin
      //I know Canvas is a stupid name for TPanel
      DatEdit:=TDateTimePicker.Create(Canvas);
    
      DatEdit.OnEnter := CtrlInputProc;
      DatEdit.OnExit := CtrlExitProc;
      DatEdit.Enabled := false;
      DatEdit.Font.Style := DatEdit.Font.Style + [fsItalic]; //this line creates an exception
      DatEdit.Parent := Canvas;
    
    end;
    

    „Control” has no parent window.
    

    1 回复  |  直到 16 年前
        1
  •  7
  •   Deltics    16 年前

    是的,你做错了什么。 :)

    在这种情况下,只需移动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 字体。风格 您可能不需要复制此代码,可以删除它和对它的调用,但如果您更改了 那么这应该确保控件的大小正确。

    继承的