想用popupmenu关联Button控制它的左右移动。
    
    因为Button有多个,所以想请教如何操作popupmenu可以关联到所有的Button

解决方案 »

  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;
      

  2.   


    //下面代码演示了当窗体创建时,将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;
      

  3.   

    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;
      

  4.   

    又没讲清楚 多个Button的事件关联到一起没问题 
    我的意思是 比如popupmenu里的N11是让Button1向左移 procedure TForm1.N11Click(Sender: TObject);
    begin
      Button1.Left := Button1.Left-1;
    end;怎么改popupmenu使得Button2也可以向左移动还有想请问下PopupMenu1.PopupComponent := TComponent(Sender);这句是什么意思,不大明白
      

  5.   

    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;
      

  6.   

    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;
      

  7.   

    感谢LS热心的帮助,但是这一句if TButton(Components[i]).Name = 'Button2' then还是没有通用性 我Button放了20+个,这样写命都送的了
    所以我想用Tag是不是可以确定不管我点的是Button几都只让它自己移动
      

  8.   

    只是需要让他自己移动就更容易了。
    if self.PopupMenu1.PopupComponent is TButton then
        TButton(self.PopupMenu1.PopupComponent).Left:=
          TButton(self.PopupMenu1.PopupComponent).Left + 1;