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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 21.11.2010, 00:42   #1
zver777
Форумчанин
 
Регистрация: 31.07.2009
Сообщений: 89
Репутация: 25
По умолчанию Назначить событие на 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,566
Репутация: 1092
По умолчанию

Это делается примерно так.
Код:
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
Адрес: Россия-Матушка, ул.«Эльфов 80-го уровня», спросить "сáмого Эльфа"...
Сообщений: 2,067
Репутация: 440
По умолчанию

Цитата:
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 вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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


17:01.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru