如何使用下拉菜单创建按钮?

6 delphi button popupmenu

有没有办法显示IE/Firefox后退按钮样式,下拉菜单按钮?

Jim*_*eth 10

我假设你的意思是一个按钮,点击时会下拉菜单.

您也可以手动编写单击按钮以下拉TPopupMenu.

示例:在表单上删除任何带有TClickEvent(可能是TButton)和TPopupMenu的内容.添加一些菜单项.然后添加以下OnClick事件处理程序:

procedure TForm86.Button1Click(Sender: TObject);
var
  button: TControl;
  lowerLeft: TPoint;
begin
  if Sender is TControl then
  begin
    button := TControl(Sender);
    lowerLeft := Point(button.Left, button.Top + Button.Height);
    lowerLeft := ClientToScreen(lowerLeft);
    PopupMenu1.Popup(lowerLeft.X, lowerLeft.Y);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

而且中提琴!就像魔术一样.如果您打算重用它,可以将它全部包装在组件中. 也许甚至可以在线销售.

注意:如果您想要延迟,则在另一个方法中提取该代码,然后设置一个计时器OnClick并转动OnMouseLeave的计时器.然后,如果计时器触发,您可以调用提取的方法.不知道如何在键盘上点击它.我不知道Firefox等是否也支持.


小智 8

Jim的答案很棒,但起初并不适合我.ClientToScreen使用Form86的方法,只有当按钮直接在窗体上时才能正确.它应该是调用按钮的ClientToScreen方法,如下所示:

procedure TForm86.Button1Click(Sender: TObject);
var
  button: TControl;
  lowerLeft: TPoint;
begin
  if Sender is TControl then
  begin
    button := TControl(Sender);
    lowerLeft := Point(0, button.Height);
    lowerLeft := button.ClientToScreen(lowerLeft);
    PopupMenu1.Popup(lowerLeft.X, lowerLeft.Y);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

无论按钮在哪里,这都有效.


Klu*_*uge 7

当然.在页面上放置一个工具栏.右键单击工具栏,添加一个按钮.将按钮的样式设置为tbsDropDown.在页面上放置一个PopupMenu.双击PopupMenu以定义菜单项.然后,返回到您创建的按钮并将其DropdownMenu属性设置为指向您刚刚创建的PopupMenu.