Форум: "WinAPI";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
ВнизВопрос сложный. Если кто разбирается, посмотрите. Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c