fsScript1.Clear

lvilvi
отредактировано 06:48 Раздел: FastScript
fsScript1.Clear; // надо очищать компонент, если он используется для запуска нескольких скриптов

Вот что написано в документации , а то что при этом удаляются обьекты , их надо постоянно переописывать ???

Комментарии

  • отредактировано 06:48
    Подробнее можно?
  • lvilvi
    отредактировано 06:48
    При создании формы следующие действия:

    fsScript.Parent := fsGlobalUnit;
    fsScript.AddForm(Self);

    Существует два неких события:
    1 - Вызов на исполнение
    2 - Вызов оболочки в которой производиться написание и компиляция скрипта

    Поэтому добавление объектов происходит один раз.

    При вызове на исполнение - код:

    procedure aExecuteExecute(Sender: TObject);
    var
    FileStream: TFileStream;
    begin
    inherited;
    fsScript.Clear;
    FileStream:= TFileStream.Create('c:\1.pfe', fmOpenRead);
    if not fsScript.SetILCode(FileStream) then
    ShowMessage(fsScript.ErrorMsg);
    FileStream.Free;
    fsScript.Execute;
    end;

    При вызове метода Clear убиваются и все объекты описанные при создании,
    очищать как то только то , что было загруженно можно ?


  • отредактировано 06:48
    Clear очищает скрипт полность. Советую написать функцию, например InitMyScript, в которой будете инициализировать нужные объеты и вызывать её после Clear.
  • lvilvi
    отредактировано 06:48
    Это понятно , я решил сделать через второй объект, т.е. в инициализации учавствет FsScript а в момент исполнения используется FsScriptRun
    Вопрос , как много пямяти съедает TfsScipt один объект ?
  • отредактировано 06:48
    Действительно существует такая проблема и не хочется каждый раз добавлять объекты. Я поступил следующим образом: после добавления объектов запоминаю объщее колво объектов до выполнения objCount:= fsScript.Items.Count;
    А перед каждым выполнением скрипта удаляю все объекты начиная с конца до
    objCount = fsScript.Items.Count. Это порой быстрее чем добавлять свои элементы заново.
  • lvilvi
    отредактировано 06:48
    Ну я иначе рашил , сделал глобальный объект

    initialization
    FsCustomScript := TfsScript.Create(nil);

    finalization
    FsCustomScript.Free;

    потом у себя держу свой объект со своими новыми параметрами и обьектами и вызываю так

    procedure aExecuteExecute(Sender: TObject);
    var
    FileStream: TFileStream;
    begin
    inherited;
    AppDisable;
    try
    FsCustomScript.Clear;
    FileStream:= TFileStream.Create(ExtractFilePath(ParamStr(0)) +
    '\ExDoc.pfe', fmOpenRead);
    FsCustomScript.Parent := fsScript;
    if not FsCustomScript.SetILCode(FileStream) then
    ShowMessage(FsCustomScript.ErrorMsg);
    FileStream.Free;
    FsCustomScript.Execute;
    finally
    AppEnable;
    end;
    end; {End aExecuteExecute}

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

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