Form Inheritance (01) – Base Form

March 6, 2006 at 9:14 pm | Posted in Code Samples, Tutorials | 6 Comments

by: Widi Harsojo

Dalam pembuatan program di Delphi, banyak cara dan style orang mengcoding dan me-manage “project”, salah satunya saya. Dan saya juga punya style sendiri untuk coding dan me-manage “project” dari aplikasi yang saya buat ini. Salah satu style yang pasti saya bikin di dalam pembuatan aplikasi adalah pembuatan Form Dasar (Base Form) untuk di inheritance, inheritance ini di perlukan karena ada behavior standard dari form yang memang saya pasti perlukan, diantaranya adalah sbb:

  • punya variable Last Key (inget jaman bahoela di clipper)
  • punya standard Navigasi keys untuk perpindahan tombol menggunakan tombol [enter], [key-up], [key-down]. Standard Navigasi keys ini-pun harus ber-behave benar terhadap control {ComboBox}, {ListBox}, {DateEdit}, dan {DBGrid}.
  • [ESC] adalah tombol standard untuk keluar dari Forms.
  • dan so-pasti jika Forms di CLOSE, otomatis harus langsung di FREE, heh.. biar ndak coding lagi “action := caFree”…., bosen.

penamaan untuk form saya buat dengan style saya yaitu:

      • Base Form ex: Nama File “wfBase”, Nama Object “TfBase” Var “fBase”
      • Apps Form ex: Nama File “afCust”, Nama Object “TfCust” Var “fCust”

      di bawah ini adalah minimal code yang saya butuhkan, tapi bila ada penambahan Control selain dari bawaan Delphi, ya… harus di cari padanan “Base Class” ex: ComboBox-nya dari Developer Express atau Raize atau LMD agar behaviornya bisa berjalan dengan semestinya (ex: jika combo sudah drop down harus fasilitas panah atas dan bawah mati).

      demikian semoga membantu….

      nb. untuk form inheritance harap melihat ke help Delphi ya….🙂

    unit wfBase;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics,
      Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls,
      Grids;
    
    type
    TfBase = class(TForm)
      procedure FormClose( Sender: TObject;
        var Action: TCloseAction);
      procedure FBKeyDown( Sender: TObject;
        var Key: Word; Shift: TShiftState);
      procedure FBKeyPress(Sender: TObject; var Key: Char);
      protected
      procedure WndProc(var Message: TMessage);    override;
      procedure DoClose(var Action: TCloseAction); override;
      { Private declarations }
    public
      LastKey:  Integer;
      KeyMsg:   TMessage;
      { Public declarations }
    end;
    
    var
      fBase: TfBase;
    
    implementation
    
    {$R *.dfm}
    //——————————————————————————
    procedure TfBase.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action:= caFree;
    end;
    //——————————————————————————
    procedure TfBase.FBKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    Var
      sClass: string;
    begin
      if not (Shift = []) then exit;
      if Screen.ActiveControl = Nil then Exit;
        sClass := Screen.ActiveControl.ClassName;
      if Screen.ActiveControl is TCustomCombo then begin
        if TCustomCombo(Screen.ActiveControl).DroppedDown
          then Exit;
      end;
      if Screen.ActiveControl is TDBLookupComboBox then begin
        if TDBLookupComboBox(Screen.ActiveControl).ListVisible
          then Exit;
      end;
      if Screen.ActiveControl is TCustomGrid
        then exit; //Base Class for Delphi.Grid
      Case Key of
        VK_DOWN: begin
          SelectNext(Screen.ActiveControl, True, True );
          Key := 0;
        end;
        VK_UP: begin
          SelectNext(Screen.ActiveControl, False, True );
          Key := 0;
        end;
      End;
    end;
    //——————————————————————————
    procedure TfBase.FBKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key=#27 then close;
      if Key<>#13 then exit;
      if Screen.ActiveControl = Nil then exit;
      if Screen.ActiveControl is TCustomCombo then begin
        if TCustomCombo(Screen.ActiveControl).DroppedDown
          then Exit;
      end;
      if Screen.ActiveControl is TCustomGrid
        then exit; //Base Class for Delphi.Grid
    
      SelectNext(Screen.ActiveControl, True, True );
      Key:= #0;
    end;
    //——————————————————————————
    procedure Tfbase.WndProc(var Message: TMessage);
    begin
      if Message.Msg=45102 then begin
        LastKey:= Message.WParam;
        KeyMsg := Message;
      end;
      inherited;
    end;
    //——————————————————————————
    procedure TfBase.DoClose(var Action: TCloseAction);
    begin
      Action:= caFree;
    end;
    //——————————————————————————
    end.

    6 Comments »

    RSS feed for comments on this post. TrackBack URI

    1. btw, bisa minta tolong lagi ndak pak admin, untuk artikle saya yang pertama ini,….ada beberapa yang harus di edit:
      1. judul artiklenya adalah “Delphi – form Inheritance (01) – Base Form”
      2. dibawah judul artikle di tulis “By: Widi Harsojo”, atawa kalo di
      sini ada yang jago ngeblog di wordpress.com, kasih tau donk biar di
      tampilkan juga “user yang konstribusi”.

    2. Aku masih ada satu kesulitan tuh mengenai base form untuk atasi masalah pembebasan variable form.
      Yang bung widi lakukan hanyalah membebaskan alokasi memory untuk form tersebut, namun bagaimana dengan variabel yang menampung object dari form. Saat ini sih saya terpaksa simpan dalam suatu variabel global dan saya set nil variabel tersebut

      Iwan CS

    3. @wharsojo:

      Untuk sementara template yg digunakan di blog ini belum bisa menampilkan nama author posting. Karena itu, nama author lebih baik ditulis secara “manual” aja di awal artikel. Contohnya bisa diliat di posting2 sebelumnya.

    4. bung iwan cs,
      memang benar saya cuma menghilangkan alokasi memory.
      Untuk global variable fBase (kalau saya tidak salah tangkap) di base form ini, memang bisa di hilangkan.

      var
      fBase: TfBase;

      terimakasih buat bung iwan cs atas tanggapannya

    5. saya tertarik dengan artikel ini dan ingin mempelajari codingnya tapi saya bingung tuh koding cara pakenya gimana?
      apa harus di tambahin di uses atau gimana??

    6. saya mau tanya, TApplication pada source code diatas mana ya?
      dan yang dimaksut Singleton mana ya di delphi itu,,tlng contohnya!


    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s

    Blog at WordPress.com.
    Entries and comments feeds.

    %d bloggers like this: