Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как культурно закрыть процесс ? [D6, Win2k]


Страницы:   1 2

Sasha73 ©   (2004-07-28 12:45:00) 

Добрый день, уважаемые мастера!
Вопрос глупый, но все же!
Есть програмка:
Program Mishen;
Uses
 Windows, SysUtils, Forms, QDialogs, QControls, ExtCtrls;

{$R *.RES}

  Var
     Quit     : Bool;

BEGIN
    Quit:=False;
    Application.Initialize;
    Repeat
          Application.ProcessMessages;
          Sleep(50);
    Until Quit;

    ShowMessage('Exit!');
END.

Вопросы:
1. Как узнать что Win-да выгружается (как, чем поймать сообщение WM_Quit) (очень туго у меня с сообщениями)?
2. Как из другого процесса послать сообщение WM_Quit этому ?


Sasha73   (2004-07-28 14:40:00) [21]

Большое СПАСИБО!

И последнее:
Предположим мы убрали объект TApplication - получили:
Program Mishen;
Uses
 Windows, QDialogs;
{$R *.RES}
  Var
     Quit     : Bool;
BEGIN
    Quit:=False;
    Repeat
//           Application.ProcessMessages;
          Sleep(50);
    Until Quit;
    ShowMessage('Exit!');
END.

1. Я так понимаю вместо Application.ProcessMessagesнужно сто-то вставить, чтобы обрабатывались сообщения?
2. Как в таком случае узнать, что пора сохраниться и закрыться?


Digitman   (2004-07-28 14:13:00) [22]


> без него видео захват у меня не работает


ну очевидно потому что где-то в проекте явно или неявно используется модуль OleAuto .. а вообще говоря выражение "не работает" отдает детским садом, а не речью программиста ... что значит "не работает" ?


> как и в каком месте поймать сообщение, например, WM_QUERYENDSESSION


коль скоро TApplication ты вынужден использовать, то проще всего создать и подключить к проекту невидимую форму, у которой будет назначен обработчик как минимум одного события OnCloseQuery, реагирующего в т.ч. и на это сообщение

Program Mishen;
Uses
Windows, SysUtils, Forms, QDialogs, QControls, ExtCtrls;

{$R *.RES}

BEGIN
Application.Initialize;
Application.ShowMainForm := false;
Application.CreateForm(TMyInvisibleForm, MyInvisibleForm);
MyInvisibleForm.Run;
END.

и все !! и никаких выкрутасов !!

теперь, когда сессия ОС будет завершаться либо какой-то процесс пошлет сообщение окну с хэндлом равным Application.Handle, у твоей формы MyInvisibleForm возникнет событие OnCloseQuery


Sasha73   (2004-07-28 13:53:00) [23]

Спасибо за ответы!
Может я не прав на счет Application.Initialize, но без него видео захват у меня не работает - Это не важно (пока)!

> Digitman ©   (28.07.04 13:44) [9]

Вот я и пытался спросить: как и в каком месте поймать сообщение, например, WM_QUERYENDSESSION ??? (ТУГО у меня с этим, да и стем, наверное, тоже ;-) )


Digitman   (2004-07-28 13:44:00) [24]


> 1. Как узнать что Win-да выгружается
> 2. Как из другого процесса послать сообщение WM_Quit этому
> ?


1. Лови сообщение WM_QUERYENDSESSION

The WM_QUERYENDSESSION message is sent when the user chooses to end the Windows session or when an application calls the ExitWindows function

2. При использовании TApplication следет посылать сообщение окну с хэндлом Application.Handle


Digitman   (2004-07-28 13:40:00) [25]


> Application.Initialize надо для инициализации подключенных
> библиотек!


цитирую :

Provides an opportunity to initialize sub-systems such as OLE automation.

procedure Initalize;

Description

Initialize is the first method called for every project. It calls the InitProc procedure pointer. By default, the call to Initialize for the application does nothing because the default InitProc pointer is nil.

To use Initialize, the InitProc pointer must be predefined. This can be accomplished in one of two ways:

Include a unit that defines InitProc, such as the OleAutounit.
Create a custom initialization procedurethat assigns a value to the InitProc pointer, and add a call to this procedure to the project source prior to the call to Initialize.

я не вижу, чтобы у тебя в проекте где-то явно или неявно выполнялись условия, обозначенные в цитате жирным и оправдывающие использование объекта Application и его метода Initialize

что для начала на это скажешь ?


Ertong   (2004-07-28 13:34:00) [26]


> В том то и дело - НЕ НУЖНА мне форма!

А зачем тебе
Application.Initialize;
Application.ProcessMessages;


Sasha73   (2004-07-28 13:28:00) [27]

Вообще прога для видео-захвата используя DirectShow!
Application.Initialize надо для инициализации подключенных библиотек!
Я думаю TApplication и можно использовать для поимки соосщения WM_Quit или я не прав? Но как ? Туго у меня с сообщениями!
Хотябы где посмотреть примерчики об этом?


Digitman   (2004-07-28 13:22:00) [28]


> Sasha73

угу ... а объект TApplication тогда зачем тебе ? ... ты выкинул из проекта форму, оставив при этом модуль Forms, и думаешь что сэкономил пару-тройку сотен килобайт ?


Sasha73   (2004-07-28 13:17:00) [29]

В том то и дело - НЕ НУЖНА мне форма!
Спасибо за информативные ответы!


Digitman   (2004-07-28 13:06:00) [30]


> А ее и не было!


видать, потерялась


> Это просто процесс!


это не "процесс", это текст программы, использующей VCL


> С формой было бы проще!


ну так а какого ж ляда ? добавь форму и не мучайся !
или сомнения гложут ?


Sasha73   (2004-07-28 13:04:00) [31]

А ее и не было!
Это просто процесс!
С формой было бы проще!


Digitman   (2004-07-28 12:51:00) [32]

а куда у тебя форма делась ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо