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

