Source Code SMS Polling Menggunakan Gammu & Delphi

Source Code SMS Polling Menggunakan Gammu & Delphi

SMS Polling biasanya diimplementasikan dalam aplikasi pemungutan suara. Hal ini bertujuan untuk mempercepat proses perhitungan suara. Ambil contoh dalam pemilihan ketua dalam sebuah organisasi. SMS Polling seringkali digunakan karena berbagai alasan tersendiri. Selain itu, Aplikasi Quick Count pemilu juga menggunakan konsep SMS Polling. Dalam istilah lain SMS Polling juga dikenal dengan nama SMS Voting.

Pada padasarnya, untuk membangun sebuah aplikasi berbasis SMS, kita harus bekerja sama dengan Operator Telpone (XL/AXIS, Telkomsel dll). Namun demikain hal itu akan memerlukan biaya yang tidak sedikit. Selain itu Operator Telephone tentu juga memberikan syarat yang tidak mudah. Berdasarkan hal tersebut, ada opsi lain yang dapat digunakan untuk membuat aplikasi SMS Polling atau SMS Voting yaitu menggunakan SMS Gateway dengan bantuan Gammu dan Delphi.

Cara kerjanya sederhana yaitu pengguna tidak akan mengirim request ke nomor operator melainkan ke nomor SIM Card yang dijadikan Server (SMS Center). Hal ini biasanya menggunakan format tertentu dengan pemisah kata seperti : Nama#NoKTP#Alamat  dan semacamnya tergantung kebutuhan. Selanjutnya dari sisi aplikasi akan memecah String yang dikirimkan oleh pengguna. Caranya sudah saya bahas sebelumnya disini.

Beberapa tahun lalu saya pernah mengembangkan aplikasi SMS Polling yang digunakan oleh Organisasi Pecinta Alam (MAPALA STMIK Bumigora) dalam melakukan pemilihan Ketua Umum. Pada kesempatan ini saya akan mencoba membagikan Source Code aplikasi ini barangkali ada yang membutuhkan sebagai referensi atau ingin mengembangkan. Aplikasi ini memiliki kemampuan sebagai beriku :

1. Aplikasi Memiliki kemampuan untuk memproses sms masuk yang dikirimkan oleh pemilih (anggota cantha pratala) berdasarkan parameter yang telah ditentukan;

2. Pramater pengiriman SMS yang dapat diproses oleh aplikasi dapat dikonfigurasikan oleh pengguna;

3. Aplikasi memiliki fitur grafik untuk melihat jumlah suara masing-masing kandidat secara realtime;

4. Aplikasi memiliki kemampuan untuk mengirimkan balasan SMS yang dikirimkan oleh pengguna jika benar ataupun salah;

5. Aplikasi memiliki utilitas untuk melakukan Konfigurasi gammu dengan perangkat modem melalui antarmuka aplikasi;

6. Gammu SMSD sebagai Engine SMS Gateway;

7. Aplikasi memiliki fasilitas untuk melakukan backup dan restore data.

Silahkan Download disini. Happy Coding!
Source Code Aplikasi TOPSIS Menggunakan Delphi

Source Code Aplikasi TOPSIS Menggunakan Delphi

TOPSIS adalah salah satu metode sistem pendukung keputusan (SPK) atau dalam bahasa inggris disebut Decision Support System (DSS) yang banyak digunakan diseluruh dunia. TOPSIS sendiri merupakan singkatan dari Technique For Others Reference by Similarity to Ideal Solution. Metode ini diperkenalkan pertama kali pada tahun 1981 oleh yoon dan hwang.

Beberapa tahun yang lalu saya membuat sebuah projek menggukana metode TOPSIS. Projek ini digunakan oleh Desa Batu Jangkih Kecamatan Praya Barat Daya kabupaten Lombok Tengah dalam menentukan masyarakat Miskin. Adapun kategori yang digunakan untuk menentukannya meliputi : pendapatan, kondisi rumah, tanggungan, kendaraan dan penerangan.

Aplikasi ini pernah saya sharing sebelumnya pada postingan saya disini. Dengan beberapa alasan termasuk karena banyak teman-teman yang minta dikirimin source codenya akhirnya pada postingan ini saya bermaksud untuk mebagikannya ke teman-teman. Selain itu saya kira akan lebih bermanfaat jika saya bagikan.

Tampilan aplikasi ini dapat teman-teman lihat pada postingan saya sebelumnya melalui link diatas. Aplikasi ini menggunakan Database MySQL dan beberapa komponen diantaranya sebagai berikut :

1. Alpha Skin : Untuk membuah tampilan aplikasi menjadi lebih menarik;

2. DBGridEh : Untuk membuat tampilan DBGrid menjadi lebih menarik;

3. Chash : Untuk menyembunyikan informasi Password Pengguna (Hashing).

Ketiga komponen tersebut harus terpasang di Delphi agar source code dapat berjalan dengan Baik. Adapun komponen-komponen saya saya sebutkan diatas sudah saya posting sebelumnya pada blog ini. silahkan dicari. Selain itu untuk berkomunikasi dengan database digunakan ODBC.  Tertarik ingin mempelajari? Silahkan donwload Source Code + Databasenya disini.

Source Code Aplikasi SMS Pengingat Jadwal Mengajar Guru

Jadwal mengajar merupakan sebuah acuan yang digunakan oleh sekolah untuk menentukan waktu mengajar guru. Jadwal mengajar akan menjadikan waktu mengajar guru menjadi lebih terstruktur dan sistematis sehingga terhindar dari waktu mengajar yang sama dalam waktu dan ruangan yang sama. Penggunaan jadwal mengajar tidak terbatas hanya untuk sekolah saja melainkan diterapkan juga di perguruan tinggi swasta maupun negeri serta instansi-instansi pendidikan lain.

Source Code Aplikasi Pengingat Jadwal Mengajar Guru Berbasis SMS

Pada implementasinya, jadwal pelajaran dicetak dalam kertas kemudian dibagikan kepada guru dan murid. Selain itu, tidak jarang jadwal pelajaran ditempel pada ruangan-ruangan tertentu agar memudahkan guru dan murid mengingat jadwal yang telah ditentukan. Penerapan jadwal pelajaran seperti yang telah disebutkan diatas adalah lumrah dilakukan oleh instansi-instansi pendidikan guna penggunaan jadwal dapat dilakukan dengan maksimal.    

Seorang guru/pengajar seringkali memiliki kesibukan selain mengajar seperti menggeluti bisnis tertentu untuk mendapatkan penghasilan tambahan serta kesibukan-kesibukan lain yang tidak dapat diprediksi. Hal ini tentu akan mengganggu jadwal pelajaran yang telah ditentukan apabila kesibukan tersebut berada pada waktu yang sama dengan waktu mengajar. Pada kondisi tersebut, tidak jarang seorang Pengajar lupa dengan waktu mengajarnya.          

Aplikasi ini ditujukan sebagai alat bantu untuk mengingatkan seorang pengajar melalui Short Message Service (SMS) tentang waktu mengajar berdasarkan jadwal yang telah ditentukan. Aplikasi yang akan dibangun memiliki kemampuan untuk mengirimkan SMS kepada guru/pengajar beberapa menit sebelum waktu mengajar. Adapun waktu pengiriman dan SMS yang akan dikirimkan dapat dikonfigurasi oleh pengguna. Selain itu, terdapat pengecualian dalam pengiriman SMS seperti hari libur. Hal ini juga dapat disetting oleh pengguna.

Berikut admin sharing Source Code Aplikasi Berbasis SMS Menggunakan Delphi & Gammu. Aplikasi ini adalah salah satu bentuk implementasi dari SMS Reminder (Pengingat). Projek ini saya buat beberapa tahun lalu dan saya rasa akan lebih bermanfaat jika saya membagikannya pada blog ini. Silahkan Download disini
Membuat Aplikasi Chat Menggunakan Indy Delphi

Membuat Aplikasi Chat Menggunakan Indy Delphi

Saat ini aplikasi chating memang menjadi solusi tersendiri dalam berkomunikasi. lebih-lebih untuk mereka yang terpisahkan oleh jarak dan waktu. Perkembangan aplikasi chatting saat ini sudah banyak merambah ke aplikasi berbasis smartphone semisal android, iphone dan semacamnya. tentu anda juga sering menggunakan aplikasi chating seperti whatsapp dan telegram.

pada postingan sebelumnya saya sudah pernah berbagi source code aplikasi chating yang dibangun menggunakan protokol UDP pada delphi. jika anda belum membacanya silahkan cek disini.

Pada kesempatan ini, saya akan berbagi sebuah contoh sederhana aplikasi chating menggunakan komponen Indy pada delphi. Indy merupakan komponen yang banyak digunakan untuk membangun aplikasi berbasis jaringan. perhatikan bahwa Ini bukan sepenuhnya aplikasi chating, melainkan hanya sebuah contoh sederhana bagaimana mengirim string menggunakan komponen indy pada komputer yang berbeda. Biar gak panjang lebar, mari kita mulai..

1. Aplikasi Server

Pertama, mari kita mulai dari membuat aplikasi server. Pada form anda silahkan tambahkan 1 buah komponen IdTCPServer, 1 buah komponen memo dan 1 buah komponen Checkbox. Berikut adalah source code untuk semua event yang ada pada form.
  
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
    if ( CheckBox1.Checked = True ) then
    IdTCPServer1.Active := True
  else
    IdTCPServer1.Active := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IdTCPServer1.Bindings.Add.IP   := '127.0.0.1';
  IdTCPServer1.Bindings.Add.Port := 6000;
end;

procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
begin
    Memo1.Lines.Add('A client connected');
end;

procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
begin
   Memo1.Lines.Add('A client disconnected');
end;

procedure TForm1.IdTCPServer1Exception(AContext: TIdContext;
  AException: Exception);
begin
  Memo1.Lines.Add('A exception happend !');
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  LLine: String;
begin
  LLine := AContext.Connection.IOHandler.ReadLn();
  Memo1.Lines.Add(LLine);
  AContext.Connection.IOHandler.WriteLn('OK');
end;     

2. Aplikasi Client

Selanjutnya buat project baru untuk aplikasi client. tambahkan 1 buah komponen IdTCPClient, 1 buah komponen checkbox, 3 buat komponen Edit (IP Address, Port dan Tempat mengetik pesan yang akan dikirim), 1 buah memo dan 1 buah komponen button (untuk mengirim pesan). Berikut adalah source code pada form aplikasi client.
  
procedure TForm1.CheckBoxConnectDisconnetChange(Sender: TObject);
begin
    if ( CheckBoxConnectDisconnet.Checked = True ) then
  begin
    IdTCPClient1.Host := Edit2.Text;
    IdTCPClient1.Port := StrToInt(Edit3.Text);
    IdTCPClient1.Connect;
  end
  else
    IdTCPClient1.Disconnect
end;

procedure TForm1.Button1Click(Sender: TObject);
  var
  LLine: String;
begin

  IdTCPClient1.IOHandler.WriteLn(Edit1.Text);
  Edit1.Text := '';
  LLine := IdTCPClient1.IOHandler.ReadLn();
  if ( LLine = 'OK' ) then
      Memo1.Lines.Add('Server says it has received your String');

end;

procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
    Memo1.Lines.Add('Client connected with server');
end;

procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);
begin
  Memo1.Lines.Add('Client disconnected from server');
end;          

Contoh Aplikasi TOPSIS dengan Delphi

Dewasa ini aplikasi-aplikasi pendukung keputusan sudah banyak dikembangkan oleh para programmer. Aplikasi Sistem pendukung keputusan (SPK) atau juga dikenal dengan Decision Support System (DSS) memiliki banyak metode dalam menyelesaikan permasalahan. Salah satu metode yang cukup populer adalah metode Technique For Others Reference by Similarity to Ideal Solution atau yang juga dikenal dengan nama TOPSIS.

Metode ini pertama kali dikenalkan oleh Yoon dan Hwang pada tahun 1981. Metode TOPSIS menggunakan prisip bahwa alternatif yang dipilih harus mempunyai jarak terdekat dari solusi ideal positif dan terjauh dari solusi ideal negatif. TOPSIS dapat digunakan untuk menentukan penerima beasiswa, penentuan kelulusan, penentuan penerima sumbangan dan berbagai macam kasus yang memerlukan suatu keputusan.

Pada contoh program topsis yang akan saya sharing kali ini adalah tentang sistem pendukung keputusan untuk menentukan masyarakat yang layak menerima bantuan. adapun kriteria yang menjadi acuan diambil dari kantor kepala desa batu jangkih lombok tengah. berikut adalah contoh screen shoot pada setiap proses TOPSIS yang dilakukan oleh program ini.

Contoh Aplikasi TOPSIS dengan Delphi

Contoh Aplikasi TOPSIS dengan Delphi

Contoh Aplikasi TOPSIS dengan Delphi

Contoh Aplikasi TOPSIS dengan Delphi

Contoh Aplikasi TOPSIS dengan Delphi

Jika anda berminat silahkan Download disini (32 bit). Username = admin dan Password = admin. Happy Coding dan jangan lupa komentarnya. Terima kasih telah berkunjung. :)

Expand Grid, DBGrid di dalam DBGrid Delphi

Expand Grid, DBGrid di dalam DBGrid Delphi

Melihat gambar diatas, saya kira anda sudah paham apa maksud saya. Entah dengan kata apa saya harus membahasakan, yang jelas saya juga bingung dengan istilahnya. Haha. Namun belakangan saya baru tahu kalau ternyata namanya adalah Expand Grid. Istilahnya DB Grid didalam DBGrid atau Tabel didalam tabel. Terkadang teknik semacam ini juga diperlukan dalam membangun aplikasi untuk memberikan informasi spesifik pada sebuah tabel. mari perhatikan relasi tabel berikut ini.

Expand Grid, DBGrid di dalam DBGrid Delphi

Terdapat dua buah tabel pada gambar diatas yaitu tabel siswa dan tabel orang tua siswa dimana kedua tabel tersebut saling berelasi dengan field no_kk. Suatu misal saya bisa saja menampilkan semua isi tabel siswa dalam sebuah DBGrid. Mudah saja. Masalah yang muncul adalah bagaimana jika hendak melihat informasi orang tua siswa? tentu akan menjadi tidak efektif dan efisien jika menampilkannya dalam DBGrid yang berbeda. 

Seorang pengguna bisa saja bingung jika harus bolak balik melihat ke Tabel siswa atau tabel guru dengan mengacu pada field no_kk. Akan lebih efektif jika kita membuat Expand Grid dengan cara menampilkan informasi orang tua siswa didalam DBGrid Siswa itu sendiri berdasarkan no_kk tersebut. Lalu bagaimana melakukannya?

1. Hal Pertama yang harus anda ketahui bahwa DBGrid yang digunakan untuk membuat Expand Grid tersebut tidak tersedia secara default oleh Delphi oleh karena kita perlu menginstallnya silahkan download komponen EhLib pada postingan saya sebelumnya.

2. Kedua, Silahkan Install Komponen tersebut. Cara installnya sangat mudah. Tutup Delphi Anda terlebih dahulu. Terdapat file ehlibinstaller didalam folder installer.

3. Silahkan Download Source Code lengkap dan Databasenya disini. Mohon Maaf karena saya tidak bisa menjelaskan cara penggunaannya secara langsung. anda dapat mempelajarinya dari source code projek tersebut. terima kasih. Keep Coding. :)
Contoh Penggunaan Try Except di Delphi

Contoh Penggunaan Try Except di Delphi

Salah satu teknik yang penting dalam membuat aplikasi adalah kemampuan dalam melakukan exception handling atau error handling alias penanganan kesalahan. Hal ini dapat dikatakan menjadi inti jika seorang programmer hendak membangun sebuah aplikasi. Programmer harus mampu memikirkan kemungkinan-kemungkinan yang akan terjadi seperti aksi-aksi yang akan dilakukan oleh pengguna aplikasi, kesalahan atau error yang bahkan belum terjadi. hal inilah yang harus dipelajari oleh seorang programmer tentunya.

Dalam memprogram aplikasi tidak hanya sampai aplikasi dapat berjalan tapi tentu saja harus tetap dilakukan perbaikan dan perbaikan karena sebuah program tidak mungkin akan langsung sempurna. perlu terus diperbarui untuk memberbaiki kekurangan dan kesalahan-kesalahan yang ada.

Error dalam program terjadi karena adanya bug, bug terjadi karena adanya kesalahan dalam memprogram suatu aplikasi. kesalahan tersebut tidak selalu dalam penulisan coding tapi dapat juga dalam logika seorang programmer.

Dalam bahasa pemrograman objek pascal, ada sebuah utilitas yang dapat kita manfaatkan paling tidak untuk mengurangi kemungkinan terjadinya error dalam aplikasi. Dalam delphi kita dapat menggunakan Try Except. Teknik ini adalah dengan memberikan pengecualian jika terjadi error pada aksi yang akan dilakukan maka akan dilempar ke aksi yang lain. Analoginya seperti berikut :

try 
begin
aksi_utama_yang_akan_dijalankan;
end 
except
aksi_jika_terjadi_kesalahan_atau_error_pada_aksi_utama
end;

Bagaimana? Sudah ada gambaran? dengan teknik tersebut setidaknya kita dapat meminimalisir terjadinya error pada aplikasi. Berikut adalah contoh source code Try Except sederhana yang akan menjumlahkan angka yang diambil dari TEdit. Output akan ditulis di komponen Edit3, namun jika terjadi error sebuah pesan "Ops, terjadi kesalahan" yang akan ditampilkan.

  try
    begin
    Edit3.Text:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text));
    end
      except
        MessageDlg('Ops, Ada Kesalahan',mtWarning,[mbok],0);
    end;


Mencetak Struk Ke Printer Kasir dengan Delphi

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.

Mencetak Struk Ke Printer Kasir dengan Delphi

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.

Mencetak Struk Ke Printer Kasir dengan Delphi

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. 
uses
  ...., U_Cetak;

Kemudian, Source code dibawah ini adalah source code contoh pada button cetak untuk mencetak ke printer Kasir Dot Matrix
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;

Fungsi Terbilang dengan Koma Delphi

Fungsi terbilang dapat kita manfaatkan untuk menterjemah atau mengkonversi angka menjadi huruf. pada implementasinya dalam pembuatan aplikasi, khususnya aplikasi yang memerlukan perhitungan matematis seperti aplikasi penjualan dan aplikasi-aplikasi lain tentu terkadang diperlukan untuk melakukan konversi angka menjadi huruf. hal ini untuk menjadikan aplikasi menjadi lebih user friendly karena terkadang seorang user agak malas untuk membaca angka.

Fungsi Terbilang dengan Koma Delphi

pada postingan sebelumnya saya pernah membahas tentang fungsi terbilang rupiah yang dapat anda lihat disini. pada postingan tersebut terdapat kekurangan dalam source codenya yaitu tidak bisa melakukan konversi angka yang memiliki koma menjadi format huruf. oleh karenanya pada postingan ini saya ingin berbagi tentang fungsi terbilang rupiah yang dapat menkonversi angka pecahan atau koma. adapun contoh source code fungsinya dapat anda lihat dibawah ini.
// Fungsi Untuk Merubah Angka Menjadi Huruf/Terbilang
function Terbilang(sValue: string):string;
const
Angka : array [1..20] of string =
('', 'Satu', 'Dua', 'Tiga', 'Empat',
'Lima', 'Enam', 'Tujuh', 'Delapan',
'Sembilan', 'Sepuluh', 'Sebelas',
'Duabelas', 'Tigabelas', 'Empatbelas',
'Limabelas', 'Enambelas', 'Tujuhbelas',
'Delapanbelas', 'Sembilanbelas');
sPattern: string = '000000000000000';

var
S,kata : string;
Satu, Dua, Tiga, Belas, Gabung: string;
Sen, Sen1, Sen2: string;
Hitung : integer;
one, two, three: integer;

begin
One := 4;
Two := 5;
Three := 6;
Hitung := 1;
Kata := '';
S := copy(sPattern, 1, length(sPattern) - length(trim(sValue))) + sValue;
Sen1 := Copy(S, 14, 1);
Sen2 := Copy(S, 15, 1);
Sen := Sen1 + Sen2;
while Hitung < 5 do
begin
Satu := Copy(S, One, 1);
Dua := Copy(S, Two, 1);
Tiga := Copy(S, Three, 1);
Gabung := Satu + Dua + Tiga;

if StrToInt(Satu) = 1 then
Kata := Kata + 'Seratus '
else
if StrToInt(Satu) > 1 Then
Kata := Kata + Angka[StrToInt(satu)+1] + ' Ratus ';

if StrToInt(Dua) = 1 then
begin
Belas := Dua + Tiga;
Kata := Kata + Angka[StrToInt(Belas)+1];
end
else
if StrToInt(Dua) > 1 Then
Kata := Kata + Angka[StrToInt(Dua)+1] + ' Puluh ' +
Angka[StrToInt(Tiga)+1]
else
if (StrToInt(Dua) = 0) and (StrToInt(Tiga) > 0) Then
begin
if ((Hitung = 3) and (Gabung = '001')) or
((Hitung = 3) and (Gabung = ' 1')) then
Kata := Kata + 'Seribu '
else
Kata := Kata + Angka[StrToInt(Tiga)+1];
end;

if (hitung = 1) and (StrToInt(Gabung) > 0) then
Kata := Kata + ' Milyar '
else
if (Hitung = 2) and (StrToInt(Gabung) > 0) then
Kata := Kata + ' Juta '
else
if (Hitung = 3) and (StrToInt(Gabung) > 0) then
begin
if (Gabung = '001') or (Gabung = ' 1') then
Kata := Kata + ''
else
Kata := Kata + ' Ribu ';
end; 
Hitung := Hitung + 1;
One := One + 3;
Two := Two + 3;
Three := Three + 3;
end;

if length(Kata) > 1 then Kata := Kata;

Result := Kata;
end;

// Fungsi Untuk Convert Angka Jadi Huruf
function ConvKeHuruf(inp: string): string;
var
a,b,c,Poskoma,PosTitik : integer;
temp,angka,dpnKoma,BlkKoma : string;
AdaKoma: boolean;

begin
  PosKoma:= pos(',',Inp);
  PosTitik:= pos('.',Inp);
    if (Poskoma<>0) or (posTitik<> 0) then
        begin
        adaKoma:= true;
        if PosKoma= 0 then posKoma:= PosTitik;
        end else
        begin
        adakoma:= False;
        DpnKoma:= inp;
        end;

// Jika ada Koma
if adakoma then
   begin
    dpnkoma:= copy(inp,1,posKoma-1);
    blkKoma:= Copy(inp,posKoma+1,length(inp)-posKoma);
    if trim(DpnKoma)='0' then
       temp:= 'Nol'+ ' Koma ' + terbilang(blkKoma)
        else
          temp:= Terbilang(dpnKoma)+ ' Koma ' + Terbilang(blkKoma);
// Jika Tidak ada Koma
   end else begin
   temp:=Terbilang(dpnKoma);
   end;

   Result:= temp;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:=Terbilang(Edit1.Text);
end;

// Menggunakan
procedure TForm1.Button2Click(Sender: TObject);
begin
Label2.Caption:=ConvKeHuruf(Edit2.Text);
end;

Integrasi Barcode Reader dengan Delphi

Apa kabar Sobat Delphier? Sudah lama rasanya saya tidak posting di blog ini. Maklum sekarang saya sudah sibuk kerja. hehe. Pada kesempatan minggu pagi ini saya akan mencoba untuk sharing pengalaman terkait bagaimana mengintegrasikan Barcode Reader dengan IDE Delphi. Jadi, buat sobat yang masih bingung terkait cara membaca barcode reader di Delphi, Simak penjelasan berikut ini.
Integrasi Barcode Reader dengan Delphi

Postingan ini saya buat berdasarkan pengalaman pribadi saya ketika membuat sebuah aplikasi penjualan untuk sebuah toko. Sebenarnya awalnya saya juga tidak mengerti tentang konsep atau teknik agar aplikasi yang kita bangun dengan delphi dapat membaca barcode. tapi saya beranikan diri untuk menerima tawaran itu karena waktu itu saya lagi butuh uang. haha

Dan benar saja, Tuhan memang Maha Tahu, seperti kata pepatah "dimana ada kemauan maka disitu ada jalan". ternyata konsep untuk mengintegrasikan Barcode Reader dengan Delphi sangat mudah.

1. Pastikan anda sudah memiliki alatnya. Seperti gambar diatas.

2. Pastikan Barcode Reader Sudah terhubung dengan baik dengan Komputer atau PC anda.

3. Buka Notepad, Silahkan Coba Barcode dengan men-Scan sebuah barcode seperti Barcode yang ada di Bungkus Rokok atau barang-barang lain yang ada disekitar anda.

4. Sampai disini, Barcode Reader akan secara otomatis Mempaste Hasil Scan ke Halaman Notepad. Bagaimana? Sudah ada gambaran?. Kalian masih ada pertanyaan bagaimana mengintegrasikan dengan delphi?

5. Untuk mengintegrasikan dengan Delphi, Kita dapat memanfaatkan komponen TEdit kemudian pada saat TEdit Aktif, Proses scan dilakukan jika proses scan berhasil maka Barcode Reader akan mempaste hasil Scan ke Komponen TEdit. Setelah itu kita dapat memanfaatkan event OnChange milik komponen Edit untuk melakukan pencarian data pada Database atau aksi-aksi lain. contoh code pencarian adalah sebagai berikut
procedure TfPenjualan.Edit5Change(Sender: TObject);
var
stok : integer;
jmll : String;
begin
with DM.QCari do begin
Close;
SQL.Clear;
SQL.Text:='select jml_stok from data_barang where barcode="'+Edit3.Text+'"';
ExecSQL;
Open;
end;
if DM.QCari.RecordCount >=1 then
   begin
   if Edit5.Text='' then Edit5.Text:='0';
   stok := StrToInt(DM.QCari['jml_stok'])-StrToInt(Edit5.Text);
   jmll := DM.QCari['jml_stok'];
   if stok < 0 then
      begin
      MessageDlg('Maaf, Stok Barang tidak Mencukupi!'+sLineBreak+'Jumlah Barang Saat Ini '+jmll,mtError,[mbok],0);
      Edit5.Text:='0';
      Edit5.SetFocus;
      end;
   end;
end;