Arsip: [ask][newbie] free multiple form

 
user image
more 13 years ago

slianto

halo semuanya, mau tanya nih..misalnya saya punya form1, ada button1 untuk create form2 (karena tidak saya auto-create) dan saya show karena supaya bisa dibuka banyak(multiple), jd kalau saya klik button1 3x tercreate form2 sebanyak 3 form... procedure TForm1.Button1Click(Sender: TObject); begin form2:=TForm2.Create(self); form2.show; end; procedure TForm2.Button1Click(Sender: TObject); begin form2.free end; misalkan saya klik button1 di form2 pinginnya sih bisa free yg form2 yg sedang aktif dan saya tekan button1 nya itu aja, sedangkan form2 yg lain tetep ada...bisa nggak yah?? kalau cuma create form2 1 aja bisa difree, kalau udah tercreate 2form, yg free ke 2 ada access violation error..gmn yah? ama sekalian misalkan saya sudah create form1, form2 (3x),form3 (2x) -> gmn free all form ini? mohon pencerahannya.thx all.
user image
more 13 years ago

DelphiExpert


procedure TForm1.Button1Click(Sender: TObject); 
begin 
  TForm2.Create(Application).Show; // Jangan simpan ke var global bawaan: Form2
end; 
procedure TForm2.Button1Click(Sender: TObject); 
begin 
  Self.Free; // Destroy diri sendiri, bukan spesifik ke instance tertentu; misal yg tersimpan di Form2 
end;
user image
more 13 years ago

k0cr0tus

Sekedar sharing aja, Mungking harus dipahami dulu konsep object biar ga bingung, coba cari referensi tentang konsep object. Yang jelas untuk seperti itu berarti harus paham konsep object , dan konsep turunan object biar lebih jelas. Kalo di delphi kan hampir semuanya berbentuk object, termasuk juga Form yang asalnya dari TForm dan kakek buyutnya juga kategori TObject. Nah, kalo mau access suatu object , logikanya kan object itu harus ada, kalo ga ada ya keluarnya pasti Access Violation. Gampangannya kita ke bank sudah punya tabungan tapi tabungannya ga ada duitnya, terus kita mau ambil duit dari tabungan yang ga ada duitnya itu, jadinya mesti kan ditolak ama banknyua, kan :D ? Solusi untuk itu misalnya seperti ini : (aku terbiasa pake Java , jadi referensinya aku taruh di object form utamanya). Ini cuma solusi simple, sebetulnya ada lagi yang lebih simple pake konsep variable global.

unit unit1;
type
  TForm1 = class(TForm)
    a: Tbutton;
    b: Tbutton;
    ........
    ........
    ........
  private

  public
     //biar gampang taruh referensi form lain disini, misalnya form 2 atao 3 sebanyak yang kita mau
    refLain_1 : TForm; // ini di typecast ke model TForm (biar ga bingung dan ga usah pake uses di bagian interface)
    refLain_2 : TForm;
    refLain_3 : TForm;
    refLain_4 : TForm;
    refLain_5 : TForm;
    refLain_6 : TForm;
    ........
    ........
    ........
    ........
  end;
var
  Form1: TForm1;
implementation
uses unit2, unit3, unit4, unit5;//jangan lupa dikasih uses buat form-form lain yang kita punya
    ........
    ........
    ........
    ........
procedure TForm1.aClick(Sender: TObject);
begin
   //misalkan kita punya tipe TForm2, TForm3, TForm4, TForm5
  //6 referensi form yang udah dideklarasikan diatas mau dibuat semuanya dengan variasi sembarang
  
  refLain_1:=TForm4.create(nil);
  refLain_2:=TForm2.create(nil);
  refLain_3:=TForm5.create(nil);
  refLain_4:=TForm5.create(nil);
  refLain_5:=TForm3.create(nil);
  refLain_6:=TForm2.create(nil);
  //dari situ kelihatan kalo aku bikin 2 form tipe TForm2, 2 form tipe TForm5, 1 form tipe TForm3. 1 form tipe TForm4.
 //nah terus misalkan setiap form di perlihatkan pake visible dan atribut lainnya misalnya:
  refLain_1.visible:=true;
  refLain_2.visible:=true;
  refLain_3.visible:=true;
  refLain_4.visible:=true;
  refLain_5.visible:=true;
  refLain_6.visible:=true;
end;

    ........
    ........
    ........
    ........
end.

=======================================================
//INI FORM 2 MISALNYA
unit unit2;
...
...
type
  TForm2 = class(TForm)
    c: Tbutton;
    d: Tbutton;
  private
  public
  end;

implementation
//disini dikasih uses (BIAR BISA AKSES KE MAIN FORM)
uses  
   unit1, unit3, ... , ... , ... ;
procedure TForm2.cClick(Sender: TObject);
begin
   //disini kita bias mainkan variable- variable referensi form dari form1, entah mau diubah visibility nya, ato mau dihancurkan
   //asalkan hati hati sebaiknya jangan  menghancurkan form diri sendiri :D 
  form1.refLain_1.free;
  form1.refLain_3.free;
  form1.refLain_4.free;
 ....
 ....
  
end;
end.
Saran aku, sebaiknya mulai belajar Delphi dengan konsep Object, karena potensi delphi akan SANGAT BANYAK TERLIHAT JELAS begitu kita memahami konsep Object. Dengan memahami object, kita juga bisa berkembang ke arah Delphi Prism dan Mono untuk pengembangan di Linux (soalnya aku sekarang mainnya pake Delphi, Prism, n Mono) :D Sekian sharing, semoga berguna.
user image
more 13 years ago

mas_kofa

dan sekedar sharing dari daku yg dungu ini, ttg apa dan bagaimana aku memainkan suatu (beberapa) object di delphi, aku selalu memanfaat kan obejct TStrings (TStringList), preface : yang aku tahu tentang TStrings, adalah ibarat array dinamis yang berisi object (ItemList), karena setiap item berisi caption dan object. backgorund : TStrings punya kemampuan mencari index suatu item nya berdasarkan caption nya, berarti dengan secara tidak langsung kita bisa mencari object yang ada di item tstrings berdasarkan nama object. implementation:

var
  list: TStringList;
implemetation
function  GetForm(nama_form: string): TForm;
var
  int : Integer;
begin
  result := nil;
  int := list.IndexOf(nama_form);
  if int < 0 then exit;
  result := TForm(list.Objects[int]);
end;
function  AddForm(nama_form): TForm;
begin
  result := TForm.Create(nil);
  list.AddObject(nama_form, TObject(result));
end;
procedure  ShowForm(nama_form);
var
  form : TForm;
begin
  form := GetForm(nama_form);
  if form = nil then exit;
  form.Show; // or form.ShowModal;  
end;
procedure  CloseForm(nama_form);
var
  form : TForm;
begin
  form := GetForm(nama_form);
  if form = nil then exit;
  form.Close;
end;
procedure RemoveForm(nama_form: string);
var
  int : Integer;
begin
  int := list.IndexOf(nama_form);
  if int < 0 then exit;
  TForm(list.Objects[int]).Free;
  lst.Delete[int];
end;

initialization
  list:= TStringList.Create;
finaslization
  list.Free;
Maaf Jika ada salah...........
more ...
  • Pages:
  • 1
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com