Отладка модальных форм
Попытался решить проблему с отладкой модальных форм. Создал отдельный поток, в этом потоке запускаю fsScript.Execute. Пока работают обычные функции и процедуры все работает, как только срабатывает событие - скрипт умирает, так же как и в демопроекте с form.pas, где все работает в одном потоке. Может проблемы заложены в самом FastScript, в реализации событий?
Комментарии
Я тоже пробовал и так и сяк, и через threads. В любом случае теряется default обработчик событий.
Александр, хочется хотя бы каких-нибудь мыслей по поводу отладки модальных форм (точнее пошаговой отладки событий в модальных формах).
Через threads нельзя - там надо synchronize везде делать.
Полез было подменять вызов ShowModal на Show с циклом обработки сообщений, но все оказалось куда проще: надо внести изменения в код обработчика OnRunLine (на примере демки demos\main):
procedure TForm1.fsScript1RunLine;
begin
EnableWindow(Handle, True);
SetFocus;
...
end;
О результатах можете сообщить мне на мыло...
Ура! Ура! Ура! Получилось...
Только нужно еще обрамить (я тут малость модифицировал):
void __fastcall TScriptEdtForm::fsScriptRunLine(TfsScript *Sender,
int SourcePos)
{
// сюда будем сохранять текущую активную форму
TForm *f = NULL;
if( FTracing ){
// достаем её
f = Screen->ActiveForm;
// Editor - это TfsSyntaxMemo
TPoint p = fsPosToPoint(Editor->Lines->Text, SourcePos);
Editor->SetPos(p.x, p.y);
// Ну, и красявостей нуна сделать
Editor->SetActiveLine(p.y-1);
// Переходим в окно отладчика
EnableWindow(Handle,true);
SetFocus();
FTracing = false;
while( !FTracing )
Application->ProcessMessages();
// Убираем красявости
Editor->SetActiveLine(-1);
if( f != NULL ){
// Возвращаем обработку событий в нужное
// (иногда даже отлаживаемое) окно
EnableWindow(f->Handle,true);
f->SetFocus();
}
}
}