DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jaytang
今日帖子: 0
在线用户: 6
导航: 论坛 -> 文档资料 斑竹:liumazi,ruralboy  
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/10/16 12:54:11
标题:
Delphi XE5手机二维码生成与扫描编程示例 浏览:6210
加入我的收藏
楼主: 1、概述
    二维码的应用非常广泛,而与手机结合起来用,也很常见。这里介绍一点生成和扫描二维码的简单方法,其中扫描部分来自网友“江西-无为”,在此感谢。
1)、二维码生成通过调用Google地图服务中的一个API
2)、二维码扫描通过读取ZXing扫描程序复制到粘贴板的结果实现
    所以,其实都不是“原生”的实现方法,意在抛砖引玉,引出原生实现的代码出来,希望有此代码的,不要吝啬啦。


2、设计界面:
此帖子包含附件:
JPEG 图像
大小:169.8K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2013/10/16 12:55:03
1楼: 3、程序代码:
unit main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
  FMX.Memo, FMX.StdCtrls, FMX.Platform, System.Rtti, FMX.Edit, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Telephony, Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android,
  Androidapi.JNI.Net, FMX.Objects, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IDURI;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    StyleBook1: TStyleBook;
    Panel2: TPanel;
    CornerButton1: TCornerButton;
    CornerButton2: TCornerButton;
    CornerButton3: TCornerButton;
    CornerButton4: TCornerButton;
    CornerButton5: TCornerButton;
    Timer1: TTimer;
    Panel3: TPanel;
    Memo1: TMemo;
    Panel4: TPanel;
    Memo2: TMemo;
    Rectangle1: TRectangle;
    Image1: TImage;
    Line1: TLine;
    Line2: TLine;
    Line3: TLine;
    Line4: TLine;
    CornerButton6: TCornerButton;
    http: TIdHTTP;
    procedure CornerButton5Click(Sender: TObject);
    procedure CornerButton4Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure CornerButton2Click(Sender: TObject);
    procedure CornerButton3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
     intent: jintent;
     ClipService: IFMXClipboardService;
     TimeCount: integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

//
// 退出...
procedure TForm1.CornerButton2Click(Sender: TObject);
begin
   if not assigned(intent) then
      FreeAndNil(intent);
   halt;
end;

//
// 调用Google服务,生成二维码...
procedure TForm1.CornerButton3Click(Sender: TObject);
var
   url: string;
   stream: TMemoryStream;
   ok: boolean;
begin
//
// 远程Google服务的URL生成...
   url:=TIdURI.URLEncode('http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=L|0&chl='+memo2.Lines.Text);
//
// 调用Google服务,得到二维码...
   Stream:=TMemoryStream.Create;
   http.HTTPOptions:=[hoKeepOrigProtocol];
   http.Request.Connection:='Keep-Alive';
   try
      http.Get(url,stream);
      ok:=(Stream.Size>0);
   except
      ok:=false;
   end;
   http.Disconnect;
//
// 成功,显示二维码图片...
   if ok then
      begin
         image1.MultiResBitmap.Clear;
         Stream.Position:=0;
         with image1.MultiResBitmap.Add do
          begin
          bitmap.LoadFromStream(Stream);
          Scale:=FWinService.GetWindowScale(Self);
          end;
      end
//
// 失败、提示...
   else
      showmessage('生成二维码失败!');
   FreeAndNil(Stream);
end;

//
// 清除...
procedure TForm1.CornerButton4Click(Sender: TObject);
begin
   memo1.Lines.Clear;
end;

//
// 开始扫描...
procedure TForm1.CornerButton5Click(Sender: TObject);
begin
  if assigned(ClipService) then
     begin
        clipservice.SetClipboard('');
        //
        // 运行ZXing扫描程序
        if not assigned(intent) then
          intent := tjintent.Create;
        intent.setAction(stringtojstring('com.google.zxing.client.android.SCAN'));
        intent.putExtra(tjintent.JavaClass.EXTRA_TEXT,stringtojstring('"SCAN_MODE", "CODE_39"'));
        sharedactivity.startActivityForResult(intent,0);
        //
        // 启动定时器...
        TimeCount := 0;
        timer1.Enabled := true;
     end
   else
      ShowMessage('不支持粘贴板,无法扫描!');
end;

//
// 程序启动时,初始化粘贴板对象...
procedure TForm1.FormCreate(Sender: TObject);
begin
   intent:=nil;
   if not TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,IInterface(ClipService)) then
      ClipService:=nil;
end;

//
// 监视粘贴板并取结果...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//
// 还未有结果,计时...
   if ClipService.GetClipboard.ToString='' then
      begin
         inc(TimeCount);
         if TimeCount>9 then
          begin
          timer1.Enabled := false;
          TimeCount := 0;
          end;
         exit;
      end;
//
// 已有结果,读结果...
   timer1.Enabled := false;
   TimeCount := 0;
   Memo1.Lines.text:=ClipService.GetClipboard.ToString;
   ClipService.SetClipboard('');
end;

end.


4、运行结果:
此帖子包含附件:
JPEG 图像
大小:79.1K
----------------------------------------------
樵夫的大马甲
作者:
男 msfm (清洁工) ★☆☆☆☆ -
盒子活跃会员
2013/10/16 13:21:24
2楼: 樵夫新一代大牛啊
----------------------------------------------
-
作者:
男 qiuyan81 (苦恋树) ★☆☆☆☆ -
普通会员
2013/10/16 13:48:22
3楼: 樵夫对XE5的研究还是挺积极的.
----------------------------------------------
作者:
男 zoujun3281 (无奈) ▲▲▲▲▲ -
普通会员
2013/10/16 14:55:29
4楼: 这个支持
----------------------------------------------
delphi你妹
作者:
男 a5824 (Return) ★☆☆☆☆ -
普通会员
2013/10/16 16:38:17
5楼: 支持一下
----------------------------------------------
-
作者:
男 cjandy (cjandy) ★☆☆☆☆ -
盒子活跃会员
2013/10/17 16:02:04
6楼: 为什么我执行扫描一直不成功?
难道只能使用剪切板的方式吗,不能像Java那样使用onActivityResult吗?
----------------------------------------------
-
作者:
男 hwh6666 (喜刷刷) ★☆☆☆☆ -
普通会员
2013/10/25 13:37:56
7楼: 扫描不行
----------------------------------------------
ok
作者:
男 fuxiucheng (fxc) ★☆☆☆☆ -
普通会员
2013/11/20 10:47:01
8楼: 不只到有没人解决了onActivityResult回调方法
----------------------------------------------
本人是一个忠实的delphi粉丝,一路跟随,只希望她越来越好!
作者:
男 dmho (dmho) ★☆☆☆☆ -
普通会员
2013/11/21 15:39:00
9楼: 扫描成功后 如何返回呢 ?
现在是一直停留在扫描界面.
求解
----------------------------------------------
-
作者:
男 bewail (无双) ★☆☆☆☆ -
盒子活跃会员
2014/2/18 18:09:10
10楼: 学习了!谢谢!
----------------------------------------------
-
作者:
男 hean (hean) ★☆☆☆☆ -
普通会员
2014/2/23 10:38:48
11楼: 学习了,谢谢。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行140.0032毫秒 RSS