[QMacros] 更新:新增内置的参数化宏定义支持

【更新说明】

新版本的 QMacros 新增宏定义的参数化支持,通过支持参数化,从而让非固定值的宏能够根据参数做出适当的变化,为应用的开发提供更好的支持。

下面是一个参数化宏替换的例子:

procedure TForm1.Button1Click(Sender: TObject);
var
  AMgr: TQMacroManager;
  ACompiled: TQMacroComplied;
  I: Integer;
begin
  AMgr := TQMacroManager.Create;
  mmResults.Lines.BeginUpdate;
  try
    AMgr.Push('Rand', DoRandValue);
    ACompiled := AMgr.Complie(edtExpr.Text, '%', '%', MRF_PARSE_PARAMS);
    for I := 0 to 9 do
      mmResults.Lines.Add(ACompiled.Replace);
  finally
    if Assigned(ACompiled) then
      FreeAndNil(ACompiled);
    FreeAndNil(AMgr);
    mmResults.Lines.EndUpdate;
  end;
end;

procedure TForm1.DoRandValue(AMacro: TQMacroItem; const AQuoter: QCharW);
var
  AMin: Integer;
begin
  // Rand(),Rand(Max),Rand(Min,Max)
  if Assigned(AMacro.Params) and (AMacro.Params.Count > 0) then
  begin
    if AMacro.Params.Count = 1 then
      AMacro.Value.Value := IntToStr(Random(AMacro.Params[0].AsInteger))
    else
      AMacro.Value.Value := IntToStr(AMacro.Params[0].AsInteger +
        Random(AMacro.Params[1].AsInteger - AMacro.Params[0].AsInteger));
  end
  else
    AMacro.Value.Value := FloatToStr(Random);
end;

注意:使用参数化宏替换时,必需指定 MRF_PARSE_PARAMS 标志位,否则,QMacros 不会解析宏的参数信息,而是将整个包含参数的内容当做一个宏名称。使用参数化宏时,宏的名称为 “(” 之前的部分,“(” 和 “)” 之间的内容被当做宏参数。

下图是一个测试的效果截图:

qmacroparams

【更新级别】

可选

【特别感谢】

渣渣

 

分享到: