自定义 DBGridEh 的 IndicatorTitle 表头菜单

环境:Delphi 2010,EhLib 5.2

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

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

 

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

EditActions->geaCopyEh = True

EditActions->geaSelectAllEh = True

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

 

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

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

1 procedure TForm2.FormCreate(Sender: TObject);
2 begin
3     DBGridEhCenter.IndicatorTitleMenus := 
4             [itmVisibleColumnsEh, itmCopy, itmSelectAll];
5 end;

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

 

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

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

效果如图所示:

 

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

 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;

效果如图:

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

posted on 2013-05-24 15:41  茅场晶彦  阅读(1021)  评论(0编辑  收藏  举报

导航