Страница 1 из 2

AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 13:29:51
vitaly_l
AProcess.Options := AProcess.Options + [poWaitOnExit];
Запускает внешнюю программу и ждёт её выполнения, при этом запускающая программа "типа висит"...
Если убрать poWaitOnExit, то запускаемая программа - не всегда выполняется правильно...

Нужна золотая середина...

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

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 15:47:49
Ism
У Tprocess есть свойство running

Есть еще вариант, создавать файл и перед стартом удалять, затем без poWaitOnExit
Код: Выделить всё
while ((FileExists(GetCurrentDir + '\tools\Charset\result_charset.txt')=false) or (E9FileStatus(GetCurrentDir + '\tools\Charset\result_charset.txt')=false)) do sleep (20);


Код: Выделить всё
function E9FileStatus(const Origin: string): boolean;
var
  F: TFileStream;
begin
  //используется ли файл в данный момент другим приложением
{
    Значение             Описание
    fmCreate             Созда¸т файл с данным именем. Если файл существует, то открыть его в
                                 режиме записи.
    fmOpenRead           Открыть файл только для чтения.
    fmOpenWrite          Открыть файл только на запись. При этом запись в файл заменит вс¸ его
                                 содержимое.
    fmOpenReadWrite Открыть файл скорее для изменения содержимого чем для замены его.

    Режим доступа должен иметь одно из следующих значений:

    Значение            Описание
    fmShareCompat       Доступ к файлу совместим с FCB.
    fmShareExclusive    Другое приложение не может открыть файл для различных целей.
    fmShareDenyWrite    Другое приложение может открыть файл для чтения, но не для записи.
    fmShareDenyRead     Другое приложение может открыть файл для записи, но не для чтения.
    fmShareDenyNone     Разрешить другим файлам делать с файлом и чтени и запись.

    Если файл невозможно открыть, то Create сгенерирует исключение.
    Возвращает true если файл не заблокирован
}
  try
    F := TFileStream.Create(Origin, fmOpenReadWrite or fmShareExclusive);
    try
      Result := true;
    finally
      F.Free;
    end;
  except
    Result := false;
  end;
end;                                           


http://code.google.com/p/price-vampire/ ... rmmain.pas

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 16:06:24
vitaly_l
Ism писал(а):E9FileStatus

Спасибо: идея ясна и понятна(пригодится).
Но суть вопроса в другом, У меня нет проблемы с выяснением окончания процесса, проблема в другом.
Ism писал(а):У Tprocess есть свойство running

Вот такой код позволяет перемещать "форму" во время выполнения:
while AProcess.Running do Application.ProcessMessages;
Однако кнопка (крестик), которая должна сделать Close, не работает...

Что не так???
Как оборвать процесс???

.

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 16:12:37
Mr.Smart
Смотрим в сторону много поточности, а конкретно класс TThread.

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 16:16:44
Ism
while AProcess.Running do Application.ProcessMessages;


Можно проще, бросить Ttimer на форму и Ontimer делать Application.ProcessMessages , тогда события элементов должны работать

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 16:23:11
Mr.Smart
Ism писал(а):тогда события элементов должны работать

Таймер "крутится" в основном цикле, т.ч. вы даже события от таймера не получите.

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 16:41:33
Ism
Если стартануть без poWaitOnExit, то код программы нормально будет выполняться , будто ничего не произошло.Будут работать и события таймера и остальные.

Или я ошибаюсь ?

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 17:22:28
vitaly_l
Ism писал(а):Если стартануть без poWaitOnExit, то код программы нормально будет выполняться

Я и так стартую без poWaitOnExit...

function "on FormMouseDown" do Halt; - работает при нажатии на форму...
А Click на крестик - нет... Click на "Крестик" - отключился... Как оживить Click на "крестик"???...
У крестика наверно тоже есть событие onКрестик.Click do ...
:?: Вопрос: Как называется событие onКрестик.Click ???



.

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 17:33:04
Mr.Smart
Ism писал(а):Или я ошибаюсь ?

Не ошибаетесь.
vitaly_l
TForm.OnClose, TForm.OnCloseQuery.

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 17:41:56
vitaly_l
Mr.Smart писал(а):TForm.OnClose, TForm.OnCloseQuery.

Нет - это события, которые вызываются, после...
А как сам msg называется??? (я думаю: это баг, т.к. всё остальное работает, где-то забыли прописать код, поэтому и не работает)...

Добавлено спустя 9 минут 23 секунды:
Вообще все кнопки работают кроме крестика... Можно даже FileOpen сделать...
Очевидно при старте Tprocess - отключается крестик... Почему?? Зачем???

Добавлено спустя 7 минут 19 секунд:
А потом (после окончания Tprocess) - снова работает...
Это: либо специально задумано, либо баг...
как сам msg нажатия на крестик называется???

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 18:00:51
Ism
А зачем вам закрывать программу до окончания процесса ? Так что все правильно.
Либо сделайте отдельную кнопку для закрытия

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 18:08:48
vitaly_l
Это не правильно... Там процесс долгий... и я например хочу прервать...
всё работает, а крестик нет... Я просто не умею отлавливать события... художник...
как сам msg нажатия на крестик называется??? Как его отловить??? Сама кнопка нажимается... только результата нет...

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 18:12:17
Mr.Smart
WM_CLOSE

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 18:15:43
Ism
Павтаряю

Либо сделайте отдельную кнопку для закрытия

Re: AProcess.Options + [poWaitOnExit]

СообщениеДобавлено: 04.04.2012 20:33:30
vitaly_l
Ism писал(а):Либо сделайте отдельную кнопку для закрытия

Отдельную кнопку это плохо... должен работать "крестик"...
Если кто знает вариант, оживления "крестика", то пишите...

.