Отладка модальных форм

отредактировано 14:30 Раздел: FastScript
Попытался решить проблему с отладкой модальных форм. Создал отдельный поток, в этом потоке запускаю fsScript.Execute. Пока работают обычные функции и процедуры все работает, как только срабатывает событие - скрипт умирает, так же как и в демопроекте с form.pas, где все работает в одном потоке. Может проблемы заложены в самом FastScript, в реализации событий?

Комментарии

  • maomao
    отредактировано 14:30
    Что-то Александр не отвечает. ;)
    Я тоже пробовал и так и сяк, и через threads. В любом случае теряется default обработчик событий.
    Александр, хочется хотя бы каких-нибудь мыслей по поводу отладки модальных форм (точнее пошаговой отладки событий в модальных формах).
  • отредактировано February 2004
    Чувствовал, что рано или поздно меня этим вопросом доканают ;)

    Через threads нельзя - там надо synchronize везде делать.
    Полез было подменять вызов ShowModal на Show с циклом обработки сообщений, но все оказалось куда проще: надо внести изменения в код обработчика OnRunLine (на примере демки demos\main):

    procedure TForm1.fsScript1RunLine;
    begin
    EnableWindow(Handle, True);
    SetFocus;
    ...
    end;

    О результатах можете сообщить мне на мыло...
  • maomao
    отредактировано 14:30
    I like it!!!
    Ура! Ура! Ура! Получилось...
    Только нужно еще обрамить (я тут малость модифицировал):
    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();
    }
    }
    }

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.