Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.24;
Скачать: CL | DM;

Вниз

Разная процедура для каждой формы.. как?   Найти похожие ветки 

 
ply ©   (2009-02-05 04:56) [0]

В датамодуле лежит компонент который принимает данные с COM-порта.
Нужно чтобы для каждой формы процедура обработки получаемых данных была своя (со своим кодом и с возможным использованием контролов этой формы).
Как это реализовать? Или придется на каждую форму кидать по такому компоненту?


 
Медвежонок Пятачок ©   (2009-02-05 09:05) [1]

Или придется на каждую форму кидать по такому компоненту?

типа кто первым открыл порт, - того и тапки?


 
clickmaker ©   (2009-02-05 10:36) [2]

> Как это реализовать?

реализовать событие типа OnDataReceived и список подписчиков (форм в данном случае) на него


 
ЮЮ ©   (2009-02-05 11:34) [3]

Насколько понял я, человек хочет иметь форму с одинаковым набором контролов и компонентов на ней, но с разным кодом реализации.

Ибо приложение хочет многооконное. А плодить одинаковае по виду TForm1, ..., TFormN не хочет.


 
ply ©   (2009-02-05 14:14) [4]

Формы и контролы на них абсолютно разные. Общего только то что когда форма активна, то процедура по обработке данных должна выполняться та которая написана в ее pas-файле.
Пробовал в датамодуле ввести переменную proc:TProcedure, добавить вызов этой процедуры в событие компонента по приему данных, а в OnActivate для каждой формы писать proc:=ThisForm.DataRecieved
Но в результате использовать контролы можно,но свойства их при изменении не изменяются.

>реализовать событие типа OnDataReceived и список подписчиков (форм в данном случае) на него

можно поподробнее? про список подписчиков.


 
ply ©   (2009-02-05 14:21) [5]

щас подумал: может как-то отсылать сообщение активному окну программы с полученными данными, а там реализовывать обработку? только как это сделать пока незнаю=)


 
clickmaker ©   (2009-02-05 14:56) [6]

> про список подписчиков

TSubscriber = class
 Object: TObject;
 EventProc: TNotifyEvent;
public
 constructor Create(AObject: TObject; AEventProc: TNotifyEvent);
end;

TComDataModule = class
private
 FEventSubscribers: TObjectList;
...

procedure TComDataModule.SubscribeEvent(ASubscriber: TObject; AEventProc: TNotifyEvent);
begin
 Subscr := TSubscriber.Create(ASubscriber, AEventProc);
 FEventSubscribers.Add(Subscr);
end;

procedure TComDataModule.NotifySubscribersWhenSomeDataReceivedFromCOMPort;
begin
 for i := 0 to FEventSubscribers.Count-1 do
   TSubscriber(FEventSubscribers[i]).EventProc(Self);
end;

// форма при создании может подписаться на событие

TForm1.Create
...
 DataModule.SubscribeEvent(Self, FormEventHandler);


вместо TNotifyEvent, наверно, надо будет написать свой тип события, чтобы передавать собственно данные (если они не доступны через публичные свойства датамодуля)
ну и процедуру отписки сделать в FormDestroy



Страницы: 1 вся ветка

Текущий архив: 2010.01.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
15-1258645461
И. Павел
2009-11-19 18:44
2010.01.24
Кпоблема с кодировками


11-1160629902
Grademax
2006-10-12 09:11
2010.01.24
Как програмно остановить USB-Flash?


2-1259630581
Abcdef123
2009-12-01 04:23
2010.01.24
Есть ли что то TImage со свойствами кнопки?


2-1258886196
DW
2009-11-22 13:36
2010.01.24
Метод Free


1-1233757927
jetus
2009-02-04 17:32
2010.01.24
Получить название метода