我在Form上自己画了个Button,请问如何给这个Button添加OnClick事件,并响应OnClick事件? 在WinProc 中响应on_Command 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不对,是WM_CommandWM_COMMAND wNotifyCode = HIWORD(wParam); // notification code wID = LOWORD(wParam); // item, control, or accelerator identifier hwndCtl = (HWND) lParam; // handle of control 能给出具体代码吗?我是在一个动态生成的窗口中动态生成的一个Button。 Button.OnClick := MyProc; //MyProc为自定义过程 如果只是动态生成一个标准Button的话就可以这样,procedure BTN_Proc(Sender:TObject);begin ....//单击事件end;.....var btn : TButton;begin btn := TButton.Create(Self); btn.parent := self; btn.OnClick := BTN_Proc;end; 在窗口的 click 事件中: 如果:鼠标在按钮区域内 则: 处理你自己需要的事情! 结束如果;结束窗口 click 事件; 我按照liang_z(千山一刀之忍者神龟)的方法,可是编译时说:语句btn.OnClick:=BTN_Proc出现一下错误:Incompatible types: 'method pointer and regular procedure'这是为什么? 如果只是动态生成一个标准Button的话就可以这样,procedure BTN_Proc(Sender:TObject);begin ....//单击事件end;.....var btn : TButton;begin btn := TButton.Create(Self); btn.parent := self; btn.OnClick := BTN_Proc; ////// btn.OnClick := BTN_Proc(nil);试一试end; 不行, btn.OnClick是TNotifyEvent类型,BTN_Proc是procedure过程,两个不能等。 拦截WM_LBUTTONDOWN消息判断鼠标坐标是否在你的Button内然后作相应处理 TNotifyEvent的定义:TNotifyEvent = procedure(Sender: TObject) of object;TNotifyEvent类型的变量就是一个方法指针你的控件如果完全是自己画的,需要响应消息,并且要从TWinControl继承 dancemaple(枫之舞) ,能给我一个正确的例子吗? 我以前照着Delphi 4 Unleashed这本书写过例子,不过现在找不到了。我再找找看 TFMain = class(TForm) .... private { Private declarations } myBTN: TButton; procedure myClick(Sender: TObject); public ... end;var FMain: TFMain;implementationprocedure TFMain.myClick(Sender: TObject);begin showmessage('OK');end;procedure TFMain.FormCreate(Sender: TObject);begin myBTN := TButton.Create(self); myBTN.Parent := self; myBTN.OnClick := myClick;end;procedure TFMain.FormDestroy(Sender: TObject);begin if Assigned(myBTN) then myBTN.Free;end; 找不到,大概说一下吧。那个例子是从TPanel继承,写了一个TMousePanel,用Panel来模仿TButton,当鼠标按下时,拦截WM_LMOUSEDOWN消息,鼠标左键弹起时,拦截WM_LMOUSEUP事件。(以下代码可能不全,请自己补全。如果想在鼠标点击时做别的处理,请自己增加功能)unit Unit1;interfacetype TMousePanel = class(TPanel) private protected procedure wmMouseDown(var Msg: TWMMouse); message WM_LMOUSEDOWN; procedure wmMouseUp(var Msg: TWMMouse); message WM_LMOUSEUP; public constructor Create(AOwner: TComponent); override; end;...implementation...{ TMousePanel }constructor TMousePanel.Create(AOwner: TComponent);begin inherited; BevelInner := bvRaised;end;procedure TMousePanel.wmMouseDown(var Msg: TWMMouse);begin // 用来模拟Button被按下时的外观变化 BevelInner := bvLowered; SetCapture(Handle);end;procedure TMousePanel.wmMouseUp(var Msg: TWMMouse);var AOnClick: TNotifyEvent;begin BevelInner := bvRaised; ReleaseCapture; AOnClick := OnClick; if Assigned(AOnClick) then OnClick(Self);end; 用 TPanel 继承??为什么不用 TPaintBox? 小的多了 ◆用过东进语音卡进行二次开发的朋友请进◆ My God!一个题都不会答 如何实现DOS 下的PING的效果,测试网络的连通性(附源码) 怎样判断调用WINEXEC外部程式已经存在! 透明图形怎么实现??? 急 在线 一个有关截取字符串的问题? Delphi中和bzero这个函数对应的函数是什么 去掉MDI窗体的水平和垂直滚动条 ado数据库更新的问题。 开放源代码项目,请有意的程序员进来 怎样实现从RGB颜色值转换到HSL颜色值? 关于用sql语句向sql server写入nText字段的问题
WM_COMMAND
wNotifyCode = HIWORD(wParam); // notification code
wID = LOWORD(wParam); // item, control, or accelerator identifier
hwndCtl = (HWND) lParam; // handle of control
procedure BTN_Proc(Sender:TObject);
begin
....//单击事件
end;.....
var
btn : TButton;
begin
btn := TButton.Create(Self);
btn.parent := self;
btn.OnClick := BTN_Proc;
end;
如果:鼠标在按钮区域内 则:
处理你自己需要的事情!
结束如果;
结束窗口 click 事件;
语句btn.OnClick:=BTN_Proc出现一下错误:
Incompatible types: 'method pointer and regular procedure'
这是为什么?
procedure BTN_Proc(Sender:TObject);
begin
....//单击事件
end;.....
var
btn : TButton;
begin
btn := TButton.Create(Self);
btn.parent := self;
btn.OnClick := BTN_Proc; ////// btn.OnClick := BTN_Proc(nil);试一试
end;
判断鼠标坐标
是否在你的Button内
然后作相应处理
TNotifyEvent类型的变量就是一个方法指针你的控件如果完全是自己画的,需要响应消息,并且要从TWinControl继承
....
private
{ Private declarations }
myBTN: TButton;
procedure myClick(Sender: TObject);
public
...
end;var
FMain: TFMain;
implementationprocedure TFMain.myClick(Sender: TObject);
begin
showmessage('OK');
end;procedure TFMain.FormCreate(Sender: TObject);
begin
myBTN := TButton.Create(self);
myBTN.Parent := self;
myBTN.OnClick := myClick;
end;procedure TFMain.FormDestroy(Sender: TObject);
begin
if Assigned(myBTN) then
myBTN.Free;
end;
unit Unit1;interfacetype
TMousePanel = class(TPanel)
private protected
procedure wmMouseDown(var Msg: TWMMouse); message WM_LMOUSEDOWN;
procedure wmMouseUp(var Msg: TWMMouse); message WM_LMOUSEUP;
public
constructor Create(AOwner: TComponent); override;
end;
...implementation...{ TMousePanel }constructor TMousePanel.Create(AOwner: TComponent);
begin
inherited;
BevelInner := bvRaised;
end;procedure TMousePanel.wmMouseDown(var Msg: TWMMouse);
begin
// 用来模拟Button被按下时的外观变化
BevelInner := bvLowered;
SetCapture(Handle);
end;procedure TMousePanel.wmMouseUp(var Msg: TWMMouse);
var
AOnClick: TNotifyEvent;
begin
BevelInner := bvRaised;
ReleaseCapture;
AOnClick := OnClick;
if Assigned(AOnClick) then
OnClick(Self);
end;
为什么不用 TPaintBox? 小的多了