我现在动态生成了一个BUTTON,现在想点击这个BUTTON弹出一个动态窗体(form),form的位置在按钮的上方或者下方(根据按钮的位置具体定是在它的下方还是上方,例如是在BUTTON的上方的话,那么form的下边框和BUTTON的上边框重合),BUTTON在form的中间    本人急用,在线等用摆脱各位大侠不吝赐教。

解决方案 »

  1.   

    是否类似于弹出菜单一样
    var P : TPoint; GetCursorPos(P);当然你要取button的top和left来决定
    form的top和letf值就行了 
      

  2.   

    具体点啊,我点击按钮时怎么获取它的top和left,这个是关键
      

  3.   

    首先获得按钮在整个屏幕的坐标,方法
      var   
          Pos1,pos2:TPoint;   
      begin   
          Pos1.X   :=   Self.Button1.Left;   
          Pos1.Y   :=   Self.Button1.Top;   
          pos2   :=   ClientToScreen(Pos1);   
      end;再设置好form的TOP和LEFT.
    弹出到按钮上面:
      form.left := pos2.x;
      form.top := pos2.y - form.Height;弹出到按钮下面:
      form.left := pos2.x;
      form.top := pos2.y + Self.Button1.Height;
      

  4.   

    我这个按钮是动态生成的,不是拖的控件
    比如说我在连续生成了几行的BUTTON
    现在点了中间那一个,怎么获得啊
      

  5.   

    button的click事件
    procedure form.buttonclick(sender: Tobject);
      var   
          Pos1,pos2:TPoint;   
      begin   
          Pos1.X   :=   TButton(sender).Left;   
          Pos1.Y   :=   TButton(sender).Top;   
          pos2   :=   ClientToScreen(Pos1);   
      end;
      

  6.   

    将弹出窗体写在单击事件ShowClick,
    动态创建的Button的单击事件都指到ShowClick函数.将上面
          Pos1.X   :=   Self.Button1.Left;   
          Pos1.Y   :=   Self.Button1.Top;   
          pos2   :=   ClientToScreen(Pos1);  
    改成
          Pos1.X   :=   TButton1(Sender).Left;   
          Pos1.Y   :=   TButton1(Sender).Top;   
          pos2   :=   ClientToScreen(Pos1);
      

  7.   

    就算是你动态生成的也可以得到单击的是哪一个button啊self.ActiveControl.Name;