大家拷过去运行一下
unit t;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
ReleaseCapture;
if (Sender as TButton).Caption='Button1' then
(Sender as TButton).Perform(wm_syscommand,$F012,0);
if (Sender as TButton).Caption='Button' then
(Sender as TButton).Perform(wm_syscommand,$F012,0);
if (Sender as TEdit).Text='Edit' then showmessage('edit');end;procedure TForm1.Button1Click(Sender: TObject);
var btn1,btn2:TButton;
edt:TEdit;
begin
with TButton.Create(self) do
begin
left:=30;
top:=50;
caption:='Button1';
parent:=self;
onMouseMove:=ButtonMouseMove;
end;
with TButton.Create(self) do
begin
left:=160;
top:=50;
caption:='Button';
parent:=self;
onMouseMove:=ButtonMouseMove;
end;
with TEdit.Create(self) do
begin
left:=365;
top:=120;
text:='Edit';
parent:=self;
onMouseMove:=ButtonMouseMove;
end;end;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ReleaseCapture;
Button1.Perform(wm_syscommand,$F012,0);
end;end.
大家拷过去运行一下,然后拖动新产生的控件
问题出来了:如果产生的控件类型一样,拖动没有问题(注释调 if (Sender as TEdit).Text='Edit' then showmessage('edit');)否则拖动edit就有错,为什么?
unit t;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure TForm1.ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
ReleaseCapture;
if (Sender as TButton).Caption='Button1' then
(Sender as TButton).Perform(wm_syscommand,$F012,0);
if (Sender as TButton).Caption='Button' then
(Sender as TButton).Perform(wm_syscommand,$F012,0);
if (Sender as TEdit).Text='Edit' then showmessage('edit');end;procedure TForm1.Button1Click(Sender: TObject);
var btn1,btn2:TButton;
edt:TEdit;
begin
with TButton.Create(self) do
begin
left:=30;
top:=50;
caption:='Button1';
parent:=self;
onMouseMove:=ButtonMouseMove;
end;
with TButton.Create(self) do
begin
left:=160;
top:=50;
caption:='Button';
parent:=self;
onMouseMove:=ButtonMouseMove;
end;
with TEdit.Create(self) do
begin
left:=365;
top:=120;
text:='Edit';
parent:=self;
onMouseMove:=ButtonMouseMove;
end;end;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ReleaseCapture;
Button1.Perform(wm_syscommand,$F012,0);
end;end.
大家拷过去运行一下,然后拖动新产生的控件
问题出来了:如果产生的控件类型一样,拖动没有问题(注释调 if (Sender as TEdit).Text='Edit' then showmessage('edit');)否则拖动edit就有错,为什么?
先判断Sender的类即可。
你可以自定义个消息处理过程
private
procedure MyMouseMove(sender:TObject);
然后处理sender
把ButtonMouseMove中的代码稍作修改即可
procedure TForm1.ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
ReleaseCapture;
if (Sender is TButton) then
begin
if (Sender as TButton).Caption='Button1' then
(Sender as TButton).Perform(wm_syscommand,$F012,0);
if (Sender as TButton).Caption='Button' then
(Sender as TButton).Perform(wm_syscommand,$F012,0);
end
else if (Sender Is TEdit) then
if (Sender as TEdit).Text='Edit' then showmessage('edit');end;