Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2010, 23: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, 04:29   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Это делается примерно так.
Код:
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, 17: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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TreeView событие OnClick Alana Компоненты Delphi 2 18.11.2010 14: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