![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте! Я пытаюсь сделать ComponentEditor, в меню которого хочу создать подменю. Для этого согласно Help Delphi 7 и Delphi 2009 служит функция:
Код:
function AddItem (Const ACaption: WideString; AShortCut: TShortCut; AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent = nil; hCtx: THelpContext = 0; Const AName: строка = ''): IMenuItem; overload; то есть AItem.AddItem(... и т.д. Однако эта функция не работает, вылетает ошибка; [DCC Error] StrGridEditor.pas(105): E2250 There is no overloaded version of 'AddItem' that can be called with these arguments. Может, кто-то знает, как можно создать подменю? Последний раз редактировалось Admin, 14.10.2016 в 21:00. |
|
#2
|
|||
|
|||
|
Скорее всего ты где-то передаешь параметр не того типа. Соответсвенно, компилятор просто не может найти подходящий вариант функции.
|
|
#3
|
|||
|
|||
|
Imikle, спасибо за ответ. Только я и сам понимаю, что тип параметров должен совпадать, но не могу понять, какой из них.
Const ACaption: WideString заключается в одинарные кавычки, напр. 'Пункт 1' AShortCut: TShortCut значение типа Word у меня нет клавиш быстрого доступа, поэтому равно 0; AChecked, AEnabled: Boolean значение или True или False; AOnClick: TNotifyEvent = nil пока функция, отзывающаяся на клик не определена hCtx: THelpContext = 0; Const AName: строка = ''. Может, ошибка где-то в синтаксисе, но я найти не могу, примеров нет ни в книгах, ни в Интернете. Ещё раз спасибо за ответ. |
|
#4
|
||||
|
||||
|
Приводится лишь описание функции, что лежит в DesignMenus.pas, показали бы кусок с вызовом из вашего проекта
|
|
#5
|
|||
|
|||
|
Здравствуйте, Alegun! Вот образец моего вызова этой злосчастной функции:
Код:
procedure TMyComponentEditor.PrepareItem(Index: Integer; const AItem: IMenuItem);
begin
case Index of
3: begin //в пункт 3 основного меню хочу добавить подменю
из 3-х нижеследующих пунктов
AItem.AddItem('Center', 0, false, true, nil, 0, ''); //мой вызов функции
AItem.AddItem('Left', 0, false, true, nil, 0, '');
AItem.AddItem('Right', 0, false, true, nil, 0, '');
{А это я нашёл в Интернете
/ / Добавить подменю
Функция AddItem (Const ACaption: WideString; AShortCut: TShortCut;
AChecked, AEnabled: Boolean; AOnClick: TNotifyEvent = ноль;
hCtx: THelpContext = 0; Const AName: строка = ''): IMenuItem; перегрузки;
Функция AddItem (AAction: TBasicAction;
Const AName: строка = ''): IMenuItem; перегрузки;
/ / Добавить разделитель меню
Функция AddLine (Const AName: строка = ''): IMenuItem;
/ / Установить пункт меню Проверено
Свойство Checked: Boolean чтения GetChecked написать SetChecked;
/ / Установите пункт меню Включено
Свойство Enabled: Boolean чтения GetEnabled записи SetEnabled;
/ / Установить пункт меню Visible
свойство Visible: Boolean чтения GetVisible SetVisible записи;
}
end;
end;
Designer.Modified;
end; |
|
#6
|
||||
|
||||
|
А ведь наверное и не должна она здесь работать, поскольку AddItem это "перекрытая" не публичная функция, ею среда пользуется, а для разработчика доступны лишь
Цитата:
|
|
#7
|
|||
|
|||
|
Она работает, например, AItem.AddLine(string); сразу на третьей строке появляется чёрный треугольник, который сообщает, что этот пункт меню имеет подпункты (подпункт). Но именно AItem.AddItem не работает. А какой-то способ создания подменю есть, Дельфи же создаёт его.
|
|
#8
|
||||
|
||||
|
Очхорошо, что она работает, но вот почему-то в редакторе компонентов из пакета RX для добавления пунктов меню используется не она, а примитивная AddObject, что даёт повод задуматься
|