Anda di halaman 1dari 7

Cara membuat struk minimarket dengan delphi

Apakah anda pernah berbelanja di minimarket atau di supermarket ? Jika pernah maka
pastinya pada setiap selesai transaksi anda akan mendapatkan struk bukti pembelanjaan.
Barangkali pernah terlintas di benak anda bagaimana kah cara membuat struk seperti di
supermarket atau minimarket, dimana struk selalu berhenti sesuai dengan jumlah item.
Berikut ini adalah script delphi yang saya dapatkan dari berbagai forum dan hasil
bertanya di om google. Barangkali ini dapat bermanfaat untuk anda yang sedang
membutuhkan.
Berikut ini adalah script lengkapnya.
< Awal Script - >
unit Struk;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, 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( , Lebar) + 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
// 123456789012345678901234567890123456789012345678901234567890 //
Write(F, NO KODE & NAMA BARANG QTY HARGA TOTAL);
Write(F, ENTER);
Write(F, );
Write(F, ENTER);
Write(F, 123456789012345678901234567890123456789012345678901234567890);
Write(F, ENTER);
Write(F, RataTengah(1,0));
Write(F, RataTengah(INDOMI RASA BAWANG,6));
Write(F, RataTengah(3,32));
Write(F, RataTengah(1500,45));
Write(F, RataTengah(4500,56));
Write(F, ENTER);
Write(F, RataTengah(2,0));
Write(F, RataTengah(AQUA GELAS,6));
Write(F, RataTengah(20,32));
Write(F, RataTengah(1000,45));
Write(F, RataTengah(20000,56));
Write(F, ENTER);
Write(F, RataTengah(2,0));
Write(F, RataTengah(MONITOR 10 INCHI,6));
Write(F, RataTengah(150,32));
Write(F, RataTengah(1000,45));
Write(F, RataTengah(20000,56));
{
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+En
ter);
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 Script >
Download file http://www.ziddu.com/download/9904661/TestPrintDos.zip.html

procedure TPrintForm.TextOutButnClick(Sender: TObject);


var
ppix,ppiy,mmx,mmy,hmar,vmar,ls:integer;

begin
with printer do
begin
BeginDoc;
With Canvas do
begin
{Establish printer parameters}
ppix:=GetDeviceCaps(Handle,LOGPIXELSX); {Pixels per inch, x direction}
ppiy:=GetDeviceCaps(Handle,LOGPIXELSY); { " " y direction}
mmx:=round(ppix/25.4); {Pixels per mm, x direction}
mmy:=round(ppiy/25.4); { " " y direction}
hmar:=mmx*20; {Horizontal (left hand) margin}
vmar:=mmy*50; {Vertical (top) margin}
Font.PixelsPerInch:=ppix; {BUG!}
Font.Name:='Book Antiqua';
{Set font size and style, Print Heading}
Font.Size:=14;
Font.Style:=[fsBold];
textout(Hmar,Vmar,'This is the heading');
{Set font size and style, get line height for body}
SetFontSize(12);
Font.Style:=[]; {restore font style to regular (no style)}
ls:=textheight('X'); {line spacing = height of the current text.}
{Print body}
textout(Hmar,Vmar+10*ls,'This is 10 lines from the top of the page.');
{Print right justified column}
SetTextAlign(printer.canvas.handle,TA_RIGHT);
textout(Hmar+100*mmx,15*ls,FormatDateTime('d mmmm yyyy',Date));
textout(Hmar+100*mmx,16*ls,'$6,550,000.00');
setTextAlign(printer.canvas.handle,TA_LEFT);
{Print decorative heading}
with brush do
begin
style:=bsSolid;
color:=clGreen;
end;
Rectangle(HMar,ls*20,Printer.PageWidth,ls*23);
Font.Size:=18;
Font.Color:=clWhite;
Font.Style:=[fsBold];
TextOut(hmar+10*mmx,ls*21,'White heading in a green rectangle');
brush.color:=clwhite;
font.color:=clblack;
font.style:=[];
{Print large footer}
Font.Size:=24;

Font.Style:=[fsBold];
ls:=textheight('X');
TextOut(HMar,Printer.PageHeight-TextHeight('X'),'This is the end, my friend!');
end;
endDoc
end;
end;

Anda mungkin juga menyukai