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

Вниз

Обработка сообщений.   Найти похожие ветки 

 
Alexander ©   (2002-10-22 11:29) [0]

В VCL я писал так:

private
procedure WM_SpoolerStatus(var Msg : TWMSPOOLERSTATUS); message WM_SPOOLERSTATUS;

и обрабатывал это сообщение (Win98)

сейчас пишу так:

function TFormMain.frmMainMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := False;
if (Msg.message = WM_SPOOLERSTATUS) then
begin
Form.Caption := "OK";
end;
end;

но я даже не получаю это сообщение. В чём может быть дело?


 
BorisMor ©   (2002-10-22 12:59) [1]

Где то я это уже читал...

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1027687023&n=10


 
Gandalf   (2002-10-22 13:32) [2]

Код правильный (на мой взгляд), но... незнаю, могу сказать что мне тоже не приходит сообщение (это сообщение) :)
WinXP, D5, KOLnMCK 1.51


 
Alexander ©   (2002-10-22 14:07) [3]

>Gandalf
Это сообщение работает (посылается) только в Win9x, в WinNT линии это делается через FindFirstPrinterChangeNotification.


 
Alexander ©   (2002-10-22 14:44) [4]

Давненько я под 98 не писал - всё заработало, просто я привык для экономии бумаги печатать в файл вместо LPT1, а в 98 такой фокус не прошёл - нужно печатать нормально, чтобы послалось сообщение.


 
Alexander ©   (2002-10-22 16:54) [5]

Ещё вопрос - как можно (и можно ли) получать сообщения в сервисе?
Там ведь окна нет.


 
Vladimir Kladov   (2002-10-24 15:40) [6]

Почему нет? Можно и скрытое окно сделать. Если нужен hook, то вообще окно не нужно. И вообще, сообщения можно ловить не имея окон. В принципе, сообщения посылаются не окну, а потоку.


 
Alexander ©   (2002-10-24 15:53) [7]

тогда почему такой код работает:

function TFormMain.frmMainMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := False;
if (Msg.message = WM_SPOOLERSTATUS) then
Form.Caption := Form.Caption + "+";
end;

а такой нет:

hThread := CreateThread(nil, 0, @NotificationThread, @ThreadParams, 0, ThreadID);

function NotificationThread(P: Pointer): Cardinal; stdcall;
...
begin
...
while GetMessage(Msg, 0, 0, 0) do
if (Msg.message = WM_SPOOLERSTATUS) then
...
end;


 
Vladimir Kladov   (2002-10-28 10:52) [8]

А это тот поток, который отправил задание на печать?


 
Alexander ©   (2002-10-28 12:37) [9]

А какое это имеет значение?
Задание на печать может послать любое приложение, а система шлёт всем окнам сообщение о посановке этого задания в очередь.
frmMainMessage() нормально принимает это сообщение, а вот в потоке не получается!
Или придётся создавать форму внутри потока?



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

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

Наверх




Память: 0.48 MB
Время: 0.01 c
1-20068
Unknown user
2003-06-25 20:10
2003.07.07
Проблема при вставке из буфера обмена в TMemo больших текстов


11-20030
2Nat
2002-10-28 17:34
2003.07.07
Просмотр значений строк списка при отладке


8-20168
vladislav80
2003-03-21 23:11
2003.07.07
Подскажите, как сделать кнопку другого цвета ?..


4-20346
tiam
2003-05-07 10:01
2003.07.07
Динамическое подключение Dll


14-20282
СержикБеленький
2003-06-20 12:57
2003.07.07
Ребата, помогите расчитать стоимость проекта.