从TButton继承一个新类,添加一个属性Canvas.在TButton.Create,里面创建TCanvas对象
解决方案 »
- 深圳蓝韵网络怎么样?
- 请问DELPHI 的FORM 开启触发什么事件
- 在网站如何获如数据
- Listview怎么去掉滚动条?重分相送!
- 我想把数据库的调用放入dll中应该如何实现?
- 请教一个问题:我在窗体上放了一个日期时间控件,当检索数据时我把数据库里的日期赋予此近代,更新时把控件的值赋予字段,我应该在tadoda
- 为什么我的MDI子窗体关闭时像最小化,而没有关闭?怎样可以关闭?
- 怪问题,高手们就就我啊!写数据库的问题!
- 怎样实现用程序来控制打印机?
- 用DELHPI 做报表时, 如是中文,为什么会疏密不均的情况?
- 哪里能下载到封装了 Internet Explorer_Server 的控件?
- 如何更改adoquery所查询的值为可编辑值!
我看过一篇上面说在 published 加可是不管用。
你可以自制一个控件
继承tbutton
to zhptj(北狼)
我就是继承tbutton,可是要怎样写呀?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MyCanvas: TCanvas;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
MyCanvas.Handle := GetDC(Button1.Handle);
MyCanvas.Ellipse(2, 2, 8, 8);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MyCanvas := TCanvas.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
MyCanvas.Free;
end;end.////////////////////////////////////////思想就是取得 Button 的 HDC ,传给 MyCanvas ......
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
MyCanvas: TCanvas;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
MyCanvas.Handle := GetDC(Button1.Handle);
MyCanvas.Ellipse(2, 2, 8, 8);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
MyCanvas := TCanvas.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
MyCanvas.Free;
end;end.////////////////////////////////////////思想就是取得 Button 的 HDC ,传给 MyCanvas ......
要在private段定义
FCanvas: TCanvas;不是在published,published中是从父类继承的属性。
private
FCanvas: TCanvas;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure Paint; virtual;
procedure PaintWindow(DC: HDC); override;
property Canvas: TCanvas read FCanvas;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;{ TCustomControl }constructor TCustomControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;
end;destructor TCustomControl.Destroy;
begin
FCanvas.Free;
inherited Destroy;
end;procedure TCustomControl.WMPaint(var Message: TWMPaint);
begin
Include(FControlState, csCustomPaint);
inherited;
Exclude(FControlState, csCustomPaint);
end;procedure TCustomControl.PaintWindow(DC: HDC);
begin
FCanvas.Lock;
try
FCanvas.Handle := DC;
try
TControlCanvas(FCanvas).UpdateTextFlags;
Paint;
finally
FCanvas.Handle := 0;
end;
finally
FCanvas.Unlock;
end;
end;procedure TCustomControl.Paint;
begin
end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TButton1 = class(TButton)
private
FCanvas: TCanvas;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure Paint; virtual;
procedure PaintWindow(DC: HDC); override;
property Canvas: TCanvas read FCanvas;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
procedure Register;implementationconstructor TButton1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;
end;destructor TButton1.Destroy;
begin
FCanvas.Free;
inherited Destroy;
end;procedure TButton1.WMPaint(var Message: TWMPaint);
begin
Include(FControlState, csCustomPaint);
inherited;
Exclude(FControlState, csCustomPaint);
end;procedure TButton1.PaintWindow(DC: HDC);
begin
FCanvas.Lock;
try
FCanvas.Handle := DC;
try
TControlCanvas(FCanvas).UpdateTextFlags;
Paint;
finally
FCanvas.Handle := 0;
end;
finally
FCanvas.Unlock;
end;
end;procedure TButton1.Paint;
begin
end;procedure Register;
begin
RegisterComponents('Samples', [TButton1]);
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TButton1 = class(TButton)
private
FCanvas: TCanvas;
//加一句
FControlState: TControlState;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure Paint; virtual;
procedure PaintWindow(DC: HDC); override;
// property Canvas: TCanvas read FCanvas;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Canvas: TCanvas read FCanvas;
end;
procedure Register;implementationconstructor TButton1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;
end;destructor TButton1.Destroy;
begin
FCanvas.Free;
inherited Destroy;
end;procedure TButton1.WMPaint(var Message: TWMPaint);
begin
Include(FControlState, csCustomPaint);
inherited;
Exclude(FControlState, csCustomPaint);
end;procedure TButton1.PaintWindow(DC: HDC);
begin
FCanvas.Lock;
try
FCanvas.Handle := DC;
try
TControlCanvas(FCanvas).UpdateTextFlags;
Paint;
finally
FCanvas.Handle := 0;
end;
finally
FCanvas.Unlock;
end;
end;procedure TButton1.Paint;
begin
end;procedure Register;
begin
RegisterComponents('Samples', [TButton1]);
end;end.