Arsip: [ask][newbie] free multiple form
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.
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;
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.
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
reply |
Report Obsolete
Last Articles
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 years ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 years ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 5 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 12 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 12 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 12 years ago
Random Topic
- Modify Delphi Standard Component
by delphi_warrior in Form Enhancement & Graphical Controls more 17 years ago - Masalah QuickReport
by ichan29 in Reporting more 17 years ago - [Ask] MDI-post data text dari formchild ke formchild
by jayadi888 in Hal umum tentang Pascal Indonesia more 17 years ago - Componen mendapatkan serial number harddisk
by jimmy_chenchen in Hal umum tentang Pascal Indonesia more 18 years ago - Skin pada Alpha Control
by aciang_007 in Form Enhancement & Graphical Controls more 16 years ago - Trouble Insert Image ke Oracle 9i...
by Chang80 in MySQL more 18 years ago - DBGrid yang support 2 baris
by himen81 in Hal umum tentang Pascal Indonesia more 17 years ago - Ask: How To Use ComPort 3.0 ?
by cyber_hecker in Network, Files, I/O & System more 19 years ago - Install DevExpress ExpressQuantumGrid Suite v5.15 ??
by javaman in Hal umum tentang Pascal Indonesia more 17 years ago - proteksi agar file jlan 1x
by Cip_rud in Lain-lain more 16 years ago