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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.02.2009, 23:04   #1
CyberJohn
 
Регистрация: 03.02.2009
Сообщений: 6
По умолчанию Переопределение события OnClick в динамическом объекте-компоненте

У меня есть свой класс TMyImage = class(TImage),
В событии FormCreate главной формы создаю в цикле несколько объектов своего класса и отображаю их на форме. КАК переопределить событие OnClick в моем классе,чтобы делать определенные действия при нажатии на каждый TMyImage ??
CyberJohn вне форума
Старый 03.02.2009, 23:08   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

В OnClick проверять от какого компонента поступило сообщение и в зависимости от этого выполнять действия. Это?
Или тебе надо это:
Код:
with TMyImage.Create(self) do
begin
  ...
  OnClick := MyClick;
end;
_Engine_ вне форума
Старый 03.02.2009, 23:11   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Я бы сделал примерно так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyImage1:=TMyImage.Create(self);
  MyImage1.Top:=100;
  MyImage1.Left:=100;
  MyImage1.Width:=121;
  MyImage1.Parent:=self;
  MyImage1.OnClick:= //а тут пишем имя процедуры-обработчика
end;

Последний раз редактировалось mihali4; 03.02.2009 в 23:20. Причина: Единичку в имени забыл :)
mihali4 вне форума
Старый 04.02.2009, 13:00   #4
CyberJohn
 
Регистрация: 03.02.2009
Сообщений: 6
По умолчанию

Зачет вам кодеры!!!!!!! все пашет норм!!!!!!!!!! только помогите разобраться! мне нужна своя процедура обработчег в моем классе! там какой то свой тип должен идти для OnClick чтобы так лихо присваивать свойство! а пока сделал следующим образом:
- поместил на форму TImage из палитры
- Определил для нее обработчег нажатия мыши
- И присвоил динамически своим объектам этот обработчег
- при нажатии на него showmessage(IntToStr(TMyImage(sende r).num));
CyberJohn вне форума
Старый 04.02.2009, 17:23   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
мне нужна своя процедура-обработчик в моем классе
Вы все сделали верно - это самый простой путь.
Кто вам теперь мешает переименовать ее в
Код:
procedure TForm1.MyImage1Click(Sender: TObject);
begin
...
end;
У вас же не компонент, а класс - придется прописывать вручную каждый обработчик.

Последний раз редактировалось mihali4; 06.01.2010 в 16:17.
mihali4 вне форума
Старый 27.05.2009, 21:31   #6
Qweety
Новичок
Джуниор
 
Регистрация: 27.05.2009
Сообщений: 2
По умолчанию

делаю,вроде, всё так как здесь описано, но не получается, выводится ошибка при компилировании. Может чтото упустил из виду.
Надо создать динамически кнопки с одинаковым обработчиком события. Код написан в такой последовательности:
Код:
var
  btns : TButton;
..........
procedure TForm1.FormCreate(Sender: TObject);
begin
 btns:=TButton.Create(Form1);
 btns.Parent:=Form1;
 //-----------------
 btns.OnClick:=newonclick;//ошибка 
end;
........
procedure TForm1.newonclick(Sender: TObject);//ошибка
var s:string;
begin
  s:=inttostr(btns.tag);
  //-------------
end;
Собственно ошибка (одинаковая в обоих случаях): undeclared identifier 'newonclick'.

Последний раз редактировалось Stilet; 28.05.2009 в 11:35.
Qweety вне форума
Старый 27.05.2009, 21:48   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы в разделе interface описали её?
то есть надо еще это!
Код:
type
  TForm1 = class(TForm)
    procedure newonclick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 27.05.2009, 22:15   #8
Qweety
Новичок
Джуниор
 
Регистрация: 27.05.2009
Сообщений: 2
По умолчанию

вопрос как рукой сняло))
спасибо.
Внимательней надо быть...


Возник еще вопрос.
Почему когда одна переменная типа Кнопка, создается динамически много раз в цикле
и её свойствам Caption и Tag присваивается номер итерации,
то в итоге Caption для всех кнопок разный, а вот Tag один и тот же и равен последней итерации?

Последний раз редактировалось Qweety; 27.05.2009 в 22:21.
Qweety вне форума
Старый 06.01.2010, 15:56   #9
heart
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 64
По умолчанию

раз уж на то пошло, у самого возникла такая проблема и выше приведенный код не работал:

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 btns:=TButton.Create(Form1);
 btns.Parent:=Form1;
 //-----------------
 btns.OnClick:=Form1.newonclick;//ошибка 
end;
Вот так правильнее.
heart вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переопределение конструктора формы daunito Общие вопросы Delphi 5 23.11.2008 01:58
Переопределение реакции на события ByWatt Общие вопросы Delphi 1 20.12.2007 17:22
Переопределение операций toeman Общие вопросы C/C++ 2 20.11.2007 11:21
События в динамически созданном компоненте Biowulf86 Общие вопросы Delphi 2 17.09.2007 12:44
Количество элементов в динамическом массиве lytkin Общие вопросы Delphi 8 21.02.2007 14:50