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 disini.

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;

Source Code Aplikasi SMSKU SMS Gateway dengan Delphi

Pada postingan ini saya akan mencoba berbagi source code aplikasi yang pernah saya buat dan sharing di blog ini. buat sobat delphi yang sering berkunjung ke blog sederhana ini pasti tahu tentang aplikasi SMS gateway yang pernah saya sharing postingan saya sebelumnya disini.

Aplikasi SMS Gateway tersebut saya buat menggunakan kombinasi antara MySQL Gammu dan Delphi. Memiliki beberapa fitur utama seperti mendeteksi port modem secara otomatis meskipun fitur ini masih perlu perbaikan lagi. Selain itu terdapat fasilitas Cek Pulsa, SMS Balasan otomatis dan SMS Alert. Saya berharap sobat dapat mengembangkannya menjadi lebih baik.

Source Code Aplikasi SMSKU SMS Gateway dengan Delphi

Setelah saya pikir-pikir, saya kira tidak akan ada gunanya jika saya hanya menyimpan source codenya di komputer. bukankah lebih baik di share karena tidak menutup kemungkinan pasti ada yang membutuhkan. Aplikasi ini ada dua versi. versi pertama Fitur Cek pulsa menggunakan perintah At Command dengan bantuan Comport. Adapun versi kedua adalah pengembangan dari versi pertama termasuk dalam mendeteksi port modem secara otomatis dengan bantuan comport. 

Sebelum anda mendownload saya minta keihkhlasan doa teman-teman agar saya diberikan umur panjang untuk dapat terus berbagi apa yang saya ketahui tentang tetek bengek delphi atau keluarga pascal, diberikan kesehatan, keselamatan dan rizki yang banyak. Amiinn. :)

Untuk Versi pertama silahkan download disini (Source Code SMSKU v.1), Sedangkan untuk versi kedua silahkan sobat download disini (Source Code SMSKU v.2). Dalam File tersebut sudah lengkap dengan Database serta komponen-komponen yang diperlukan. Itulah yang dapat saya sharing tentang source code aplikasi SMS Gateway dengan Delphi dan Gammu. Semoga Bermanfaat dan gunakanlah dengan baik. Jangan Pelit untuk berbagi. Happy Coding. :)  

Menampilkan Tipe Data Text (Memo) di DBGrid Delphi

Berdasarkan pengalaman pribadi saya dalam membangun sebuah aplikasi, seringkali kita mendapatkan masalah-masalah sederhana yang tak terduga. Entah itu yang berkaitan dengan Coding atau source code, teknik membangun aplikasi, ataupun database baik query atau semacamnya. Berdasarkan pengalaman pribadi saya pula postingan ini saya tulis. siapa tahu ada yang mengalami masalah yang sama dan artikel sederhana ini dapat membantu.

Salah satu masalah sederhana yang banyak terjadi adalah bagaimana menampilkan tipe data text mysql kedalam dbgrid di delphi. karena secara default, data yang ditampilkan bertuliskan (MEMO). Hal ini tentu saja dapat menjadi masalah tersendiri lebih lebih jika kita mengutamakan kenyamanan end-user. Perhatikan contoh berikut ini.

Menampilkan Tipe Data Text (Memo) di DBGrid Delphi

Pada gambar diatas terlihat bahwa nilai Field password pada DBGrid tidak ditampilkan karena merupakan tipe data text di mysql. Lantas bagaimana cara menampilkannya? 
Klik dua kali pada komponen ADOQuery. Lalu klik kanan dan Add All Field seperti gambar berikut

Menampilkan Tipe Data Text (Memo) di DBGrid Delphi

Berikutnya klik 1 kali pada field yang bertipe data text (bertuliskan memo di dbgrid) pada contoh ini adalah field password. masuk ke object inspector | event | OnGetText. Tambahkan Coding Berikut di dalam Event OnGetText
Text := Copy(ADOQueryNamaField.AsString, 1, 200);
Menampilkan Tipe Data Text (Memo) di DBGrid Delphi

Form di dalam Form Delphi

anda tentu sering menggunakan aplikasi-aplikasi yang dibangun oleh para developer. entah itu aplikasi yang bersifat berbayar atau free alias gratisan. dari aplikasi-aplikasi yang pernah digunakan tersebut tentu kita sering mendapat ide semisal meniru desain, tampilan, alur program dan hal-hal lain. Contohnya seperti yang akan saya bahas pada postingan ini yaitu bagaimana membuat form berada didalam form.

Sebagai gambaran, pada contoh disini akan terdapat tiga buah form. Form pertama akan kita gunakan sebagai Form Utama (Form Parent). Berikut Form kedua dan ketiga akan kita manfaatkan sebagai Form Child atau form yang akan muncul didalam form Utama. Terdapat juga komponen Panel yang akan digunakan untuk meletakan form child serta menu untuk memanggil form child. Bagaimana, Sampai disini ada gambaran?

Form di dalam Form Delphi

1. Buat 3 Buah Form dalam Projek anda, kemudian simpan

2. Tambahkan Unit Form kedua dan ketiga kedalam uses Unit form pertama

3. Tambahkan sebuah menu untuk memanggil form kedua dan ketiga 

4. Tambahkan sebuah komponen panel. set property | Align = alClient 

Adapun contoh coding untuk memanggil masing-masing form adalah sebagai berikut. Jika masih kurang jelas, anda dapat mendownload contoh source code (projek) disini. selamat mencoba. happy coding. :)
procedure TForm1.FormSatu1Click(Sender: TObject);
var
form_anak_satu : TForm2;
begin
form_anak_satu:=TForm2.Create(nil);
form_anak_satu.Parent:=Panel1;
form_anak_satu.Align:=alClient;
form_anak_satu.Show;
end;

procedure TForm1.FormDua1Click(Sender: TObject);
var
form_anak_dua : TForm3;
begin
form_anak_dua:=TForm3.Create(nil);
form_anak_dua.Parent:=Panel1;
form_anak_dua.Align:=alClient;
form_anak_dua.Show;
end;

Menghitung Selisih Waktu di Delphi

Dalam membangun aplikasi, tidak jarang kita akan dihadapkan pada operasi matematis. Bahkan bisa dikatakan hal itu adalah sebuah hal yang wajib ada. Saya kira tidak perlu untuk menyebutkan contohnya karena saya yakin sobat delphi sudah mengalaminya. Entah itu berkaitan dengan tugas atau dalam mengembangkan aplikasi untuk dipasarkan.

Terlepas dari hal tersebut diatas, dalam membuat aplikasi, tidak jarang pula kita dihadapkan pada persoalan perhitungan waktu atau tanggal. seperti menghitung selisih waktu, membuat sebuah proses yang akan dijalankan setiap waktu yang telah ditentukan dan berbagai macam persoalan lainnya. Pada postingan ini saya ingin berbagi sedikit trik tentang cara menghitung selisih waktu di delphi seperti contoh gambar berikut.

Menghitung Selisih Waktu di Delphi

Pada contoh diatas saya menggunakan dua buah jam yang akan diproses yaitu jam pertama dan jam kedua dimana masing-masing jam diambil dari inputan edit dan hasilnya akan ditampilkan pada komponen label. Untuk melakukan pemrosesan pada contoh diatas kita memerlukan library uses DateUtils. Adapun contoh source codenya dapat anda lihat dibawah ini. 
// Pendefinisian Variabel
var
  Form1: TForm1;
  StartTime, EndTime, TimeDiff : TDateTime;
  sec, jam, menit, detik : word;
  h, m, s : word;
  inc : word;
  Selisih : String;
  Itime : TTime;

// Kode Untuk Button
procedure TForm1.Button4Click(Sender: TObject);
begin
StartTime := StrToTime(Edit1.Text);
EndTime := StrToTime(Edit2.Text);
Selisih := TimeToStr(EndTime-StartTime);
StartTime := StrToTime(Selisih);
  //
h := HourOf(StartTime);
m := MinuteOf(StartTime);
s := SecondOf(StartTime);
inc := (h*sqr(60)+(m*60)+s);
//
Itime := Now();
Itime := IncSecond(Itime,inc);
//
sec := SecondsBetween(Now(),Itime);
jam := sec div 3600;
menit := (sec mod 3600) div 60;
detik := (sec mod 3600) mod 60;
//
Label3.Caption:='Selisih Waktu = '+IntToStr(jam)+' Jam '+IntToStr(menit)+' Menit '+IntToStr(detik)+' Detik';

end;