Canvas小问题,请帮忙解决(50分)

  • 主题发起人 主题发起人 年轻和尚
  • 开始时间 开始时间

年轻和尚

Unregistered / Unconfirmed
GUEST, unregistred user!
[blue]我想做个自定义组件,主要用Canvas完成。
我自定了个Font属性
FFont:TFont;
下边的property Font:TFont read FFont write FFont;等都完成了
但为什么用 Canvas.Font:=FFont;不行呢?
[red]提示"Can Not assgin a nil to a TFont"[/red]
望指教!如何改正[/blue]
 
你的 FFont 没有创建!
在你的控件创建的时候需要手动将 FFont 一起创建:

FFont := TFont.Create;
...
 
参考一下:
procedure AngleTextOut(CV: TCanvas; const sText: String; x, y, angle:integer;color:TColor);
var
LogFont: TLogFont;
MyFont,SaveFont: TFont;
begin
SaveFont := TFont.Create;
SaveFont.Assign(CV.Font);
MyFont:= SaveFont;
MyFont.Style := [fsBold];
MyFont.Name := 'Times New Roman';
GetObject(MyFont.Handle, sizeof(TLogFont), @LogFont);
with LogFont do
begin
lfEscapement := angle *10;
lfPitchAndFamily := FIXED_PITCH or FF_DONTCARE;
lfQuality := PROOF_QUALITY;
lfHeight:=30;
//lfStrikeOut := 1;
end; {with}
CV.Font.Handle := CreateFontIndirect(LogFont);
CV.Font.Color := color;
SetBkMode(CV.Handle, TRANSPARENT);
CV.TextOut(x, y, sText);
CV.Font.Assign(SaveFont);
SaveFont.Free;
end;

procedure TAboutForm.ShowBrand;
begin
Canvas.Brush.Color := clBlack;
Canvas.Rectangle(0,0,60,300);
AngleTextOut(Canvas,'LAN EXPLORER',10, 213, 90,clRed);
AngleTextOut(Canvas,'LAN EXPLORER',11, 214, 90,clYellow);
end;
 

看看FontDialog的源码
 
谢谢你们,虽然现在我已经自己解决了,但还是给分

其实只要一个property Font; 就足够了
 
后退
顶部