AProcess.Options + [poWaitOnExit]

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

AProcess.Options + [poWaitOnExit]

Сообщение vitaly_l » 04.04.2012 13:29:51

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

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

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

Re: AProcess.Options + [poWaitOnExit]

Сообщение Ism » 04.04.2012 15:47:49

У 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
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: AProcess.Options + [poWaitOnExit]

Сообщение vitaly_l » 04.04.2012 16:06:24

Ism писал(а):E9FileStatus

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

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

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

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: AProcess.Options + [poWaitOnExit]

Сообщение Mr.Smart » 04.04.2012 16:12:37

Смотрим в сторону много поточности, а конкретно класс TThread.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: AProcess.Options + [poWaitOnExit]

Сообщение Ism » 04.04.2012 16:16:44

while AProcess.Running do Application.ProcessMessages;


Можно проще, бросить Ttimer на форму и Ontimer делать Application.ProcessMessages , тогда события элементов должны работать
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: AProcess.Options + [poWaitOnExit]

Сообщение Mr.Smart » 04.04.2012 16:23:11

Ism писал(а):тогда события элементов должны работать

Таймер "крутится" в основном цикле, т.ч. вы даже события от таймера не получите.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: AProcess.Options + [poWaitOnExit]

Сообщение Ism » 04.04.2012 16:41:33

Если стартануть без poWaitOnExit, то код программы нормально будет выполняться , будто ничего не произошло.Будут работать и события таймера и остальные.

Или я ошибаюсь ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: AProcess.Options + [poWaitOnExit]

Сообщение vitaly_l » 04.04.2012 17:22:28

Ism писал(а):Если стартануть без poWaitOnExit, то код программы нормально будет выполняться

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

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



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: AProcess.Options + [poWaitOnExit]

Сообщение Mr.Smart » 04.04.2012 17:33:04

Ism писал(а):Или я ошибаюсь ?

Не ошибаетесь.
vitaly_l
TForm.OnClose, TForm.OnCloseQuery.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: AProcess.Options + [poWaitOnExit]

Сообщение vitaly_l » 04.04.2012 17:41:56

Mr.Smart писал(а):TForm.OnClose, TForm.OnCloseQuery.

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

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

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

Re: AProcess.Options + [poWaitOnExit]

Сообщение Ism » 04.04.2012 18:00:51

А зачем вам закрывать программу до окончания процесса ? Так что все правильно.
Либо сделайте отдельную кнопку для закрытия
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: AProcess.Options + [poWaitOnExit]

Сообщение vitaly_l » 04.04.2012 18:08:48

Это не правильно... Там процесс долгий... и я например хочу прервать...
всё работает, а крестик нет... Я просто не умею отлавливать события... художник...
как сам msg нажатия на крестик называется??? Как его отловить??? Сама кнопка нажимается... только результата нет...
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: AProcess.Options + [poWaitOnExit]

Сообщение Mr.Smart » 04.04.2012 18:12:17

WM_CLOSE
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: AProcess.Options + [poWaitOnExit]

Сообщение Ism » 04.04.2012 18:15:43

Павтаряю

Либо сделайте отдельную кнопку для закрытия
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: AProcess.Options + [poWaitOnExit]

Сообщение vitaly_l » 04.04.2012 20:33:30

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

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

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru