аналог ShowModal
От: _hunter Украина  
Дата: 07.01.04 16:54
Оценка:
как сделать аналог ShowModal?
т.е. мне нужно чтобы форма ожидала завершения созданного ею компонента.

Заранее благодарю за ответ.
Re: аналог ShowModal
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.01.04 17:28
Оценка:
Здравствуйте, _hunter, Вы писали:

_>как сделать аналог ShowModal?

ShowModal.
_>т.е. мне нужно чтобы форма ожидала завершения созданного ею компонента.
В каком смысле завершения? Что за компонент?
_>Заранее благодарю за ответ.
Заранее благодарен за более подробное изложение вопроса.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: аналог ShowModal
От: _hunter Украина  
Дата: 07.01.04 18:09
Оценка:
S>В каком смысле завершения? Что за компонент?

в моем случае форма запускает процесс(при запуске она должна заснуть) и при завершении этого процесса форма должна проснутся.
Re[3]: аналог ShowModal
От: Anatoly Podgoretsky Эстония http://www.podgoretsky.com
Дата: 07.01.04 18:26
Оценка: +1
"_hunter" <19952@news.rsdn.ru> сообщил/сообщила в новостях следующее:
news:499737@news.rsdn.ru...

S>В каком смысле завершения? Что за компонент?


в моем случае форма запускает процесс(при запуске она должна заснуть) и при
завершении этого процесса форма должна проснутся.

WaitForSingleObject
Posted via RSDN NNTP Server 1.8 beta
Re[4]: аналог ShowModal
От: _hunter Украина  
Дата: 07.01.04 18:40
Оценка:
AP>WaitForSingleObject

а что такое WaitForSingleObject ?
Re[5]: аналог ShowModal
От: Anatoly Podgoretsky Эстония http://www.podgoretsky.com
Дата: 07.01.04 18:48
Оценка:
"_hunter" <19952@news.rsdn.ru> сообщил/сообщила в новостях следующее:
news:499754@news.rsdn.ru...

AP>WaitForSingleObject


а что такое WaitForSingleObject ?

То что ты хочешь, ожидание окончания процесса.
Posted via RSDN NNTP Server 1.8 beta
Re[3]: аналог ShowModal
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.01.04 19:08
Оценка:
Здравствуйте, _hunter, Вы писали:
_>в моем случае форма запускает процесс(при запуске она должна заснуть) и при завершении этого процесса форма должна проснутся.
использовать функцию WaitFor на хэндле этого процесса.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: аналог ShowModal
От: _hunter Украина  
Дата: 07.01.04 19:56
Оценка: :)
>>а что такое WaitForSingleObject ?

>То что ты хочешь, ожидание окончания процесса.


я имел в виду как его ипользовать
в свойствах формы у меня такого метода нет и в свойствах потока он тоже отсутсвует.
Re[7]: аналог ShowModal
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.01.04 10:58
Оценка:
Здравствуйте, _hunter, Вы писали:
_>я имел в виду как его ипользовать
_>в свойствах формы у меня такого метода нет и в свойствах потока он тоже отсутсвует.
А зачем он тебе в свойствах формы или в свойствах потока? Ты же по кнопке пытаешься другой процесс запустить? Вот напиши хоть прямо в обработчике этой формы
WaitForSingleObject
и нажми на нем F1. Там все написано.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: аналог ShowModal
От: Leonid Troyanovsky  
Дата: 08.01.04 13:25
Оценка:
Здравствуйте, _hunter, Вы писали:

S>>В каком смысле завершения? Что за компонент?


_>в моем случае форма запускает процесс(при запуске она должна заснуть) и при завершении этого процесса форма должна проснутся.


Полностью "заснувшая" форма производит впечатление умершей.
IMHO, проще модально показать "ожидающую форму", примерно такую:

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm2 = class(TForm)
    ..
  private
    { Private declarations }
    ncount : DWord;
    FHandles: array [0..MAXIMUM_WAIT_OBJECTS-1] of THandle;
    procedure WMUser(var msg: TMessage); message WM_USER;
  public
    function WaitHandles(const Handles: array of THandle): Longint; virtual;
    { Public declarations }
  end;

const
  IDWAIT = 256;

implementation

{$R *.DFM}

procedure TForm2.WMUser;
var
  waitresult: DWord;
begin
  Application.ProcessMessages;
  if (ModalResult <> 0) then
    Exit;

  waitresult := MsgWaitForMultipleObjects( ncount,
                                           FHandles,
                                           False,
                                           INFINITE,
                                           QS_ALLINPUT );
                                           
  if (waitresult = WAIT_OBJECT_0 + ncount) then
    PostMessage(Handle, WM_USER, 0, 0)
  else
    ModalResult := IDWAIT + waitresult;
end;

function TForm2.WaitHandles;
begin
  ncount := High(Handles)-Low(Handles)+1;
  Move(Handles[0], FHandles[0], ncount* SizeOf(THandle));
  PostMessage(Handle, WM_USER, 0, 0);
  Result := ShowModal;
end;


Убирем форму из списка автосоздаваемых, а показывать будем так

 with TForm2.Create(nil) do
   try
     case WaitHandles([pi.hProcess]) of
       IDCANCEL: {форма закрыта кнопкой} ;
       ..
       IDWAIT+WAIT_FAILED: {Ошибка функции ожидания};
       ..
       IDWAIT+WAIT_OBJECT_0: {Сигналит hProcess};
       ..
     end;
   finally
     Free;
   end;
--
С уважением, LVT
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.