Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 752

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Назначить событие на OnClick для TMenuItem

Создаю так:
Код:

var
item:TMenuItem;
begin
  item:=TMenuItem.Create(Form1);
  item.Caption:='Привет';
  item.OnClick:=процедура;
На подчёркнутой строке возникает ошибка. Нашёл, что надо присваивать не процедуру, а процедуру класса.

Сделал класс:
Код:
type
 myclass = class
 public
   procedure onclick(Sender: TObject);
 end;
В нём процедура
Код:
procedure myclass.onclick(Sender: TObject);
begin
  Memo1.Lines.Add((Sender as TMenuItem).Caption);
end;
Создаю экземпляр класса и теперь так назначаю OnClick:
Код:
var
item:TMenuItem;
begin
  item:=TMenuItem.Create(Form1);
  item.OnClick:=my.onclick(item);
  item.Caption:='Привет';
Выдаёт Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter' на подчёркнутую строку.

Подскажите какой параметр надо передавать или может как по-другому для динамически созданного TMenuiIem создать событие OnClick, чтобы можно было его в процедуре распознать(какой именно вызвал).

zver777 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: zver777 (статус: Посетитель)
Вопрос отправлен: 20 ноября 2010, 23:53
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: DNK

Здравствуйте, zver777!
Нужно просто указать процедуру.

item.OnClick:=my.onclick;
Смысл в том, что мы передаем TMenuItem указатель на процедуру. Вызов же этой процедуры с нужными параметрами производится самим компонентом. Вообще советую почитать про процедурные типы и как ими пользоваться.

Ответ отправил: DNK (статус: Студент)
Время отправки: 21 ноября 2010, 00:08
Оценка за ответ: 5

Комментарий к оценке: Чётко и ясно

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 21 ноября 2010, 13:38; участников в обсуждении: 1.
Amidamaru

Amidamaru (статус: 4-ый класс), 21 ноября 2010, 13:38 [#1]:

Зачем создавать отдельный класс, если эту процедуру можно поместить в раздел public или private формы?
PS не забываем про Ctrl+Shift+C ;)
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.03 сек.