Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 21.11.2010, 00:42   #1
zver777
Пользователь
 
Регистрация: 31.07.2009
Сообщений: 89
По умолчанию Назначить событие на 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 вне форума   Ответить с цитированием
Старый 21.11.2010, 05:29   #2
Баламут
Баламучу слегка...
СуперМодератор
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,584
По умолчанию

Это делается примерно так.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    procedure PopupMenu1Change(Sender: TObject; Source: TMenuItem;
      Rebuild: Boolean);
  private
     procedure ItemClick(Sender: TObject);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ItemClick(Sender: TObject);
begin
  ShowMessage('ПРЕВЕД!');
end;

procedure TForm1.PopupMenu1Change(Sender: TObject; Source: TMenuItem;
  Rebuild: Boolean);
begin
  Popupmenu1.Items[0].OnClick := ItemClick;
end;

end.
Баламут вне форума   Ответить с цитированием
Старый 21.11.2010, 18:39   #3
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
item.OnClick:=my.onclick(item);
И зачем там скобки?
Код:
item.OnClick:=my.onclick;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума   Ответить с цитированием
Ответ
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TreeView событие OnClick Alana Компоненты Delphi 2 18.11.2010 15:50
Как создать событие OnClick... zotox Помощь студентам 6 08.08.2009 21:24
Отключить событие OnClick у MenuItem с SubMenu Juni Компоненты Delphi 0 17.05.2009 12:17
Событие onclick в списке <select> Killer_djon JavaScript, Ajax 5 28.04.2009 17:20