delphi cxgrid + PopupMenu 创建智能过虑功能的菜单
先看效果图

设置cxgrid视图的OnMouseDown事件即可实现
procedure TfraModuleCPRK.GridView2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var HT: TcxCustomGridHitTest; begin //菜单仅在记录内显示 with TcxGridSite(Sender) do begin HT := ViewInfo.GetHitTest(X, Y); if (HT is TcxGridRecordHitTest) and (数据来源.Text = '近期入库') then begin //加载P1子菜单 if p1.Count = 0 then begin var fq := TFDQuery.Create(nil); fq.Connection := Dm.FDConnection1; fq.sql.Text := 'select ID,日期区间 FROM DateRange where 启用状态=-1 order by 权重 DESC,ID'; try fq.Open(); if fq.IsEmpty then begin UWPInfoMessage('提示', 'DateRange 未配置,请检查'); Exit; end; fq.First; while not fq.Eof do begin var SubMenuItem := TMenuItem.Create(p1); SubMenuItem.Caption := fq.FieldByName('日期区间').AsString; // 设置显示文本 SubMenuItem.Tag := fq.FieldByName('ID').AsInteger; // 存储 ID SubMenuItem.OnClick := P1MenuItemClick; // 设置点击事件 p1.Add(SubMenuItem);// 添加到 p1 菜单项 // 设置单选组 SubMenuItem.RadioItem := True; SubMenuItem.GroupIndex := 1; // 同一组的索引相同 fq.Next; end; finally fq.free; end; end; // 确保有焦点行和焦点列 if (GridView2.Controller.FocusedRowIndex >= 0) and (GridView2.Controller.FocusedColumn <> nil) then begin var ARowIndex := GridView2.Controller.FocusedRecordIndex; // 焦点行索引 var AColIndex := GridView2.Controller.FocusedColumn.Index; // 焦点列索引 // 获取单元格的值 var CellValue := VarToStr(GridView2.DataController.GetValue(ARowIndex, AColIndex)); p2.Caption := '等于 ' + CellValue; p3.Caption := '不等于 ' + CellValue; GridView.PopupMenu := PopupMenu2; end else GridView.PopupMenu := nil; end; end; end;
菜单的点击事件在这里:

浙公网安备 33010602011771号