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

ошибка в tterminal.onprocfinished ?

СообщениеДобавлено: 12.02.2011 11:38:37
minoshi
Доброго времени суток!

Вот уже сутки гадаю, то ли это баг то ли я опять не могу въехать я логику MSE

tterminal.onprocfinished(const sender : tobject) отрабатывает когда процесс завершен.

Логично предположить, что sender в данном случае должен быть tterminal.

Ан нет! (sender as tobject).classname показал, что это tmseprocess.

Код: Выделить всё
procedure tmainfo.on_procfinished(const sender: TObject);
begin
  showmessage((sender as tobject).classname);
end;


Что ни есть хорошо, когда создаешь tterminal`ы в ран-тайме и нужно отследить какой именно из них отработал

Пока прикрутил такой костыль :
в юните tmseprocess ввел дополнительное свойство termname : string и при создании очередного терминала в него записываю имя созданного терминала.
Код: Выделить всё
  t := tterminal.create(self);
  t.name := 'term' + inttostr(termNum);
  t.fprocess.termname := t.name;
  t.onprocfinished:= @on_procfinished;


и при завершении смотрю по этому свойству какой терминал закончил работу.

Однако для этого в юните tterminal cвойство fprocess пришлось перенести в секцию public, что тоже ни есть хорошо. К тому же в самой программе в секции uses помимо tmseterminal нужно еще подключать tmseprocess.

Как правильно поступить ?

Re: ошибка в tterminal.onprocfinished ?

СообщениеДобавлено: 13.02.2011 13:10:07
debi12345
Сделано:
> However, the property "fprocess" has to be moved to the "public" section. And
> one more unit ("tmseprocess") has to be used by the program.
>
mseprocess.pas is linked in anyway because of tterminal.fprocess.

> Q: optimal way ?
>
Use oninputpipebroken.
Trunk 4330 has ttermial as sender parameter in onprocfinished.