|
Вопрос # 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 (статус: Посетитель)
Вопрос отправлен: 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 (статус: 4-ый класс), 21 ноября 2010, 13:38 [#1]:
Зачем создавать отдельный класс, если эту процедуру можно поместить в раздел public или private формы?
PS не забываем про Ctrl+Shift+C
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|