Всплывающее меню cxgrid вставляет значение popupmenuitem

В строковой сетке 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, добавил некоторые элементы во всплывающем меню и все. всплывающее меню срабатывает при щелчке правой кнопкой мыши в сетке, но как вставить значение элемента меню в ячейку? + Есть ли способ назначить попопмену на определенный столбец?

2 ответа

Решение

Я бы сделал это так:

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;

Это можно сделать, комбинируя два обработчика событий:

  • OnPopUp обработчик вашего TcxGridPopupMenu,
  • OnClick обработчик для всех ваших пунктов всплывающего меню.

Идея состоит в том, чтобы использовать OnPopup сохранить ссылку на элемент (столбец) и запись, по которой OnClick будет применять значение к ячейке.

Код выглядит следующим образом:

//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;

Как предложил @DavidHeffernan, обратите внимание на использование StripHotKey это удаляет метку символа ускорителя из заголовка меню.

Другие вопросы по тегам