gpt4 book ai didi

delphi - 自定义按钮,OnClick 和 PopupMenu

转载 作者:行者123 更新时间:2023-12-02 01:49:20 24 4
gpt4 key购买 nike

所以我创建了一个基于 cxButton 的自定义按钮。我希望在单击此按钮时显示弹出菜单。但由于某种原因,弹出菜单没有显示。我什至没有收到错误,我不知道为什么。

type
TcxGridButton = class(TcxButton)
private
FGridView : TcxGridDBTableView;
FPopup : TPopupMenu;

procedure AutoSize(Sender : TObject);
procedure ClearFilter(Sender : TObject);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner : TComponent); override;

procedure Click; override;
published
property GridView : TcxGridDBTableView read FGridView write FGridView;
end;

这是我创建弹出菜单的部分

constructor TcxGridButton.Create(AOwner: TComponent);
var Item : TMenuItem;
P : TPoint;
begin
inherited;

Text:='Options';

FPopup := TPopupMenu.Create(Self);

Item := TMenuItem.Create(FPopup);
Item.Caption:='Nach Excel exportieren';

Item := TMenuItem.Create(FPopup);
Item.Caption:='Automatische Größenanpassung';
Item.OnClick:=AutoSize;

Item := TMenuItem.Create(FPopup);
Item.Caption:='Filter löschen';
Item.OnClick:=ClearFilter;
end;

现在,当我将此按钮放在表单上时,它会立即显示文本选项,因此构造函数似乎运行正常。

但是当我单击此按钮时,我得到 Click 、 Self.ToString 和 Done 。但弹出菜单永远不会弹出。我的错误是什么?

procedure TcxGridButton.Click;

begin
inherited; // call the inherited Click method.

ShowMessage('CLICK');

if not Assigned(FGridView) then Exit;

ShowMessage(Self.ToString);


FPopup.Popup(0,0);


ShowMessage('DONE');

end;

最佳答案

答案非常简单 - 您忘记将项目添加到弹出菜单中:

{ after creating each item }
FPopup.Items.Add(Item);

如果您未绑定(bind)到 TCxButton,您可以使用标准 VCL 按钮,该按钮提供您尝试通过属性 Style 实现的功能。设置为 bsSplitButton 和属性 DropDownMenu 。否则,您至少可以研究 VCL 的 TCustomButton 源代码,作为您自己的实现的灵感。

关于delphi - 自定义按钮,OnClick 和 PopupMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56882278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com