Вот уже сутки гадаю, то ли это баг то ли я опять не могу въехать я логику 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.
Как правильно поступить ?