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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2014, 08:48   #1
moon-guest
Пользователь
 
Аватар для moon-guest
 
Регистрация: 14.11.2010
Сообщений: 27
По умолчанию События в интерфейсе класса

Приветствую Вас товарищи программеры!!!
Давичи решил реализовать плагин для протокола. Так как плагин реализуется в библиотеке а доступ к нему производится через интерфейс то и возникает проблема.
Для получения ответа использую событие:
Код:
TOnData=procedure(AVal: ShortString) of Object;
......
private
   FOnData: TOnData;
public
   property OnData: TOnData read FOnData write FOnData;
......
Были предложения передавать сразу в параметрах конструктора.
На что я не согласен так как хотелось ещё реализовать событие обработки ошибок.

Так же имеется вариант реализации через Set и Get что не совсем верно.

Не могли бы подсказать как правильно передать событие через интерфейс для основной программы.
moon-guest вне форума Ответить с цитированием
Старый 16.04.2014, 08:53   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Свойство в секцию published если правильно понял
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.04.2014, 09:05   #3
moon-guest
Пользователь
 
Аватар для moon-guest
 
Регистрация: 14.11.2010
Сообщений: 27
По умолчанию

Не совсем так. Я получаю доступ к классу через интерфейс. И от сюда следует что ни о какой секции published интерфейс и не слыхивал.
moon-guest вне форума Ответить с цитированием
Старый 16.04.2014, 10:37   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
Я получаю доступ к классу через интерфейс
получить еще один интерфейс, в котором можно будет передать свой интерфейс с помощью которого класс будет сообщать о событиях предусмотренным полученным интерфейсом.

1. Я получаю Iform
2. получить еще IformExt
3. можно передать "свой" интрефейс IFormEvent
"свой" = реализация выполнена в классе который должен получать сообщения, но описание известно отправителю.


var f: IForm;
f:=... // Я получаю доступ к классу
(f as IformExt).Events:=self as IFormEvnet; //получить еще один интерфейс, в котором можно будет передать свой интерфейс

в том классе (от которого хотим получать сообщения)
Код:
type

IformExt =interface
  property events: IFormEvents;
  procedure SetEvents(values: IFormEvents);
end;

IFormEvents =interface
  procedure Data(sender: IInterface);
  procedure Error(sender: IInterface; error: string);
end;

TXData =class(..., Iform, IformExt)
Код:
events.Data(self);
events.Error(self, 'ошибка!!!');
Цитата:
получить еще один интерфейс, в котором можно будет передать свой интерфейс
или же в базовом интерфейсе (Iform) предусмотреть передачу интерфейса для сообщений.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.04.2014 в 10:42.
evg_m вне форума Ответить с цитированием
Старый 17.04.2014, 10:58   #5
moon-guest
Пользователь
 
Аватар для moon-guest
 
Регистрация: 14.11.2010
Сообщений: 27
По умолчанию

Слишком замудренно.
Я решил пойти по более простому пути и создал функцию присвоения Event'ов по типу:
Код:
......
procedure Events(Event: TTypeEvent; Value: TNotifyEvent); safecall;
....
единственное пришлось создать именованный список событий и при присвоении проверять:

Код:
type
   TTypeEvent=(peData, peError);
......
procedure TMyClass.Events(Event: TTypeEvent; Value: TNotifyEvent);
begin
  case Event of
    peData: FOnReceive :=value;
    peError: FOnError   :=value;
  end;
end;
......
moon-guest вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неудобства в интерфейсе Delphi - можно ли исправить? delphicoding Общие вопросы Delphi 1 08.10.2011 12:28
События в WPF. Обращение к компонентам формы из события Casper-SC Общие вопросы .NET 3 25.07.2010 19:03
Prolog:Определение родственных связей в графическом интерфейсе palochka Помощь студентам 0 01.05.2010 21:33
массивы в интерфейсе Cdevelop Общие вопросы C/C++ 6 23.03.2009 18:04
C++ в оконном интерфейсе Rembo Свободное общение 23 28.06.2008 18:17