Thursday, March 22, 2018

Buat Print Struk Dengan Delphi

Pernah melihat hasil struk belanja di SUPERMARKET / MINIMAREKET. Panjang kertas yang di keluarkan selalu sesuai dengan jumlah item. Berikut adalah contoh script Delphi untuk membuat Print Struk seperti kaya di SUPERMARKET / MINIMARKET..

Program ini saya dapat setelah tanya sana – tanya sini dan akhirnya ……

—- AWAL PROGRAM —

unit Struk;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RAWPrinter, Buttons, StrUtils;

type
TForm2 = class(TForm)
Button1: TButton;
BitBtn1: TBitBtn;
Button2: TButton;
procedure cetak(Const line: String);
function FormatString(Const VField, VItem : String; Const VLength : Integer; Const VSpace: Char): String;
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
function RataTengah(str: String; Lebar: Integer): String;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

Uses
Winspool, Printers;
{$R *.dfm}
{
posisi.Left := round( (Total_karakter_struk – pj_karakter) / 2);

itu posisi left supaya tetap di tengah

Semoga bermanfaat
}

function TForm2.RataTengah(str: String; Lebar: Integer): String;
var x, y : Integer;
begin
x := Length(str);
y := Lebar – x;
y := x div 2;
result := DupeString(‘ ‘, y) + str;
end;
{
function Rata Tengah(str: String; Lebar: Integer): String;
var x, y : Integer;
begin
x := Length(str);
y := Lebar – x;
y := x div 2;
result := DupeString(‘ ‘, y) + str;
end;
}

function TForm2.FormatString(Const VField, VItem : String; Const VLength : Integer; Const VSpace: Char): String;
var
_SStart : String;
_SStop : String;
_Length : LongInt;
Begin
_SStart := VField;
_SStop := VItem;
_Length := Length(_SStart)+Length(_SStop);
Result := ”;
While _Length + Length(Result) < VLength Do
Result := Result + VSpace;
Result := _SStart + Result + _SStop;
End;

Procedure TForm2.cetak(Const line: string);
Var
BytesWritten : DWORD;
hPrinter, DevMod : THandle;
DocInfo : TDocInfo1;
Device, Drv, Port : Array[0..255] of char;
begin
Printer.PrinterIndex := -1;
Printer.GetPrinter(Device, Drv, Port, DevMod);

If Not WinSpool.OpenPrinter(@Device, hPrinter, nil) Then
Raise Exception.Create(‘Printer tidak ada …’);
Try
DocInfo.pDocName := ‘Struk Penjualan’;
DocInfo.pOutputFile := Nil;
DocInfo.pDatatype := ‘RAW’;
If StartDocPrinter(hPrinter,1,@DocInfo) = 0 Then
Abort;
Try
If Not WritePrinter(hPrinter, @line[1], Length(line),BytesWritten) Then
Abort;
Finally
EndPagePrinter(hPrinter);
End;
Finally
Winspool.ClosePrinter(hPrinter);
End;
end;

procedure TForm2.Button1Click(Sender: TObject);
Const Enter = #13+#10;
begin
cetak(FormatString(‘——————–’,”, 40, ‘ ‘));
cetak(”+ENTER);
Cetak(FormatString(‘Jumlah’,’20′+Enter,40,’ ‘));
cetak(‘TEST CETAK LANGSUNG’+ENTER+ENTER+ENTER);

end;

procedure TForm2.BitBtn1Click(Sender: TObject);
Const Enter = #13+#10;
var
f:textfile;
begin
Try
AssignFile(F,’LPT1′);
Rewrite(F);
Writeln(F,#27,#112,#0,#25,#250); // OpenCashdrawer
Write(F, RataTengah(‘NOTA PENJUALAN’+Enter,40));
Write(F, RataTengah(‘TLP : 022-300300′+Enter,40));
Write(F, ‘========================================’+Enter);
Write(F, ”+Enter+Enter);
Write(F, ‘========================================’+Enter);
Write(F, FormatString(‘Jumlah’,’20′+Enter,40,’ ‘));
Write(F, FormatString(‘Jumlah’,’30′+Enter,30,’ ‘));
Write(F, FormatString(‘Jumlah’,’20′+Enter,20,’ ‘));
Write(F, FormatString(‘Jumlah’,’10′+Enter,10,’ ‘));
Write(F, FormatString(”,’X 20′+Enter,40,’ ‘));
Write(F, ‘========================================’+Enter);
Write(F, FormatString(‘                     Total   : ‘,’200.000′+Enter,40,’ ‘));
Write(F, FormatString(‘                     Bayar   : ‘,’10.000′+Enter,40,’ ‘));
Write(F, FormatString(‘                     Kembali : ‘,’50′+Enter+Enter+Enter,40,’ ‘));
Write(F, ‘Barang yang sudah di beli tidak dapat di’+Enter);
Write(F, ‘tukar / dikembaliakan.’+Enter);
Write(F, ‘========================================’+Enter+Enter+Enter+Enter+Enter);

Writeln(F,#27,#74,#10); // Linefeed
//Writeln(F,#29, #86, #66, #2); // untuk memotong kertas
Closefile(F);
Except on E:Exception Do
Begin
//fmessage.Label1.Caption:=’Cek Koneksi Printer Anda..’;
//fmessage.Show;
End;
End;
end;

procedure TForm2.Button2Click(Sender: TObject);
Const Enter = #13+#10;
var
f:textfile;
begin
Try
AssignFile(F,’LPT1′);
Rewrite(F);
// Writeln(F,#27,#112,#0,#25,#250); // OpenCashdrawer
Write(F, RataTengah(‘tukar / dikembaliakan.’,40));
Writeln(F,#27,#74,#10); // Linefeed
//Writeln(F,#29, #86, #66, #2); // untuk memotong kertas
Closefile(F);
Except on E:Exception Do
Begin
//fmessage.Label1.Caption:=’Cek Koneksi Printer Anda..’;
//fmessage.Show;
End;
End;
End;
end.
————-  AKHIR PROGRAM —-

No comments:

Post a Comment