FastReport 自定义函数解决QRCode显示

在FastReport 4.2的barcode组件不包含QRCode(听说高版本的Delphi内置的FastReport已经包含QRCode功能),这篇文章简单讲下如何用自定义函数解决QRCode的显示问题。

   首选QRCode的编码->图形采用了DelphiZXingQRCode组件,下载地址:http://www.debenu.com/open-source/delphizxingqrcode/

   本文的思路是这样的,首选显示QRCode的组件是tfrxpictureview,在tfrxpictureview的OnBeforePrint脚本中动态调用自定义函数,由自定义函数给tfrxpictureview加载QRCode。

   FastReport的自定义函数流程本文分3部分,自定义函数公共入口CallMethod,给tfrxpictureview赋值的updateQRCode,还有注册自定义函数regMethod。下面我们来看代码
 procedure TForm1.regMethod;
const
  g='User Functions/Procedures';
begin
  // frGlobalUnit contains standard types and functions
  frxReport1.Script.Parent := fsGlobalUnit;
  frxReport1.Script.AddMethod('procedure updateQRCode(qrCodeStr: String; qrCodePicObjectname:String);',
    CallMethod,g,'Assigned QRCode to PictureView');
end;
 
procedure TForm1.updateQRCode(qrCodeStr: String; qrCodePic: TfrxPictureView);
var
  stream: TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    CreateQRCode(qrCodeStr, stream);
    qrCodePic.LoadPictureFromStream(stream);
  finally
    FreeAndNil(stream);
  end;
end;
function TForm1.CallMethod(Instance: TObject; ClassType: TClass;
  const MethodName: string; var Params: Variant): Variant;
var obj:TfrxComponent;
begin
 // dispatch the method call
  if MethodName = 'UPDATEQRCODE' then begin
    //result := up(Params[0]);
    obj:=frxreport1.FindObject( Params[1]);
    if obj<>nil then begin
      updateQRCode(Params[0],obj as TfrxPictureView);
    end;
  end;
end;

TForm.onCreate的时候应该第一时间调用regMethod注册自定义函数。好了,自定义函数的Delphi代码已经完成,下面来看看如何在FastReport里面的脚本调用它。双击fastreport组件的打开design界面,在MasterData Bar里面增加一个Picture Object,调整好大小后然后F11,选择OnBeforePrint Event,双击进入脚本的编写,在procedure主体里面添加一行代码调用自定义函数:
updateQRCode( ADOQuery1.FieldByName('barcode').AsString,'Picture1');

updateQRCode的第一个参数为QRCode值,第二个参数为Picture Object的Component name,保存退出后,Run一下看看是不是成功了?

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值