Selamat Datang di Kota Solo

Solo The Spirit of Java.

Keraton Surakarta

Karaton Surakarta Hadiningrat adalah istana Kasunanan Surakarta yang didirikan oleh Susuhunan Pakubuwono II (Sunan PB II) pada tahun 1744.

Pintu Masuk Alun-Alun Utara

Sebagai pusat acara tahunan "Sekaten" di Surakarta.

Patung Jendral Slamet Riyadhi

Slamet Riyadhi memimpin tentara Indonesia di Surakarta pada masa perang kemerdekaan melawan Belanda yang ingin kembali menjajah Indonesia.

Pasar Gede Surakarta

Merupakan salah satu pasar besar di Surakarta yang terletak di dekat Balai Kota Surakarta.

Kamis, 10 Desember 2015

Membuat Multiform Tab


Pada kesempatan kali ini, saya akan memberikan tutorial untuk membuat form Multitab dengan menggunakan komponen PageControl pada Delphi XE

Apa itu Multitab? Multitab merupakan tampilan form yang ada pada form yang sudah aktif, sehingga form utama masih aktif meskipun form lain aktif dan akan memberikan tampilan yang lebih menarik seperti pada contoh gambar di bawah ini


Buat tampilan dengan komponen 1 Panel (Align : alLeft), 1 PageControl (Align : alRight), 1 PopupMenu, 1 ImageList, 4 button, dan 4 Form yang akan ditampilkan.

Beri Caption Button masing-masing serta isi gambar Imagelist dengan cara doubleclick komponen tersebut kemudian Add gambar untuk digunakan sebagai gambar sebelah kiri pada tampilan tiap TabForm.

PopupMenu digunakan dengan cara doubleclick komponen, Ketik (Close Tab) untuk menutup form yang tampil dengan menggunakan klik kanan pada PageControl tersebut.


Script coding yang harus dibuat adalah sebagai berikut.

  1. Taruh script berikut dibawah "uses"
  2. type
      TMyFormClass=Class of TForm;
      TMyTabSheet=Class(TTabSheet)
        Private
          TabForm:TForm;
          fFormClass:TMyFormClass;
        Protected
           Constructor Create(Aowner:TComponent); Reintroduce;
        Public
           Constructor New(Aowner:TComponent; YourFormClass:TMyFormClass);
           Property FormClass:TMyFormClass Read fFormClass;
      end;
  3. Buat Private Declaration dengan script berikut
  4. private
        { Private declarations }
    
        //membuat tab baru pada page control
        function BuatTab(FormClass:TMyFormClass): TMyTabSheet;
    
        //menampilkan form yang page page control
        procedure TampilForm(NewFormClass: TMyFormClass; ImgIndex: Integer);
    
        //cek apakah form sudah ditampilkan pada page control
        function CekFormSudahAda(FormClass:TMyFormClass): TMyTabSheet;
  5. Buat Constructor Create & New di bawah implementation
  6. Constructor TMyTabSheet.Create(Aowner: TComponent);
    begin
      Inherited Create(Aowner);
    end;
    
    Constructor TMyTabSheet.New(Aowner: TComponent; YourFormClass: TMyFormClass);
    begin
      Inherited Create(Aowner);
      fFormClass:=YourFormClass;
    end;
  7. Buat Function CekFormSudahAda, BuatTab, dan Procedure TampilForm
  8. function Tfrm_main.CekFormSudahAda(FormClass: TMyFormClass): TMyTabSheet;
    var i: Integer;
        H:TMyTabSheet;
    begin
      {nilai awal result adalah nil. Jika tab yang mengandung form 
       ditemukan, maka fungsi ini akan mengembalikan referensi dari 
       tab tersebut. jika tidak ada maka fungsi mengembalikan nilai
       nil. Penting untuk memberikan nilai awal nil, karena jika
       tidak, fungsi Assigned(CekFormSudahAda) akan selalu 
       mengembalikan nilai True, baik form tersebut sudah ada 
       atau tidak.}
      Result:= nil;
      if PGC1.PageCount<1 then Exit;
    
    
      {cek berdasar caption tab}
      H:=Nil;
      for i := 0 to pgc1.PageCount-1 do
        if TMyTabSheet(PGC1.Pages[i]).FormClass=FormClass then begin
           H:=TMyTabSheet(PGC1.Pages[i]);
           Break;
        end;
      Result:=H;
    end;

    function Tfrm_main.BuatTab(FormClass:TMyFormClass): TMyTabSheet;
    Var H:TMyTabSheet;
    begin
      {fungsi digunakan untuk membuat tabsheet baru, kemudian tab tersebut 'ditancapkan'
       pada page control yang diinginkan, dan otomatis menjadikannya sebagai tab yang aktif
       saat itu}
      Result:=Nil;
      if Assigned(CekFormSudahAda(FormClass)) then Exit;
      H:=TMyTabSheet.New(Self,FormClass);
      H.PageControl:=PGC1;
      H.TabForm:=H.FormClass.Create(Application);
      H.TabForm.BorderStyle:=bsNone;
      H.Caption:=H.TabForm.Caption;
      H.TabForm.Parent:=H;
      H.TabForm.Align:=AlClient;
      PGC1.ActivePageIndex:=PGC1.PageCount - 1;
      H.TabForm.Show;
      Result:=H;
    end;

    procedure Tfrm_main.TampilForm(NewFormClass: TMyFormClass; ImgIndex: Integer);
    var tab: TTabSheet;
    begin
      {jika form sudah ada / ditampilkan dalam tab, maka tab tersebut diaktifkan
      (dijadikan tab aktif. Jika Form belum ada, maka tab baru dibuat, dan form yang
      dimaksudkan diletakkan di tab tersebut}
      if Assigned(CekFormSudahAda(NewFormClass)) then
        pgc1.ActivePageIndex:=CekFormSudahAda(NewFormClass).TabIndex
      else begin
        Tab:=BuatTab(NewFormClass);
        if Assigned(Tab) then
           Tab.ImageIndex:=ImgIndex;
      end;
    end;
  9. Double click pada tiap Button yang ada untuk menampilkan Form di dalam Tab Page Control dan isikan script berikut di setiap Buttonnya:
  10. procedure Tfrm_main.btn1Click(Sender: TObject);
    begin
      //TampilForm(frm_pegawai, 0);
      TampilForm(Tfrm_pegawai,0);
    end;
    
    procedure Tfrm_main.btn2Click(Sender: TObject);
    begin
     // TampilForm(frm_penjualan, 1);
     TampilForm(Tfrm_Penjualan,1);
    end;
    
    procedure Tfrm_main.btn3Click(Sender: TObject);
    begin
      TampilForm(TFrm_User,2);
     // TampilForm(frm_user, 2);
    end;
    
    procedure Tfrm_main.btn4Click(Sender: TObject);
    begin
      TampilForm(TFrm_Pembelian,3);
     // TampilForm(frm_pembelian, 3);
    end;
  11. Untuk close button kita menggunakan PopupMenu dengan script coding :
  12. procedure Tfrm_main.CloseTab1Click(Sender: TObject);
    begin
      //menghapus tab.
     // pgc1.ActivePage.Free;
      TMyTabSheet(PGC1.ActivePage).TabForm.Free;
      PGC1.ActivePage.Free;
    end;
  13. Program Multi Tab sudah dapat dijalankan :) Selamat Mencoba !

Senin, 07 Desember 2015

Mengkoneksikan Delphi dengan Interbase


Mungkin selama ini dalam pendidikan di sekolah / kampus / perguruan tinggi hanya mengajarkan koneksi Delphi 7 dengan database SQL yaitu menggunakan ODBC kemudian menggunakan komponen delphi ADOConnection, ADOQuery, dan DataSet.

Kali ini saya akan menjelaskan mengkoneksi data dari Delphi XE dengan database Interbase.
Sebelum mengkoneksikan Delphi dengan database Interbase, anda harus mengaktifkan database tersebut melalui IBConsole, koneksikan LocalServer dengan Username : SYSDBA dan Password : masterkey.
  1. Buat database dengan cara Klik kanan "Database" > "Create Database.." > Masukkan "File Name" dengan klik "..." sebelah kanan, Tulis Nama & Direktori Folder untuk menyimpan  > OK
  2. Klik kanan pada database yang telah dibuat tersebut, pilih Connect, masukkan Username : SYSDBA dan Password : masterkey.
  3. Buat Tabel pada menu "Table" dengan cara Klik kanan pada Tab sebelah kanan, Kemudian Create.
  4. Masukkan "Table Name", hingga Field yang ingin anda buat.
  5. Pada menu "Generator" create generator dengan "my_gen" dengan value "4"
  6. Buat Trigger dengan menggunakan Interactive SQL dengan cara Pilih Menu "Tools" > "Interactive SQL.."
  7. Masukkan code berikut untuk membuat Trigger:
  8. create trigger gen_pelanggan_key for pelanggan
    before insert as
    begin
         if (new.nomor is null) then
         new.nomor=gen_id(my_gen,1);
    end; 
  9. Database siap digunakan dan dikoneksikan dengan Delphi.

Untuk mengkoneksikan Delphi dengan Interbase, langkah yang harus kita kerjakan adalah :

  1. Buat Projek & Form Delphi & Data Module
  2. Untuk membuat Data Module pilih File > New > Other > Delphi Projects > Delphi Files > Data Module.
  3. Data Module berfungsi untuk jembatan / jalan tengah dari koneksi oleh semua Form yang ada.
  4. Pada Data Module, buat 4 komponen yaitu : IBDatabase, IBTransaction, IBQuery, dan DataSource.
  5. Double Click pada IBDatabase, Pilih Browse > Cari database yang telah disimpan > Masukkan Username: sysdba , Password: masterkey, Checklist Login Promp dihilangkan > Klik tombol Test > Jika ada keterangan "Successful Connection" maka anda berhasil mengkoneksikan database tersebut > Ok.
  6. Pada Properties IBDatabase1, Pilih "DefaultTransaction" pada "IBTransaction1".
  7. Pada Properties IBTransaction1, Pilih "DefaultDatabase" pada "IBDatabase1".
  8. Pada Properties IBQuery1, Pilih "Database" pada "IBDatabase1", kemudian Pilih "SQL" dan pilih button sebelah kanan "..." anda dapat secara Fleksibel memilih query yang ada pada database, secara umum yang digunakan adalah 
    select * from Nama_Tabel ;
  9. Pada Properties DataSource1, Pilih "Dataset" pada "IBQuery1".
  10. Jika semua sudah siap, maka Koneksikan dan Aktifkan semua komponen tersebut pada Properties IBDatabase Connected : "True", IBTransaction & IBQuery Active :"True".
  11. Database siap diolah pada Form yang anda buat.

Membuat Tombol Pencarian pada Listbox


Untuk menggunakan tombol pencarian pada komponen Listbox, maka yg dapat dilakukan adalah mengarahkan Listbox.Selected pada data yang dicari. Tidak bisa hanya menampilkan data yang dicari saja karena tidak ada database di dalamnya.

Caranya adalah :
  1. Buat 3 komponen yaitu TEdit, TButton, dan TListBox.
  2. Pada Listbox Properties MultiSelected: "True" supaya dapat menseleksi data lebih dari 1.
  3. Pada uses tambahkan System.StrUtils;
  4. Masukkan coding ke dalam Button Onclick:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      I: Integer;
    begin
      ListBox1.Items.BeginUpdate;
      try
        for I := 0 to ListBox1.Items.Count - 1 do
          ListBox1.Selected[I] := ContainsText(ListBox1.Items[I], Edit1.Text);
      finally
        ListBox1.Items.EndUpdate;
      end;
    end;