怎样增加一个OnColorChange的属性? 想写一个TMyPanel,继承自TPanel,增加一个属性OnColorChange便于用户在mypanel颜色改变的时候自定义事件,该怎么定义这个属性呢?VCl的源码没有看明白,哪位大师指点以下,或是推荐本书学习一下,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没测试,也许有错误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; 上面的过程实现中TMyPanle写错了,应改为TMyPanel。下面是完整的的测试:unit Unit1;interfaceuses 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. findwindow 在vista下不好用? 求sum [散分]即将离职,以后请Delphi版的朋友多多关照,谢过先 想在stringgrid控件中一个列中放一个勾选,要怎么办呀?? 请教delphi中怎么获取不同坐标模式下,逻辑单位和象素单位的比例关系? 各位大哥、大姐双网卡能这样用吗? 哪位大哥给个获取文件夹创建时间的例程 UDPClient的通讯问题 程序员的骄傲!!! 如何在程序中压缩Access 2000 的数据厍! 如何把以下代码翻译成bcb 一個關於手機使用的奇怪問題????????
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;
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.