本文整理自网络,侵删。
delphi 技巧 以相同类名派生一个子类
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
// 以相同类名派生一个子类
TPanel = class(ExtCtrls.TPanel)
private
FOnPaint: TNotifyEvent;
protected
// 重载一个方法
procedure Paint; override;
public
// 新定义一个事件
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
end;
TForm1 = class(TForm)
pnl1: TPanel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure OnPnlPaint(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TPanel }
procedure TPanel.Paint;
begin
inherited;
if Assigned(FOnPaint) then
FOnPaint(Self);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// 新增加的事件只能在运行期动态关联
pnl1.OnPaint := OnPnlPaint;
end;
procedure TForm1.OnPnlPaint(Sender: TObject);
begin
// 这一句是可以执行到的
pnl1.Canvas.TextOut(10, 10, 'Test');
end;
end.
相关阅读 >>
Delphi 使用泛型的 tarray 从动态数组中查找指定元素
Delphi中组件panel、splitter、groupbox、按钮组件(checkbox...)、计时器、滚动条、多选卡
更多相关阅读请进入《Delphi》频道 >>