DelphiZXingQRCode/TestApp/DelphiZXingQRCodeTestAppMainForm.pas
2013-12-18 13:52:16 +11:00

117 lines
2.7 KiB
ObjectPascal

unit DelphiZXingQRCodeTestAppMainForm;
// Demo app for ZXing QRCode port to Delphi, by Debenu Pty Ltd
// www.debenu.com
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DelphiZXingQRCode, Vcl.ExtCtrls,
Vcl.StdCtrls;
type
TForm1 = class(TForm)
edtText: TEdit;
Label1: TLabel;
cmbEncoding: TComboBox;
Label2: TLabel;
Label3: TLabel;
edtQuietZone: TEdit;
Label4: TLabel;
PaintBox1: TPaintBox;
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure edtTextChange(Sender: TObject);
procedure cmbEncodingChange(Sender: TObject);
procedure edtQuietZoneChange(Sender: TObject);
private
QRCodeBitmap: TBitmap;
public
procedure Update;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.cmbEncodingChange(Sender: TObject);
begin
Update;
end;
procedure TForm1.edtQuietZoneChange(Sender: TObject);
begin
Update;
end;
procedure TForm1.edtTextChange(Sender: TObject);
begin
Update;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
QRCodeBitmap := TBitmap.Create;
Update;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
QRCodeBitmap.Free;
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
Scale: Double;
begin
PaintBox1.Canvas.Brush.Color := clWhite;
PaintBox1.Canvas.FillRect(Rect(0, 0, PaintBox1.Width, PaintBox1.Height));
if ((QRCodeBitmap.Width > 0) and (QRCodeBitmap.Height > 0)) then
begin
if (PaintBox1.Width < PaintBox1.Height) then
begin
Scale := PaintBox1.Width / QRCodeBitmap.Width;
end else
begin
Scale := PaintBox1.Height / QRCodeBitmap.Height;
end;
PaintBox1.Canvas.StretchDraw(Rect(0, 0, Trunc(Scale * QRCodeBitmap.Width), Trunc(Scale * QRCodeBitmap.Height)), QRCodeBitmap);
end;
end;
procedure TForm1.Update;
var
QRCode: TDelphiZXingQRCode;
Row, Column: Integer;
begin
QRCode := TDelphiZXingQRCode.Create;
try
QRCode.Data := edtText.Text;
QRCode.Encoding := TQRCodeEncoding(cmbEncoding.ItemIndex);
QRCode.QuietZone := StrToIntDef(edtQuietZone.Text, 4);
QRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
for Row := 0 to QRCode.Rows - 1 do
begin
for Column := 0 to QRCode.Columns - 1 do
begin
if (QRCode.IsBlack[Row, Column]) then
begin
QRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
end else
begin
QRCodeBitmap.Canvas.Pixels[Column, Row] := clWhite;
end;
end;
end;
finally
QRCode.Free;
end;
PaintBox1.Repaint;
end;
end.