自定义 DBGridEh 的 IndicatorTitle 表头菜单

环境:Delphi 2010,EhLib 5.2

设置 DBGridEh 的属性:
IndicatorTitle->ShowDropDownSign = True
IndicatorTitle->TitleButton = True

这样即可显示表头的菜单,但是只有自定义可见列的功能。(PS.我使用的是已汉化的EhLib,所以默认菜单是中文)

自定义 DBGridEh 的 IndicatorTitle 表头菜单

 

为此,我们可以设置 DBGridEh 的属性:

EditActions->geaCopyEh = True

EditActions->geaSelectAllEh = True

这样就有了复制和全选的功能。

自定义 DBGridEh 的 IndicatorTitle 表头菜单

 

但是诸如剪切、粘贴、删除这些菜单项是不需要的,我们可以把它去掉。

在窗体创建事件中加入代码:

1 procedure TForm2.FormCreate(Sender: TObject);

2 begin

3     DBGridEhCenter.IndicatorTitleMenus := 

4             [itmVisibleColumnsEh, itmCopy, itmSelectAll];

5 end;

这样只会显示我们设定好的三个选项。

自定义 DBGridEh 的 IndicatorTitle 表头菜单

 

如果我们想添加自定义菜单项,可以在窗体拖入 PopupMenu 控件,然后设置 DBGridEh 属性:

IndicatorTitle->DropdownMenu = PopupMenu1 (你的控件名)

效果如图所示:

自定义 DBGridEh 的 IndicatorTitle 表头菜单

 

但是,我们想让它显示在第一项。添加代码:

 1 // 请自行为窗体添加成员 DBGridEhPreviewIndicatorMenuItem: TDBGridEhMenuItem; 这是要加入菜单的菜单项。

 2 

 3 

 4 procedure TForm2.FormCreate(Sender: TObject);

 5 begin

 6     DBGridEhCenter.IndicatorTitleMenus :=

 7         [itmVisibleColumnsEh, itmCopy, itmSelectAll];

 8     DBGridEhCenter.OnBuildIndicatorTitleMenu := BuildIndicatorTitleMenu;

 9 end;

10 

11 procedure TForm2.BuildIndicatorTitleMenu(Grid: TCustomDBGridEh; var PopupMenu: TPopupMenu);

12 begin

13     DBGridEhCenter.DefaultBuildIndicatorTitleMenu(Grid, PopupMenu);

14 

15     if DBGridEhPreviewIndicatorMenuItem = nil then

16         DBGridEhPreviewIndicatorMenuItem := TDBGridEhMenuItem.Create(Screen);

17     DBGridEhPreviewIndicatorMenuItem.Caption := '自定义菜单项';

18     DBGridEhPreviewIndicatorMenuItem.OnClick := MenuEditClick;

19     DBGridEhPreviewIndicatorMenuItem.Enabled := True;

20     DBGridEhPreviewIndicatorMenuItem.Grid := Grid;

21     PopupMenu.Items.Insert(0, DBGridEhPreviewIndicatorMenuItem);

22 end;

23 

24 procedure TForm2.MenuEditClick(Sender: TObject);

25 begin

26     ShowMessage('Hello'); // 所需执行的操作

27 end;

效果如图:

自定义 DBGridEh 的 IndicatorTitle 表头菜单

还可以对菜单进行分组,只要把 MenuItem 的 Caption 属性设置为 '-' 就可以了,这里不再截图。

你可能感兴趣的:(grid)