加一个全局变量
 p:boolean;
在FormCreate中p:=False;
在Button的OnClick事件中
  p:=not p;
  if not P then
    PopupMenu1.Popup(x,y)

解决方案 »

  1.   

    TO:心比天高,手比脚笨
    Button的DOWN本来就没问题,
    关键是这个BUTTON什么时候可以UP!
    我用的是TSpeedButton!
      

  2.   

    你总看到点“开始”的时候弹出一个菜单,而“开始”按钮在鼠标放开时也是处于DOWN状态的!
    当这个菜单消失的时候,“开始”按钮又弹了上来,即处于UP状态了!
      

  3.   

    用的是ToolBar吗?
    ToolButton有一个DropDownMenu属性
      

  4.   

    我用的是TSpeedButton!
    要我说几次呢?你真的是“心比天高,手比脚笨”!
      

  5.   

    我不太懂。我猜测可以在弹出菜单之前获得菜单即将遮挡哪些窗口,然后在这些窗口发生Paint事件时(也就是说菜单消失了)将按钮弹起。
      

  6.   

    放一个TApplicationEvent控件
    在其OnMessage事件中
    判断一下消息的类型是KeyDown,MouseDown就向下执行
    如果你的TSpeedButton已经Down了就让它起来
    还有什么疑问吗?
      

  7.   

    procedure TFMain.SpeedBtnClick(Sender: TObject);
    var
      C,W : TPoint;
    begin
      W.x := FSpeedBtn.Left;
      W.y := FSpeedBtn.Top;
      C := ClientToScreen(W);
      PopMenu1.Popup(C.x,C.y);
      FSpeedBtn.Down := False;
    end;
      

  8.   

    FSpeedBtn.AllowAllUp := True;
    FSpeedBtn.GroupIndex :=1;//不为零就可以了
      

  9.   

    哪里?FSpeedBtn.Down := True;