Вниз
Скачать: CL | DM;

Форма VCL и многопоточность...   Найти похожие ветки 

← →
Eraser ©   (2005-02-02 17:06) [0]

Добрый день всем!
Хочу уточнить одну деталь.
Есть ли способ создать форму при помощи VCL в другом потоке, подозреваю что нету, но может у кого нибудь есть спец. компонент для этого (форма нужна чисто для приёма сообщений).
Уж очень не охота писать очередь сообщений.


← →
Reindeer Moss Eater ©   (2005-02-02 17:13) [1]

Зачем форма для этого?
Окна не достаточно?


← →
Digitman ©   (2005-02-02 17:34) [2]


> Уж очень не охота писать очередь сообщений


ты и не напишешь ее.
ибо это - епархия системы.
а вот цикл ожидания/выборки/диспетчеризации/обработки сообщений из очереди - эт запросто.
и ничего там сложного нет.

var
 Msg: TMsg;
..
while GetMessage(Msg, 0, 0, 0) do
 if Msg.hWnd <> 0 then
   begin
     TranslateMessage(Msg);
     Dispatchmessage(Msg);
   end
 else
   Dispatch(Msg.Message);


← →
Eraser ©   (2005-02-02 18:16) [3]

Reindeer Moss Eater ©

Как всегда я не правильно выразился! Конечно нужно создать просто окно.

Digitman ©
Наверное так и сделаю.


← →
Reindeer Moss Eater ©   (2005-02-02 18:31) [4]

uses Classes;

type TWndMethod = procedure(var Message: TMessage) of object;

function AllocateHWnd(Method: TWndMethod): HWND;


← →
Набережных С. ©   (2005-02-02 19:29) [5]

>Reindeer Moss Eater ©   (02.02.05 18:31) [4]

А что, AllocateHWnd потокобезопасна?

>Eraser ©   (02.02.05 18:16) [3]

Сообщения можно отправлять не только окну, но и непосредственно в очередь потока посредством PostThreadMessage.


← →
Eraser ©   (2005-02-02 20:17) [6]

Набережных С. ©//

А как перехватить очередб потока?


← →
Набережных С. ©   (2005-02-02 20:32) [7]

>Eraser ©   (02.02.05 20:17) [6]

См. Digitman ©   (02.02.05 17:34) [2]

Только параметр Msg.hWnd в этом случае будет равен нулю.


← →
Набережных С. ©   (2005-02-02 20:35) [8]

Точнее нужно только вот это:

while GetMessage(Msg, 0, 0, 0) do
begin
здесь обработка сообщений
end;


← →
Набережных С. ©   (2005-02-02 20:37) [9]

И когда поток получит WM_QUIT, GetMessage вернет false.


← →
Eraser ©   (2005-02-02 20:42) [10]

Спасибо! Теперь всё понятно.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
3-1108545014
juice
2005-02-16 12:10
2005.03.20
Interbase. Наборы данных


4-1108057557
Grey_F_O_X
2005-02-10 20:45
2005.03.20
Создание Browser Helper Object (BHO) с поиощью DELPHI


1-1110022038
Erl
2005-03-05 14:27
2005.03.20
MDI


3-1108642779
Max Zyuzin
2005-02-17 15:19
2005.03.20
Обращаемся к *.dbf файлам через ADO


4-1107803625
Jetus
2005-02-07 22:13
2005.03.20
Оповещение всех об изменениях в системном реестре




   Наверх