多个button的点击事件关联到同一个事件中,比如Button1Click procedure TForm1.Button1Click(Sender: TObject); begin PopupMenu1.PopupComponent := TComponent(Sender); PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y); end;aaa1为popmenu中的一项 procedure TForm1.aaa1Click(Sender: TObject); begin ShowMessage(PopupMenu1.PopupComponent.Name); end;
//下面代码演示了当窗体创建时,将Form1窗体上的全部Button控件的PopupMenu属性设置为PopupMenu1 procedure TForm1.FormCreate(Sender: TObject); var i:Integer; begin for i:=0 to ComponentCount-1 do begin if (Components[i] is TButton) then begin (Components[i] as TButton).PopupMenu:=PopupMenu1; end; end; end;
Button很多的话,不建议在每个Button的onClick事件中写。 建议遍历Button控件并赋给PopupMenu1; procedure TForm1.FormShow(Sender: TObject); var i : Integer; begin for i := 0 to panel1.ControlCount -1 do begin if panel1.Controls[i] is TButton then TButton(panel1.Controls[i]).PopupMenu := PopupMenu1; end; end;
PopupMenu1.PopupComponent := TComponent(Sender);意思是把触发事件Button1Click的对像Sender包装成TComponent,并赋值给PopupMenu1的弹出对像PopupComponent;procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin Button1.Left := Button1.Left-1; for i := 0 to ComponentCount - 1 do begin if TButton(Components[i]).Name = 'Button2' then TButton(Components[i]).Left := TButton(Components[i]).Left -1; end; end;
procedure TForm1.Button1Click(Sender: TObject); var i : Integer; begin Button1.Left := Button1.Left - 1; for i := 0 to ComponentCount - 1 do begin if Components[i] is TButton then//更正楼上代码的错误。 if TButton(Components[i]).Name = 'Button2' then TButton(Components[i]).Left := TButton(Components[i]).Left - 1; end; end;
只是需要让他自己移动就更容易了。 if self.PopupMenu1.PopupComponent is TButton then TButton(self.PopupMenu1.PopupComponent).Left:= TButton(self.PopupMenu1.PopupComponent).Left + 1;
多个button的点击事件关联到同一个事件中,比如Button1Click
procedure TForm1.Button1Click(Sender: TObject);
begin
PopupMenu1.PopupComponent := TComponent(Sender);
PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
end;aaa1为popmenu中的一项
procedure TForm1.aaa1Click(Sender: TObject);
begin
ShowMessage(PopupMenu1.PopupComponent.Name);
end;
//下面代码演示了当窗体创建时,将Form1窗体上的全部Button控件的PopupMenu属性设置为PopupMenu1
procedure TForm1.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=0 to ComponentCount-1 do
begin
if (Components[i] is TButton) then
begin
(Components[i] as TButton).PopupMenu:=PopupMenu1;
end;
end;
end;
建议遍历Button控件并赋给PopupMenu1;
procedure TForm1.FormShow(Sender: TObject);
var
i : Integer;
begin
for i := 0 to panel1.ControlCount -1 do
begin
if panel1.Controls[i] is TButton then
TButton(panel1.Controls[i]).PopupMenu := PopupMenu1;
end;
end;
我的意思是 比如popupmenu里的N11是让Button1向左移 procedure TForm1.N11Click(Sender: TObject);
begin
Button1.Left := Button1.Left-1;
end;怎么改popupmenu使得Button2也可以向左移动还有想请问下PopupMenu1.PopupComponent := TComponent(Sender);这句是什么意思,不大明白
var
i : Integer;
begin
Button1.Left := Button1.Left-1;
for i := 0 to ComponentCount - 1 do
begin
if TButton(Components[i]).Name = 'Button2' then
TButton(Components[i]).Left := TButton(Components[i]).Left -1;
end;
end;
var
i : Integer;
begin
Button1.Left := Button1.Left - 1;
for i := 0 to ComponentCount - 1 do
begin
if Components[i] is TButton then//更正楼上代码的错误。
if TButton(Components[i]).Name = 'Button2' then
TButton(Components[i]).Left := TButton(Components[i]).Left - 1;
end;
end;
所以我想用Tag是不是可以确定不管我点的是Button几都只让它自己移动
if self.PopupMenu1.PopupComponent is TButton then
TButton(self.PopupMenu1.PopupComponent).Left:=
TButton(self.PopupMenu1.PopupComponent).Left + 1;