如要在一个Form上有一个Button,现在想在单击按纽时弹出PopupMenu,我的意思是想模拟一个Windows的开始菜单。请问如何实现?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var cursorPos:TPoint;
    begin
      GetCursorPos(cursorPos);
      PopupMenu1.Popup(cursorPos.X, cursorPos.Y);
    end;
      

  2.   

    应该是这样:在单击时用cursorPos.X, cursorPos.Y的位置来Popup不理想,因为我想在单击时菜单时X应该在Button的左边,而Y应该在Button的上面吧,我现在是X,Y的位置搞不好。
      

  3.   

    还有一个问题:在单击ProgressBar时,我想让ProgressBar的Position就是点那个位置怎么实现?
      

  4.   

    //别老想鼠标,想想键盘也可以牙~~~
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, 0);
      keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
    end;
      

  5.   

    我是想让我的PopupMenu弹出来,不是win的开始菜单!!!!
      

  6.   

    onmouseup中检测鼠标位置,然后判断x的值与宽度进行对比获取%,然后检测progressbar的最大和最小值得到一个长度,然后*%后得到一个数值,然后与最小值相当就得到当前位置了。
    弹出自己的popupmenu直接用popupmenu.popup(..)方法
      

  7.   

    procedure Tfrmmain.ProgressBar1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      这里体怎么写啊?
    end;
      

  8.   

    //参考如下代码~~
    procedure TForm1.Button1Click(Sender: TObject);
    var
      vPoint: TPoint;
    begin
      vPoint := Button1.Parent.ClientToScreen(Button1.BoundsRect.TopLeft);
      vPoint.Y := vPoint.Y - PopupMenu1.Items.Count * 18 - 6 - 1;
      PopupMenu1.Popup(vPoint.X, vPoint.Y);
    end;
      

  9.   

    procedure Tfrmmain.ProgressBar1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      这里体怎么写啊?
      //大概这样吧
      with progressbar1 do
      begin
       position := (max-min)*(x/clientwidth)+min;
      end;
    end;
      

  10.   

    procedure TForm1.ProgressBar1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      with progressbar1 do
      begin
       position := round((max-min)*x/clientwidth)+min;
      end;
    end;
      

  11.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      P : Tpoint;
    begin
      P.X := 0;
      P.Y := Button1.Height;
      P := Button1.ClientToScreen(p);
      PopupMenu1.Popup(P.X,P.Y);
      //上面的语句是在Button的左下角弹出,此处还需要判断P点的位置是否处于屏幕的下部,以至于要向上弹出。然后改变一下P的参数
      P.X := 0;
      P.Y := 0;
      P := Button1.ClientToScreen(p);
      PopupMenu1.Popup(P.X,P.Y);
     //将在左上角弹出
     
    end;
      

  12.   

    OK了,谢谢 hhzh426(春之风) zswangII(伴水清清)(一贴不灌,何以灌天下?) 二位!!!!