Dalam membangun aplikasi, seorang programmer selalu dituntut untuk bisa mengaplikasikan hal-hal yang terkadang tidak mereka ketahui kedalam program yang mereka bangun. Dalam hal ini adanya internet sebagai media komunikasi dapat menjadi solusi tersendiri untuk menjawab ketidakmengertian seseorang. Sebut saja Google, yang seolah dapat menjawab semua persoalan-persoalan yang kita hadapi. eh, kok malah ngelantur ya? haha
Baiklah, Kembali ke topik permasalahan. disini saya akan sedikit berbagi trik bagaimana mengintegrasikan aplikasi yang kita bangun dengan delphi dengan printer Dot Matrix atau yang akrab juga disebut printer kasir. Ini berdasarkan pengalaman pribadi saya sendiri. Hal ini tentu saja sedikit berbeda dengan mencetak dengan printer biasa seperti cannon, epson dsb.
Biar saya jelaskan sedikit, jadi printer kasir yang saya gunakan disini adalah merek Silicon RP76. Agar tidak ada masalah nantinya, pastikan printer dengan komputer sudah terhubung dengan baik dan tidak ada masalah. Oya, Hampir lupa, agar dapat berjalan dengan baik, anda perlu mensetup printer tersebut sebagai default diControl Panel.
Konsepnya adalah, membuat sebuah file *.txt kemudian mencetak file tersebut dengan fungsi cetakfile(). Lalu bagaimana cara menggunakannya?. Pertama, Copy paste unit tersebut dan simpan didalam folder projek anda dengan nama U_cetak.pas. Silahkan panggil unit tersebut (uses) didalam form/unit yang akan bertugas mencetak struk pembayaran. pada contoh ini suatu misal adalam form bayar.
Baiklah, Kembali ke topik permasalahan. disini saya akan sedikit berbagi trik bagaimana mengintegrasikan aplikasi yang kita bangun dengan delphi dengan printer Dot Matrix atau yang akrab juga disebut printer kasir. Ini berdasarkan pengalaman pribadi saya sendiri. Hal ini tentu saja sedikit berbeda dengan mencetak dengan printer biasa seperti cannon, epson dsb.
Biar saya jelaskan sedikit, jadi printer kasir yang saya gunakan disini adalah merek Silicon RP76. Agar tidak ada masalah nantinya, pastikan printer dengan komputer sudah terhubung dengan baik dan tidak ada masalah. Oya, Hampir lupa, agar dapat berjalan dengan baik, anda perlu mensetup printer tersebut sebagai default diControl Panel.
Jika sudah tidak ada masalah dengan persiapan diatas, mari kita lanjutkan ke proses berikutnya. Pertama-tama buka delphi anda. terserah mau menggunakan delphi 7 atau yang lebih baru. Pada contoh ini kita akan menggunakan sebuah unit Cetak yang berisi prosedur dan fungsi untuk mencetak ke printer Kasir. unit tersebut perlu dipanggil dalam unit yang akan menggunakannya. contohnya sebagai berikut
unit U_Cetak;
interface
uses
SysUtils, Printers, WinSpool;
procedure cetakFile(Const sFilename: string);
function RataKanan(const VField, VItem: String; const VLength: Integer;
const VSpace: Char): string;
implementation
function RataKanan(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 cetakFile(Const sFilename: string);
const
cBUFSIZE = 16385;
type
TDoc_Info_1 = record
pDocname: PChar;
pOutputFile: PChar;
pDataType: PChar;
end;
var
Count: Cardinal;
BytesWritten: Cardinal;
hPrinter: THandle;
hDeviceMode: THandle;
Device: Array [0 .. 255] Of Char;
Driver: Array [0 .. 255] Of Char;
Port: Array [0 .. 255] Of Char;
DocInfo: TDoc_Info_1;
f: File;
Buffer: Pointer;
begin
Printer.PrinterIndex := -1;
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
If Not WinSpool.OpenPrinter(@Device, hPrinter, Nil) Then
Exit;
DocInfo.pDocname := 'Report';
DocInfo.pOutputFile := Nil;
DocInfo.pDataType := 'RAW';
If StartDocPrinter(hPrinter, 1, @DocInfo) = 0 Then
begin
WinSpool.ClosePrinter(hPrinter);
Exit;
end;
If Not StartPagePrinter(hPrinter) Then
begin
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
Exit;
end;
System.Assign(f, sFilename);
try
Reset(f, 1);
GetMem(Buffer, cBUFSIZE);
While Not Eof(f) Do
begin
Blockread(f, Buffer^, cBUFSIZE, Count);
If Count > 0 Then
begin
If Not WritePrinter(hPrinter, Buffer, Count, BytesWritten) Then
begin
EndPagePrinter(hPrinter);
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
FreeMem(Buffer, cBUFSIZE);
Exit;
end;
end;
end;
FreeMem(Buffer, cBUFSIZE);
EndDocPrinter(hPrinter);
WinSpool.ClosePrinter(hPrinter);
finally
System.CloseFile(f);
end;
end;
end.
Konsepnya adalah, membuat sebuah file *.txt kemudian mencetak file tersebut dengan fungsi cetakfile(). Lalu bagaimana cara menggunakannya?. Pertama, Copy paste unit tersebut dan simpan didalam folder projek anda dengan nama U_cetak.pas. Silahkan panggil unit tersebut (uses) didalam form/unit yang akan bertugas mencetak struk pembayaran. pada contoh ini suatu misal adalam form bayar.
usesKemudian, Source code dibawah ini adalah source code contoh pada button cetak untuk mencetak ke printer Kasir Dot Matrix
...., U_Cetak;
procedure TBayar.BtnCetak(Sender: TObject);
var
Enter = #13 + #10;
txtFile: TextFile;
nmfile : string;
begin
// Buat File dengan Nama Struk.txt
nmfile := GetCurrentDir + '\struk.txt';
AssignFile(txtFile, nmfile);
Rewrite(txtFile);
WriteLn(txtFile, '========================================');
WriteLn(txtFile, ' '+'Judul Nota'+' ');
WriteLn(txtFile, ' '+'Alamat Toko'+' ');
WriteLn(txtFile, ' '+'No Telpon'+' ');
WriteLn(txtFile, '========================================');
WriteLn(txtFile, 'No. Nota : ' + 'No Faktur' );
WriteLn(txtFile, 'Tanggal : ' + FormatDateTime('dd-mm-yyyy hh:mm:ss', now));
WriteLn(txtFile, 'Kasir : ' + 'Nama Kasir');
WriteLn(txtFile, '========================================');
WriteLn(txtFile, 'Nama Barang');
WriteLn(txtFile, RataKanan(' QTY Harga Disc ', 'Sub Total', 35, ' '));
WriteLn(txtFile, '========================================');
WriteLn(txtFile, 'Nama Barang');
WriteLn(txtFile, RataKanan
(' ' + 'Jumlah Barang' + ' ' + 'X' +' '+'Harga Barang'+' '+'Diskon', 'Sub Total', 35, ' '));
WriteLn(txtFile, '========================================');
WriteLn(txtFile, RataKanan('Total : ', 'Total Bayar', 35,
' '));
WriteLn(txtFile, RataKanan('Bayar : ', 'Uang Bayar', 35,
' '));
WriteLn(txtFile, RataKanan('Kembali : ', 'Uang Kembali', 35,
' '));
WriteLn(txtFile, '========================================');
WriteLn(txtFile, ' Jumlah Item : Jumlah Item');
WriteLn(txtFile, '========================================');
WriteLn(txtFile, ' Ini Footer ');
WriteLn(txtFile, '========================================');
WriteLn(txtFile, Enter + Enter + Enter + Enter + Enter + Enter + Enter + Enter + Enter + Enter );
CloseFile(txtFile);
// Cetak File Struk.txt
cetakFile('struk.txt');
end;
Tidak ada komentar:
Posting Komentar