Почему мне нужно назначить шрифт холста для изменения размера шрифта в Delphi 2009?

у меня есть подкласс TPanel, который я очень люблю, и к моему огорчению, шрифт, похоже, никогда не принимает при этом:

font.size := AFontsize;
font.style := AFontStyle;
font.color := AFontColor;

но он меняется, когда я делаю это:

Canvas.Font.Assign(Font);

мне не нужно было делать это в Delphi 7, но я, похоже, должен сделать это в 2009 году. В чем дело?

1 ответов


если вы рисуете текст на панели с помощью холста, вы должны установить шрифт холста.

некоторые компоненты и / или некоторые версии Delphi могут, намеренно или как побочный эффект предыдущей задачи рисования, установить Canvas.Font, но вы не должны полагаться на него.

поэтому рекомендуется делать Canvas.Font := Font; перед началом рисования текста.

то же самое относится к Canvas.Brush и Canvas.Pen.

type
  TMyPanel = class(TCustomPanel)
  protected
    procedure Paint; override;
  end;

procedure TMyPanel.Paint;
var
  r: TRect;
begin
  r := ClientRect;

  Canvas.Brush.Color := Color;
  Canvas.FillRect(r); // fill the background

  Canvas.Font := Font;
  DrawText(Canvas.Handle, 'Sample Text', -1, r, DT_SINGLELINE or DT_CENTER or DT_VCENTER or DT_EXPANDTABS or DT_NOPREFIX);
end;