弹出菜单的cxgrid弹出菜单粘贴值

时间:2014-03-11 04:34:02

标签: delphi tcxgrid quantumgrid

IN TMS字符串网格我曾经用它来将弹出菜单的标题粘贴到网格的单元格中:

var
  s:string;
begin
  s:=(Sender as TmenuItem).Caption;
  s:=stringReplace(s,'&','',[rfReplaceAll]);
  with AdvStringGrid1 do
    Cells[Col,Row]:=s;

我以前从未在cxGrid中使用过这个,所以我对此完全陌生。我已将cxGridpopUpMenu1链接到我的网格,添加了一个经典的PopUpMenu,因此它被cxGridpopUpMenu1使用,在弹出菜单中添加了一些项目,就是这样。弹出菜单在网格中右键单击确定,但是如何将menuitem的值粘贴到单元格中? +有没有办法将popopmenu分配给特定的列?

2 个答案:

答案 0 :(得分:0)

这可以通过组合两个事件处理程序来完成:

  • OnPopUp的{​​{1}}处理程序。
  • 所有弹出菜单项的TcxGridPopupMenu处理程序。

我们的想法是使用OnClick存储对项目(列)的引用并记录单击,而OnPopup会将值应用于单元格。

代码如下:

OnClick

正如@DavidHeffernan建议的那样,请注意使用//in private section of your form fItem: TcxCustomGridTableItem; fRec: TcxCustomGridRecord; procedure TForm1.cxGridPopupMenu1Popup(ASenderMenu: TComponent; AHitTest: TcxCustomGridHitTest; X, Y: Integer; var AllowPopup: Boolean); begin if AHitTest is TcxGridRecordCellHitTest then begin fItem := TcxGridRecordCellHitTest(AHitTest).Item; fRec := TcxGridRecordCellHitTest(AHitTest).GridRecord; end; end; procedure TForm1.MenuItem1Click(Sender: TObject); var s : string; begin s := (sender as tmenuItem).Caption; gridView.DataController.Values[frec.Index, fitem.Index] := StripHotKey(s); end; 从菜单标题中删除加速器字符标记。

答案 1 :(得分:0)

我这样做:

procedure TForm1.MenuItem1Click(Sender: TObject);
var
  s: string;
begin
  Assert(Sender is TMenuItem);
  s := StripHotKey(TMenuItem(Sender).Caption);
  cxGrid1TableView1.DataController.Edit;
  cxGrid1TableView1.Controller.FocusedColumn.EditValue := s;
end;