自定义 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 属性设置为 '-' 就可以了,这里不再截图。