所以我基于cxButton创建了一个自定义Button。我希望在单击此按钮时显示一个Popupmenu。但是由于某种原因,Popupmenu没有显示。 我什至没有出错,我也不知道为什么。
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。 但是Popup菜单从不弹出。我怎么了?
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;
答案 0 :(得分:4)
答案很简单-您忘记了将项目添加到弹出菜单中
{ after creating each item }
FPopup.Items.Add(Item);
如果您未绑定到TCxButton
,则可以使用标准VCL按钮,该按钮通过设置为bsSplitButton
的属性Style
和属性{{ 3}}。否则,您至少可以研究VCL的TCustomButton
源代码,以启发自己的实现。