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

Вниз

Вопрос сложный. Если кто разбирается, посмотрите.   Найти похожие ветки 

 
Aldor   (2002-09-22 19:09) [0]

Имеется проект (без формы) и одним DataModule"м. На нем компонент, не важно какой - сокет или Таймер, в общем, у которого есть события.
в проекте следующий код:

application.initializate;
application.CreateForm(TMyDataModule, MyDataModule);
CycleApplication;

Процедура CycleApplication предназначена для того, чтобы приложение не завершалось, а ждало событий.
Его код:

procedure Cycle_Application;
var
AppMessage: TMsg;
begin
while true do
begin
WaitMessage; //ждать сообщения
PeekMessage(AppMessage, Application.Handle, 0, 0, PM_REMOVE); {считывать его (и далее по идее смотреть мессаги и думеть что же с ними делать)}
end;
end;

Вот. Тем временем на событие компонента в ДатаМодуле описана своя процедура.
Так вот, проблема в том, что СОБЫТИЯ НЕ ПРОИСХОДЯТ!
Сообщения ловятся (DataModule, как я понимаю, я вляется application.FMainForm), а вот события непроисходят.
Как выйти из этого положения? (то есть так зациклить приложение, что бы оно обрабатывало event"ы).???!?!?!??!?!


 
Polevi ©   (2002-09-22 19:22) [1]

ну а где DispatchMessage ?


 
Polevi ©   (2002-09-22 19:25) [2]

PS
сообщение пришло в очередь потока, теперь нужно диспетчировать его нужному окну - таймера или клиентсокета


 
Polevi ©   (2002-09-22 19:38) [3]

и чем тебя Application.Run не устраивает ?


 
Polevi ©   (2002-09-22 19:48) [4]

вот это место я имею в виду, если ты конечно смотрел код борланда

repeat
HandleMessage
until Terminated;


 
Юрий Зотов ©   (2002-09-22 21:06) [5]

DataModule НЕ является Аpplication.FMainForm. Поскольку модуль данных вообще не является формой. Это только в design-time он показывается подобно форме - чтобы на него можно было чего-то набросать. А в run-time он ведет себя совсем иначе и никаких окон не создает.


 
Aldor   (2002-09-23 04:29) [6]

Получается, если он не является FMainForm, диспатчить не кому! Диспатч ведь диспатчит сообщение в процедуру обработки сообщений окна, то есть явно не DataModule. Таким образом и Handlemessage не подойдет, там тоже транслит и диспатч.


 
Suntechnic ©   (2002-09-23 07:05) [7]

Во-первых никто тебе не запрещает создать окно (необязательно его отображать) и ассоциировать цикл обработки сообщений с этим окном. Во-вторых можно и окно не создавать, а просто запустить цикл обработки сообщений, передав вторым параметром ф-ции GetMessage ноль. В таком случае завершить этот цикл можно путём вызова PostThreadMessage и сообщения WM_QUIT.


 
Suntechnic ©   (2002-09-23 07:12) [8]

Кстати совсем необязательно использовать связку WaitMessage- PeakMessage. Обычно для этих целей используют просто GetMessage.


 
Polevi ©   (2002-09-23 10:41) [9]

2Aldor (23.09.02 04:29)
TTimer и TClientSocket создают свои окна


 
Aldor   (2002-09-23 20:38) [10]

2 2Aldor (23.09.02 04:29)
хм... а я всегда думал, что парентом у них является DataModule... и тогда как этим окнам сообщение передиспатчить?


 
Polevi ©   (2002-09-24 09:06) [11]

не путай TWinControl и TComponent - Parent и Owner совершенно не одно и тоже
TDatamodule не наследует TWinControl, он не является окном Windows, соответственно не может получать сообщений


 
Polevi ©   (2002-09-24 09:11) [12]

>... и тогда как этим окнам сообщение передиспатчить?
TMsg - HWND - оконная ф-ия
DispatchMessage именно этим и занимается


 
Aldor   (2002-09-24 21:03) [13]

Спасибо ОГРОМНОЕ!! ВСЕМ!
И Polevi ©, и Suntechnic, и Юрию Зотову, вы все мне очень помогли. Спасибо!



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
4-21848
raiks
2002-09-24 15:59
2002.11.07
Сообщение EM_LINESCROLL прокручивает текст в TMemo только вниз


3-21434
bpv
2002-10-19 10:19
2002.11.07
помогите плиз горю Парадокс


1-21527
Anatolyk
2002-10-29 11:00
2002.11.07
ValueListEditor


7-21839
kingdom
2002-09-02 16:17
2002.11.07
Вопрос по DCOMcnfg


14-21733
Anatoly Podgoretsky
2002-10-18 07:59
2002.11.07
Именинники 18 октября