zoukankan      html  css  js  c++  java
  • cxgrid在内置右键菜单的后面增加菜单项

    在内置右键菜单的后面增加菜单项

    首先应在Form上加一个cxGridPopupMenu控件 以启用右键菜单
    UseBuildInPopupMenus设为True

    procedure TFormItemList.FormCreate(Sender: TObject);
    var
    AMenu: TComponent;
    FMenuItem, FSubMenuItem: TMenuItem;
    begin
    AMenu := nil;
    if cxGridPopupMenu.BuiltInPopupMenus.Count = 0 then
    Exit;
    AMenu := cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu; //第一个内置右键菜单(表头菜单)
    if Assigned(AMenu) and AMenu.InheritsFrom(TPopupMenu) then
    begin
    TPopupMenu(AMenu).AutoHotkeys := maManual; //手动热键

    //-------------------------
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Caption := '-';
    FMenuItem.Name := 'miLineForGroup';
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //展开所有组
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miExpandAllGroup';
    FMenuItem.Caption := '展开所有组(&X)';
    FMenuItem.OnClick := miExpandAllGroupClick;
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //收缩所有组
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miCollapseAllGroup';
    FMenuItem.Caption := '收缩所有组(&O)';
    FMenuItem.OnClick := miCollapseAllGroupClick;
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //-------------------------
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Caption := '-';
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //过滤面板
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miFilterPanel';
    FMenuItem.Caption := '过滤面板(&P)';
    //自动显示
    FSubMenuItem := TMenuItem.Create(Self);
    FSubMenuItem.Name := 'miFilterPanelAuto';
    FSubMenuItem.Caption := '自动(&A)';
    FSubMenuItem.RadioItem := True;
    FSubMenuItem.GroupIndex := 5; //指定同一组
    FSubMenuItem.Checked := True;
    FSubMenuItem.OnClick := miFilterPanelClick;
    FMenuItem.Add(FSubMenuItem); //加入二级子菜单
    //总是显示
    FSubMenuItem := TMenuItem.Create(Self);
    FSubMenuItem.Name := 'miFilterPanelAlways';
    FSubMenuItem.Caption := '总是显示(&W)';
    FSubMenuItem.RadioItem := True;
    FSubMenuItem.GroupIndex := 5;
    FSubMenuItem.OnClick := miFilterPanelClick;
    FMenuItem.Add(FSubMenuItem);
    //从不显示
    FSubMenuItem := TMenuItem.Create(Self);
    FSubMenuItem.Name := 'miFilterPanelNerver';
    FSubMenuItem.Caption := '从不显示(&N)';
    FSubMenuItem.RadioItem := True;
    FSubMenuItem.GroupIndex := 5;
    FSubMenuItem.OnClick := miFilterPanelClick;
    FMenuItem.Add(FSubMenuItem);
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //自定义过滤
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miCustomFilter';
    FMenuItem.Caption := '自定义过滤(&M)';
    FMenuItem.OnClick := miCustomFilterClick;
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //过滤管理器
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miFilterBuilder';
    TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 44); //添加图标图像
    FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1; //指定图标序号
    FMenuItem.Caption := '过滤管理器';
    FMenuItem.OnClick := Self.miFilterBuilderClick;
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //---------------------
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Caption := '-';
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //导出
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miExport';
    TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 37);
    FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1;
    FMenuItem.Caption := '导出(&E)';
    FMenuItem.OnClick := Self.miExportClick;
    TPopupMenu(AMenu).Items.Add(FMenuItem);

    //打印
    FMenuItem := TMenuItem.Create(Self);
    FMenuItem.Name := 'miPrint';
    FMenuItem.Caption := '打印(&P)';
    TPopupMenu(AMenu).Images.AddImage(FormMain.ImageListExtend, 14);
    FMenuItem.ImageIndex := TPopupMenu(AMenu).Images.Count - 1;
    FMenuItem.OnClick := Self.miPrintClick;
    TPopupMenu(AMenu).Items.Add(FMenuItem);
    end;
    end;

    procedure TFormItemList.miExportClick(Sender: TObject);
    var
    FileName, FileExt, msg: String;
    begin
    if Self.aqyQuery.IsEmpty then
    begin
    msg := '没有导出数据...';
    Application.MessageBox(PChar(msg), PChar(Application.Title),
    MB_OK or MB_IconWarning);
    Exit;
    end;

    Self.SaveDialogExport.Filter := 'Excel文件 (*.xls)|*.xls|XML文件 (*.xml)|*.xml'
    + '|文本文件 (*.txt)|*.txt|网页文件 (*.html)|*.html';
    Self.SaveDialogExport.Title := '导出为';

    if not Self.SaveDialogExport.Execute then
    Exit;

    FileName := Self.SaveDialogExport.FileName;
    FileExt := LowerCase(ExtractFileExt(FileName));
    if FileExt = '.xls' then
    ExportGrid4ToExcel(FileName, Self.cxGrid1)
    else if FileExt = '.xml' then
    ExportGrid4ToXML(FileName, Self.cxGrid1)
    else if FileExt = '.txt' then
    ExportGrid4ToText(FileName, Self.cxGrid1)
    else if FileExt = '.html' then
    ExportGrid4ToHTML(FileName, Self.cxGrid1)
    else
    begin
    msg := '不支持的导出文件类型...';
    Application.MessageBox(PChar(msg), PChar(Application.Title),
    MB_OK or MB_IconError);
    Exit;
    end;

    msg := '导出完成...';
    Application.MessageBox(PChar(msg), PChar(Application.Title),
    MB_OK or MB_IconInformation);
    end;

    procedure TFormItemList.miPrintClick(Sender: TObject);
    begin
    //打印
    Self.dxComponentPrinter.Preview(True, Self.dxComponentPrinterLink1);
    end;

    procedure TFormItemList.cxGridPopupMenuPopup(ASenderMenu: TComponent;
    AHitTest: TcxCustomGridHitTest; X, Y: Integer; var AllowPopup: Boolean);
    begin
    if GetHitTypeByHitCode(AHitTest.HitTestCode) = gvhtColumnHeader then //右击列标题时
    begin
    //if tvResult.DataController.Groups.GroupingItemCount > 0 then
    if tvResult.GroupedColumnCount > 0 then //有分组时显示
    begin
    TMenuItem(Self.FindComponent('miLineForGroup')).Visible := True;
    TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible := True;
    TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible := True;
    end
    else
    begin
    TMenuItem(Self.FindComponent('miLineForGroup')).Visible := False;
    TMenuItem(Self.FindComponent('miExpandAllGroup')).Visible := False;
    TMenuItem(Self.FindComponent('miCollapseAllGroup')).Visible := False;
    end;
    end;
    end;

    procedure TFormItemList.miFilterBuilderClick(Sender: TObject);
    begin
    //过滤管理器
    //弹出Filter Builder Dialog对话框
    tvResult.Filtering.RunCustomizeDialog;
    end;

    procedure TFormItemList.miCustomFilterClick(Sender: TObject);
    var
    AHitTest: TcxCustomGridHitTest;
    begin
    //自定义过滤
    //弹出Custom Filter Dialog对话框
    AHitTest := cxGridPopupMenu.HitTest;
    if GetHitTypeByHitCode(AHitTest.HitTestCode) = gvhtColumnHeader then //获得右击的列
    tvResult.Filtering.RunCustomizeDialog(TcxGridColumnHeaderHitTest(AHitTest).Column);
    end;

    procedure TFormItemList.miFilterPanelClick(Sender: TObject);
    var
    mi: TMenuItem;
    begin
    //隐藏/显示过滤面板
    mi := TMenuItem(Sender);
    mi.Checked := True;
    if mi.Name = 'miFilterPanelAlways' then
    tvResult.Filtering.Visible := fvAlways
    else if mi.Name = 'miFilterPanelNerver' then
    tvResult.Filtering.Visible := fvNever
    else
    tvResult.Filtering.Visible := fvNonEmpty;
    end;

    procedure TFormItemList.miExpandAllGroupClick(Sender: TObject);
    begin
    //展开所有组
    tvResult.DataController.Groups.FullExpand;
    end;

    procedure TFormItemList.miCollapseAllGroupClick(Sender: TObject);
    begin
    //收缩所有组
    tvResult.DataController.Groups.FullCollapse;
    end;

  • 相关阅读:
    轻量级Spring定时任务(Spring-task)
    Mysql语句优化建议
    python时间日期处理
    subprocess
    Tkinter初体验
    java基础
    java JVM
    NFV
    java加载properties文件的六种方法总结
    悲观锁和乐观锁的区别
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631221.html
Copyright © 2011-2022 走看看