Форум: "Основная";
Текущий архив: 2010.01.24;
Скачать: [xml.tar.bz2];
ВнизРазная процедура для каждой формы.. как? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c