Cara Membuat Form Tabs di Delphi

Untuk membuat Form Tabs di delphi anda bisa menggunakan komponen TChromeTabs. Jika anda sudah menginstall komponen tersebut silahkan pelajari cara membuat form dengan mudah di artikel saya sebelumnya.Pada pembuatan form tabs kali ini penulis menggunakan konsep MDI Form di mana form tersebut adalah form utama yang akan menampilkan form-form lainnya.  Jika sudah menguasai konsepnya anda bisa dengan mudah menerapkan ke form jenis lain semisal SDI Form.

Property yang harus disetting

Atur property Options->Display->AddButton->Visibility di komponen TchromeTabs anda, set ke avNone

Script Membuat Form Tabs

Berikut adalah script inti untuk menampilkan Form:

procedure TFrmMain.ShowChildForm(FormClass: TFormClass; act: TAction;
  frmname: string);
  var frm:TFrmTemplate;
i:Integer;
activeTab:TChromeTab;
begin
Frm:=nil;
   if not Assigned(Application.FindComponent(frmname)) then
    frm:=FormClass.Create(Application) ;

    if Frm<>nil then
    begin


       Frm.Caption:=act.Caption;
     CreateTabs(Frm);

    Frm.OnAfterclose:=OnChildClose;

    Frm.Show;
    end;
    for i:=0 to chrmtbs1.Tabs.Count-1 do
    begin
      if string(chrmtbs1.Tabs[i].Data)=frmname then
      begin
        activeTab:=chrmtbs1.Tabs[i];
        Break;
      end;
    end;
    if activeTab<>nil then
    begin
    chrmtbs1ActiveTabChanged(chrmtbs1,activeTab);
    activeTab.Active:=True;
    end;
end;

Keterangan:

  • chrmtbs1 adalah komponen TchromeTabs
  • TFormclass adalah tipe data class reference yang dibuat sendiri.  Adapun tipe data tersebut harus didefinisikan terlebih dahulu melalui script berikut:
    
    type
    TFormClass=class of Tfrmtemplate;
    
  • OnAfterclose adalah event yang kita buat sendiri yang dibuat di class TfrmTemplate.  Event itu terjadi setelah form child di tutup di mana ketika event itu terjadi maka tabs yang muncul harus juga dihapus.

Dan berikut ini adalah script OnChildClose:


procedure TFrmMain.OnChildClose(Sender: TObject);
var i:integer;
frm:TFrmTemplate;
begin
frm:=TFrmTemplate(Sender);
for i:=0 to chrmtbs1.Tabs.Count-1 do
begin
if chrmtbs1.Tabs[i].Data=PChar(frm.Name) then
begin
if chrmtbs1.Tabs[i]<>nil then
chrmtbs1.Tabs.DeleteTab(i,False);
Break;
end;
end;

Dan berikut adalah langkah membuat event OnAfterClose sebagaimana tersebut di atas:

  • Definisikan variabel event terlebih dahulu di bagian private
    
      FOnAfterClose:TNotifyEvent;
    
  • Ketik script berikut untuk mengoverride event Onclose default dari delphi:
    
    procedure TFrmTemplate.WMSysCommand(var MSG: TWMSysCommand);
    begin
     if MSG.CmdType=SC_CLOSE then
     begin
    
     if Assigned(FOnAfterClose) then
    FOnAfterClose(Self);
     end;
      inherited; 
    end;
    

    Script di atas berfungsi saat tombol close ditekan maka kita membuat event close sendiri di mana event tersebut nantinya kita isi dengan perintah meremove tabs seperti script OnChildclose tersebut di atas.

Dan berikut adalah prosedur untuk membuat Tabs sebagaimana tertera dalam perintah CreateTabs dalam script ShowChildform di atas:


procedure TFrmMain.CreateTabs(frm: TFrmTemplate);
var
crtab:TChromeTab;
i:Integer;
isAdded:Boolean;
begin
isAdded:=true;
for i:=0 to chrmtbs1.Tabs.Count-1 do
begin
    if chrmtbs1.Tabs[i].Data=PChar(frm.Name) then
    isAdded:=False;
end;
if isAdded then
begin
crtab:=chrmtbs1.Tabs.Add;
crtab.Caption:=frm.Caption;
crtab.Data:=PChar(frm.Name);
end;
end;

Beri perintah berikut di Event ButtonCloseTab komponen TchromeTabs anda:


procedure TFrmMain.chrmtbs1ButtonCloseTabClick(Sender: TObject;
  ATab: TChromeTab; var Close: Boolean);
    var i:integer;
  formName:string;
begin
  formName:=string(ATab.Data);
  for i:=0 to Application.ComponentCount-1 do
  begin
    if Application.Components[i] is TFrmTemplate then
        if TFrmTemplate(Application.Components[i]).Name=formName then
        TFrmTemplate(Application.Components[i]).Close;
  end;
  Close:=True;
end;

Perintah di atas berguna saat tabs ditutup maka form yang menyertainya juga ditutup.
Agar saat tabs berpindah-pindah form anda bisa fokus maka beri perintah berikut di event ActiveTabChanged komponen TChromeTabs anda:


procedure TFrmMain.chrmtbs1ActiveTabChanged(Sender: TObject;
  ATab: TChromeTab);
   var i:integer;
  formName:string;
begin
  formName:=string(ATab.Data);
  for i:=0 to Application.ComponentCount-1 do
  begin
    if Application.Components[i] is TFrmTemplate then
        if TFrmTemplate(Application.Components[i]).Name=formName then
        begin
        if TFrmTemplate(Application.Components[i]).WindowState=wsMinimized then
        TFrmTemplate(Application.Components[i]).WindowState:=wsNormal;
        TFrmTemplate(Application.Components[i]).BringToFront;
        TFrmTemplate(Application.Components[i]).SetFocus;
        //TFrmTemplate(Application.Components[i]).Show;
        end;
  end;
end;

Dan berikut adalah hasil membuat form tabs tersebut.
Form Tabs DelphiUntuk script lebih lengkapnya anda bisa download attachment di bawah ini.

Attachments

anasmbahdien

Seorang programmer yang menguasai bahasa pemograman Delphi, VB.NET, PHP dan Android. Untuk hasil karya kunjungi mogotekno.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *