怎样增加一个OnColorChange的属性?

sc_arhat 2007-07-30 10:49:13
想写一个TMyPanel,继承自TPanel,增加一个属性OnColorChange便于用户在mypanel颜色改变的时候自定义事件,该怎么定义这个属性呢?VCl的源码没有看明白,哪位大师指点以下,或是推荐本书学习一下,谢谢。
...全文
92 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿发伯 2007-07-30
  • 打赏
  • 举报
回复
上面的过程实现中TMyPanle写错了,应改为TMyPanel。下面是完整的的测试:

unit Unit1;

interface

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

type
TMyPanel = class(TPanel)
private
FOnColorChange: TNotifyEvent;
procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
published
property OnColorChange: TNotifyEvent read FOnColorChange write FOnColorChange;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FPanel: TMyPanel;
procedure ColorChange(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyPanel.CMColorChanged(var Message: TMessage);
begin
if Assigned(FOnColorChange) then
FOnColorChange(Self);
inherited;
end;

procedure TForm1.ColorChange(Sender: TObject);
begin
ShowMessage('Ok');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FPanel := TMyPanel.Create(Self);
FPanel.Parent := Self;
FPanel.OnColorChange := ColorChange;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if FPanel.Color <> clRed then
FPanel.Color := clRed
else
FPanel.Color := clWhite;
end;

end.
阿发伯 2007-07-30
  • 打赏
  • 举报
回复
没测试,也许有错误

TMyPanel = class(TPanel)
private
FOnColorChange: TNotifyEvent;
procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED;
published
property OnColorChange: TNotifyEvent read FOnColorChange write FOnColorChange;
end;


procedure TMyPanle.CMColorChanged(var Message: TMessage);
begin
if Assigned(FOnColorChange) then
FOnColorChange(Self);
inherited;
end;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧