|
|
Регистрация | << Правила форума >> | 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, что даёт повод задуматься
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |