【更新说明】
新版本的 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 不会解析宏的参数信息,而是将整个包含参数的内容当做一个宏名称。使用参数化宏时,宏的名称为 “(” 之前的部分,“(” 和 “)” 之间的内容被当做宏参数。
下图是一个测试的效果截图:
【更新级别】
可选
【特别感谢】
渣渣