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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2013, 18:18   #1
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию Наследование от другого события. Возможно ли?

Здраствуйте!
Пишу я один класс, и там реализовал события(Events).
Например, есть такое событие:
Код:
type
TOnChange = procedure(param1: string) of object;

type
TMyClass = class
private
FOnChange: TOnChange;
published
property OnChange: TOnChange read fonchange write FOnChange;
end;
И хочу сделать еще 10 таких событий, в которых будет параметр param1, но кроме способа, как писать в каждом событии этот параметр, я не вижу.
Вопрос такой: возможно ли как-то унаследовать событие от другого события? Но добавить к новому событию новые параметры.
Delphi_ProGer вне форума Ответить с цитированием
Старый 09.04.2013, 18:39   #2
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Суть я думаю поймешь
Код:
type

  IMathHelper = interface
    {...}
  end;

  TMathHelper = class(TInterfacedObject,IMathHelper)
   private
     {...}
   end;
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 09.04.2013, 18:48   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А так, передавая в KindEvent некий тип события, один обработчик с анализом типа
Цитата:
type
TOnChange = procedure(param1: string; KindEvent: TKindEvent) of object;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2013, 18:56   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
type
TOnChange = procedure(param1: string) of object;

type

TMyClass = class
private
FOnChange, FonchnangeOne, FonChangeTwo: TOnChange;
published
property OnChange: TOnChange read fonchange write FOnChange;
property OnChangeOne: TOnchange read FonChnageOne write FonchangeOne;
property OnchnageTwo: TOnChange read FonChangeTwo write FonchangeTwo;end;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 09.04.2013, 18:58   #5
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А так, передавая в KindEvent некий тип события, один обработчик с анализом типа
Нет, не катит. Я OnChange для примера написал.
А конкретно щас опишу свою задачу:
Код:
  TOnGroupsGet = procedure(Succesfull: Boolean; Groups: array of tdpVKGroup; Count, GlobalCount: Word) of object;
  TOnGroupsGetById = procedure(Succesfull: Boolean; Groups: array of tdpVKGroup; Count: Word) of object;
  TOnGroupsIsMember = procedure(Succesfull: Boolean) of object;
Как видите, в каждого события есть параметр Succesfull. Вот меня интересует, можно ли как-то написать одно базовое событие с этим параметром, а потом унаследовать остальные, прибавляя к ним еще параметры(разумееться, при вызове события я буду вызывать примерно так: OnGroupsGet(True, GroupsArr, 150);
Суть такого подхода в том, что не нужно в каждом событии писать этот Succesfull.
Вот интересно, можно ли такое реализовать.
Delphi_ProGer вне форума Ответить с цитированием
Старый 09.04.2013, 19:28   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Интересный подход. С одной стороны параметр в процедуру передать, а с другой стороны его не должно быть в декларации процедуры. Не вижу способа это реализовать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.04.2013, 19:35   #7
Delphi_ProGer
Форумчанин
 
Регистрация: 30.10.2010
Сообщений: 524
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Интересный подход. С одной стороны параметр в процедуру передать, а с другой стороны его не должно быть в декларации процедуры. Не вижу способа это реализовать
А жаль...)

P.S.
Всем спасибо.
Delphi_ProGer вне форума Ответить с цитированием
Старый 09.04.2013, 19:47   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Параметр-объект и всё.
Код:
TEvent = class
Success: Boolean;
constructor Create(Asuccess: Boolean);
end;
T1stEvent = class(TEvent)
blah: integer;
constructor Create(Asuccess: Boolean; ablah: integer);
end;
T2ndEvent = class(TEvent)
blin: string;
constructor Create(Asuccess: Boolean; ablin: string);
end;

TEvtHandler = procedure(Evt: TEvent) of object;

Tmycoolstuff = class
Event: TEvent;
EvtHandler: TEvtHandler;
procedure Run();
end;
...
procedure Tmycoolstuff.Run();
begin
if assigned(Event) and Assigned(EvtHandler) then
  EvtHandler(Event);
end;
...
procedure tform1.onevt(Event: TEvent);
begin
if Event.Success then showmessage('Success');
if Event is T2ndEvent then
showmessage(T2ndEvent(Event).blin);
end;
procedure tform1.button1click(sender: tobject);
var
cs: TMycoolstuff;
begin
cs := TMycoolstuff.Create();
cs.Event := TEvent.Create(true);
cs.Evthandler := onevt;
cs.run();
cs.Event.Free();
cs.Event := t2ndEvent.Create(true, 'fun');
cs.run();
cs.Event.Free();
cs.Free();
end;
Набрано тут. Сам подобный подход использую иногда.

Последний раз редактировалось phomm; 09.04.2013 в 19:51.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование в С++ Theseus Общие вопросы C/C++ 10 21.07.2012 20:06
Наследование Funny Студенточка Общие вопросы C/C++ 1 08.04.2012 21:46
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Наследование notHaker Общие вопросы Delphi 5 24.05.2010 18:55
Наследование beregok Общие вопросы C/C++ 1 04.07.2009 22:39