Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2016, 18:58
Foma Foma вне форума
Прохожий
 
Регистрация: 14.10.2016
Сообщения: 6
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию Не работает функция

Здравствуйте! Я пытаюсь сделать 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  
Старый 14.10.2016, 20:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Скорее всего ты где-то передаешь параметр не того типа. Соответсвенно, компилятор просто не может найти подходящий вариант функции.
Ответить с цитированием
  #3  
Старый 15.10.2016, 10:23
Foma Foma вне форума
Прохожий
 
Регистрация: 14.10.2016
Сообщения: 6
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Imikle, спасибо за ответ. Только я и сам понимаю, что тип параметров должен совпадать, но не могу понять, какой из них.
Const ACaption: WideString заключается в одинарные кавычки,
напр. 'Пункт 1'
AShortCut: TShortCut значение типа Word у меня нет клавиш быстрого доступа, поэтому равно 0;
AChecked, AEnabled: Boolean значение или True или False;
AOnClick: TNotifyEvent = nil пока функция, отзывающаяся на клик не определена
hCtx: THelpContext = 0;
Const AName: строка = ''.
Может, ошибка где-то в синтаксисе, но я найти не могу, примеров нет ни в книгах, ни в Интернете. Ещё раз спасибо за ответ.
Ответить с цитированием
  #4  
Старый 15.10.2016, 14:24
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Приводится лишь описание функции, что лежит в DesignMenus.pas, показали бы кусок с вызовом из вашего проекта
Ответить с цитированием
  #5  
Старый 16.10.2016, 09:57
Foma Foma вне форума
Прохожий
 
Регистрация: 14.10.2016
Сообщения: 6
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию Вызов функции

Здравствуйте, 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  
Старый 16.10.2016, 17:45
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А ведь наверное и не должна она здесь работать, поскольку AddItem это "перекрытая" не публичная функция, ею среда пользуется, а для разработчика доступны лишь
Цитата:
ExecuteVerb(Index): Выполняется, когда был выбран пункт номер Index из контекстного меню. Считается, что Редактор Компонент знает, как проинтерпретировать это значение.

GetVerb(Index): Редактор Компонент должен вернуть в этом методе строку, которая будет показана в виде пункта контекстного меню. Можно использовать обычные для пунктов меню символы, например &.

GetVerbCount: Возвращает число, которое определяет на какие значения будут отвечать методы GetVerb и ExecuteVerb. Например, если это число равно 3, то в меню будет добавлено три пункта со значениями Index от 0 до 2.
не делал никогда подобного, поэтому-то и одни догадки
Ответить с цитированием
  #7  
Старый 17.10.2016, 12:36
Foma Foma вне форума
Прохожий
 
Регистрация: 14.10.2016
Сообщения: 6
Версия Delphi: Delphi 2009
Репутация: 10
По умолчанию

Она работает, например, AItem.AddLine(string); сразу на третьей строке появляется чёрный треугольник, который сообщает, что этот пункт меню имеет подпункты (подпункт). Но именно AItem.AddItem не работает. А какой-то способ создания подменю есть, Дельфи же создаёт его.
Ответить с цитированием
  #8  
Старый 17.10.2016, 15:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Очхорошо, что она работает, но вот почему-то в редакторе компонентов из пакета RX для добавления пунктов меню используется не она, а примитивная AddObject, что даёт повод задуматься
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:46.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter