Topic: Одинаковые меню на двух таблицах одной формы

На одной форме есть две таблицы.
Создаю одинаковые меню:

var
   MyItem_1_On_Frm_Project: TMenuItem;
   MyItem_2_On_Frm_Project: TMenuItem;
begin
    MyItem_1_On_Frm_Project := TMenuItem.Create (Frm_Project);
    MyItem_1_On_Frm_Project.Caption := 'Справка по товару';
    MyItem_1_On_Frm_Project.OnClick := @ShowProductInfo;  // показать справку
    MyItem_2_On_Frm_Project := TMenuItem.Create (Frm_Project);
    MyItem_2_On_Frm_Project.Caption := '-';
    Frm_Project.TableGrid_1.dbPopupMenu.Items.Insert(0, MyItem_1_On_Frm_Project);
    Frm_Project.TableGrid_1.dbPopupMenu.Items.Insert(1, MyItem_2_On_Frm_Project);
    Frm_Project.TableGrid_2.dbPopupMenu.Items.Insert(0, MyItem_1_On_Frm_Project);
    Frm_Project.TableGrid_2.dbPopupMenu.Items.Insert(1, MyItem_2_On_Frm_Project);
end;
//
Но такая конструкция ругается: "Menu inserted twice." и меню создается только на TableGrid_1.

В чем проблема?

2 (edited by k245 2019-03-21 09:29:10)

Re: Одинаковые меню на двух таблицах одной формы

Нельзя один и тот же экземпляр объекта TMenuItem добавить в меню дважды  (все равно в какое - в одно или разные) Нужно для каждого пункта создавать отдельный экземпляр, в вашем случае - с одинаковым содержимым.

Визуальное программирование: блог и телеграм-канал.

Re: Одинаковые меню на двух таблицах одной формы

А как это сделать?

4 (edited by k245 2019-03-21 10:09:47)

Re: Одинаковые меню на двух таблицах одной формы

Проще всего методом В.У.Копипаста:

var 
   MyItem_1_On_Frm_Project: TMenuItem;
   MyItem_2_On_Frm_Project: TMenuItem;
begin
    MyItem_1_On_Frm_Project := TMenuItem.Create (Frm_Project);
    MyItem_1_On_Frm_Project.Caption := 'Справка по товару';
    MyItem_1_On_Frm_Project.OnClick := @ShowProductInfo;  // показать справку
    MyItem_2_On_Frm_Project := TMenuItem.Create (Frm_Project);
    MyItem_2_On_Frm_Project.Caption := '-';

    Frm_Project.TableGrid_1.dbPopupMenu.Items.Insert(0, MyItem_1_On_Frm_Project);
    Frm_Project.TableGrid_1.dbPopupMenu.Items.Insert(1, MyItem_2_On_Frm_Project);

    MyItem_1_On_Frm_Project := TMenuItem.Create (Frm_Project);
    MyItem_1_On_Frm_Project.Caption := 'Справка по товару';
    MyItem_1_On_Frm_Project.OnClick := @ShowProductInfo;  // показать справку
    MyItem_2_On_Frm_Project := TMenuItem.Create (Frm_Project);
    MyItem_2_On_Frm_Project.Caption := '-';

    Frm_Project.TableGrid_2.dbPopupMenu.Items.Insert(0, MyItem_1_On_Frm_Project);
    Frm_Project.TableGrid_2.dbPopupMenu.Items.Insert(1, MyItem_2_On_Frm_Project);
end;

Но правильней оформить создание пунктов меню в процедуру....

Визуальное программирование: блог и телеграм-канал.

Re: Одинаковые меню на двух таблицах одной формы

Спасибо!