Всплывающее меню 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
это удаляет метку символа ускорителя из заголовка меню.