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.
- Taruh script berikut dibawah "uses"
- Buat Private Declaration dengan script berikut
- Buat Constructor Create & New di bawah implementation
- Buat Function CekFormSudahAda, BuatTab, dan Procedure TampilForm
- Double click pada tiap Button yang ada untuk menampilkan Form di dalam Tab Page Control dan isikan script berikut di setiap Buttonnya:
- Untuk close button kita menggunakan PopupMenu dengan script coding :
- Program Multi Tab sudah dapat dijalankan :) Selamat Mencoba !
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;
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;
Constructor TMyTabSheet.Create(Aowner: TComponent); begin Inherited Create(Aowner); end; Constructor TMyTabSheet.New(Aowner: TComponent; YourFormClass: TMyFormClass); begin Inherited Create(Aowner); fFormClass:=YourFormClass; end;
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;
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;
procedure Tfrm_main.CloseTab1Click(Sender: TObject); begin //menghapus tab. // pgc1.ActivePage.Free; TMyTabSheet(PGC1.ActivePage).TabForm.Free; PGC1.ActivePage.Free; end;
Mohon petunjuk, ketika di run masih Masih ada error pada bagian
BalasHapus1. constructor TMyTabSheet.New(...)
Peringatanya : 'New' berbeda dengan deklarasi sebelum nya.
2.fFormClass:=YourFormClass, pada construktor TMyTabSheet.New itu todak teridentifokasi
Dan masih ada beberapa yang masih error lagi.
Mohon petunjuk nya.
Terima kasih.
Bagus Jalan tanpa error, cuma gimana caranya mengambil data dari form lain di luar dari tabsheet pagecontrolnya. sudah saya coba tapi tidak bisa. gimana ya caranya?
BalasHapusterima kasih.
Bagus, bisa jalan dengan baik, trimakasih...
BalasHapus