Delphi 使用FastScript调试脚本


本文整理自网络,侵删。

 
让我们创建一个应用程序来调试FastScript脚本。


执行脚本时,将调用TfsScript OnRunLine事件。
您可以从参数中看到要执行的代码。

procedure TForm1.fsScript1RunLine(Sender: TfsScript;
  const UnitName, SourcePos: string);
begin
  …
end;
可以使用fsPosToPoint函数将参数SourcePos转换为TPoint类型。
TPoint Y属性设置为行,X属性设置为字符位置。

uses
  fs_itools;
var
  p: TPoint;
begin
  p := fsPosToPoint(SourcePos);
通过在TfsSyntaxMemo组件的SetPos属性中设置获得的执行位置,可以将光标置于正在执行的代码的位置。

fsSyntaxMemo1.SetPos(p.X, p.Y);
通过将正在执行的行号设置为TfsSyntaxMemo组件的SetActiveLine方法,可以激活正在执行的行。

Dec(p.Y);
fsSyntaxMemo1.SetActiveLine(p.Y);
将布尔成员变量FExec添加到窗体。

type
  TForm1 = class(TForm)
  private
    FExec: Boolean;
等待脚本执行,直到成员变量FExec在fsScript1的OnRunLine事件中变为True为止。

FExec := False;
while not FExec do
begin
  Sleep(10);
  Application.ProcessMessages;
end;
fsScript1RunLine函数如下所示:

procedure TForm1.fsScript1RunLine(Sender: TfsScript;
  const UnitName, SourcePos: string);
var
  p: TPoint;
begin
  p := fsPosToPoint(SourcePos);
  fsSyntaxMemo1.SetPos(p.X, p.Y);
  Dec(p.Y);
  fsSyntaxMemo1.SetActiveLine(p.Y);
  fsSyntaxMemo1.SetFocus;

  FExec := False;
  while not FExec do
  begin
    Sleep(10);
    Application.ProcessMessages;
  end;
end;
当按下“下一步处理”按钮时,成员变量FExec设置为True。

procedure TForm1.Button2Click(Sender: TObject);
begin
  FExec := True;
end;
单击“取消”按钮时,将调用fsScript1的Terminate方法停止处理。

procedure TForm1.Button3Click(Sender: TObject);
begin
  fsScript1.Terminate;
end;


要从Delphi代码获取FastScript变量的值,请使用TfsScript变量属性。

获取变量的值
val := fsScript1.Variables['i'];
设置变量的值
您还可以设置变量的值。

fsScript1.Variables['i'] := 10;
##示例应用程序

在下面的程序中,该过程每秒处理一行,并显示变量的值。
procedure TForm1.fsScript1RunLine(Sender: TfsScript;
  const UnitName, SourcePos: string);
var
  P: TPoint;
  I: Integer;
  VariableName: string;
begin

  StatusBar1.SimpleText := SourcePos;
  P := fsPosToPoint(SourcePos);
  Dec(P.Y);
  fsSyntaxMemo1.SetActiveLine(P.Y);


  ValueListEditor1.Strings.BeginUpdate;
  try
    ValueListEditor1.Strings.Clear;
    for I := 0 to fsScript1.Count - 1 do
    begin
      if fsScript1.Items[I] is TfsVariable then
      begin
        VariableName := fsScript1.Items[I].Name;
        ValueListEditor1.Strings.Values[VariableName] :=
          fsScript1.Items[I].Value;
      end;
    end;
  finally
    ValueListEditor1.Strings.EndUpdate;
  end;

  // 1秒待?C
  Sleep(1000);
  Application.ProcessMessages;
end;

相关阅读 >>

Delphi删除文件

Delphi 批量日期格式化

Delphi 删除任意文件的任意位置的任意数量的字符

Delphi edgebrowser1 浏览器实现控制滚动条

Delphi申请和释放内存

Delphi 让程序只运行1次

Delphi 用idhttp得到本机外网ip

Delphi twebbrowser出现 method pastehtml not supported by automation object 解决方法

Delphi 整理内存

Delphi中最小化其他程序及所有程序窗口最小化

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...