控件事件赋值的问题

chaosbird 2003-08-07 11:13:26
如何给一个form上的所有Twincontrol控件的onmousedown事件赋值?(如果有的话)
...全文
102 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
esu 2003-08-08
  • 打赏
  • 举报
回复
灵活一点点
再本方法一点点
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure btn(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.DFM}

{ TForm1 }

procedure TForm1.btn(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('ok');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
myMemo:TMemo;
myEdit:TEdit;
i: integer;
begin
myMemo:=TMemo.Create(nil);
with myMemo do
begin
parent:=Form1;
left:=100;
top:=100;
// onMouseDown:=btn;
end;

myEdit:=TEdit.Create(nil);
with myEdit do
begin
parent:=Form1;
left:=300;
top:=100;
onMouseDown:=btn;
end;

for i := 0 to form1.ControlCount-1 do
begin
//这里列出所有响应onMouseDown的
if (Form1.Controls[i] is TEdit) then
(Form1.Controls[i] as TEdit).onMouseDown := btn;
if (Form1.Controls[i] is TMemo) then
(Form1.Controls[i] as TMemo).onMouseDown := btn;
end;
end;

end.
gmc007 2003-08-07
  • 打赏
  • 举报
回复
你有没有考虑到:不同的Twincontrol组件可能有不同的参数。

**** 深圳的DELPHI爱好者聚会通知! ****

详情请看:
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1619353
esu 2003-08-07
  • 打赏
  • 举报
回复
to ljmanage(过客) 我想你一定没有测试过吧?
???????
给你就是思路,你不会一行代码也不想写吧
如果还有什么特别的
你可以在动态生成控件的时候加tag=9之类的,然后在ljmanage(过客) 的代码中判断tag
flyingkiller 2003-08-07
  • 打赏
  • 举报
回复
ljmanage(过客)的思路是对的。
hansome 2003-08-07
  • 打赏
  • 举报
回复
我觉得你直接重载Form的WinProc函数会比较好
chaosbird 2003-08-07
  • 打赏
  • 举报
回复
to ljmanage(过客) 我想你一定没有测试过吧?

to lynew(死循环-开始) :我需要用代码赋值的,因为在设计的时候我还不知道有哪些控件
lynew 2003-08-07
  • 打赏
  • 举报
回复
全选所有控件然后就可以设了,但是同一个事件。
李_军 2003-08-07
  • 打赏
  • 举报
回复
var
i: integer;
begin
for i := 0 to form1.ComponentCount-1 do
begin
if Form1.Components[i] is TWinControl then
TWinControl(Form1.Components[i] ).OnMouseDown := YourEvent;
end;
end;
aquadp 2003-08-07
  • 打赏
  • 举报
回复
那就把你想要付给事件的控件的MOUSEDOWN(假如有的话)指向你自定义的MOUSEDOWN事件或者是已写好的某个控件的MOUSEDOWN事件。在属性的事件列表框中,delphi会显示出来的。
chaosbird 2003-08-07
  • 打赏
  • 举报
回复
to esu(ESU) :你认真想过才回答的吗?
btw,你上面的这段程序似乎和我的问题没有关系,也许你没看明白我得意思,也许我没说清楚。

如果是我没说清楚,那我再说一遍;一个from上面有很多不一样的Twincontrol控件,比如Tlabel,TEdit,TCombox等等,我希望他们响应同一个OnmouseDwon事件MyMouseDown。问通过什么办法可以实现?
请你想清楚了再回答。
esu 2003-08-07
  • 打赏
  • 举报
回复
请教问题要虚心,我们回答可能是错的,但是大伙是热心的,有什么“可笑”
unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure btn(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.btn(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ShowMessage('ok');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
myMemo:TMemo;
begin
myMemo:=TMemo.Create(nil);
with myMemo do
begin
parent:=Form1;
left:=100;
top:=100;
onMouseDown:=btn;
end;
end;

end.
chaosbird 2003-08-07
  • 打赏
  • 举报
回复
to all:Twincontrol没有直接提出OnMouseDown事件,所以直接给TwinControl赋值OnmouseDown事件是根本不会触发的!我想ljmanage只是把现成的代码中事件的名字改了一下就认为可以了,事实上我肯定经过思考和实践才来问问题的,我想回答问题的不要抱着想当然的态度来回答问题,可笑还有不少人“想当然”以为是对的,却不会去试试

5,392

社区成员

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

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