在tpanel的派生类上能够自由绘图吗?怎么办? ( 积分: 100 )

  • 主题发起人 主题发起人 EdwardZhou
  • 开始时间 开始时间
E

EdwardZhou

Unregistered / Unconfirmed
GUEST, unregistred user!
在form中可以响应OnClick,然后在其Canvas上绘图,可是对应的操作比如
canvas.moveto(0,0);
canvas.lineto(100,100);
在tpanel的派生类上就不可以。为什么?
但是重载tpanel派生类的paint,在其中写绘制代码却可以,又是为什么?
 
在form中可以响应OnClick,然后在其Canvas上绘图,可是对应的操作比如
canvas.moveto(0,0);
canvas.lineto(100,100);
在tpanel的派生类上就不可以。为什么?
但是重载tpanel派生类的paint,在其中写绘制代码却可以,又是为什么?
 
tpicturePanel可以
 
var
C:TCanvas;
begin
C := TControlCanvas.Create;
TControlCanvas(C).Control := Panel1 ;
C.MoveTo(0,0);
C.LineTo(100,100);
C.Free;
end;
 
同意 wr960204
 
因为在panel中的canvas属性是protected的,在子类中提升公布级别就行了。
 
可以直接 hack 之:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

THackControl = class(TWinControl)
private
FCanvas: TCanvas;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
THackControl(Panel1).FCanvas.TextOut(10, 10, '这是一个测试 ...');
end;

end.

=^0^=
 

Similar threads

后退
顶部