Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
7-21826
maxim2
2002-09-05 09:25
2002.11.07
Как установить и снять свойство TaskBar Автоматически убирать


1-21521
soware
2002-10-29 10:19
2002.11.07
QuickReport


14-21760
MaximatorVeter
2002-10-15 19:25
2002.11.07
XP


14-21789
lutikh
2002-10-18 21:18
2002.11.07
Database Desktop по-русски


1-21467
RTZ
2002-10-28 13:42
2002.11.07
Блокировка меню в WebBrowse





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский