Memahami Pemilik vs. Induk dalam Aplikasi Delphi

Setiap kali Anda menempatkan panel di formulir dan tombol di panel itu, Anda membuat koneksi "tidak terlihat". Formulir menjadi pemilik Tombol, dan Panel diatur menjadi miliknya induk.

Setiap komponen Delphi memiliki properti Owner. Pemilik mengurus membebaskan komponen yang dimiliki ketika sedang dibebaskan.

Mirip, tetapi berbeda, properti Induk menunjukkan komponen yang berisi komponen "anak".

Induk

Induk mengacu pada komponen yang berisi komponen lain, seperti TForm, TGroupBox atau TPanel. Jika satu kontrol (induk) berisi yang lain, maka kontrol yang terkandung adalah kontrol anak dari orang tua.

Induk menentukan bagaimana komponen ditampilkan. Misalnya, properti Kiri dan Atas semua relatif terhadap Induk.

Properti Induk dapat ditetapkan dan diubah selama waktu berjalan.

Tidak semua komponen memiliki Induk. Banyak bentuk tidak memiliki Orang Tua. Misalnya, formulir yang muncul langsung di desktop Windows memiliki Parent yang disetel ke nol. Komponen A HasParent metode mengembalikan nilai boolean yang menunjukkan apakah komponen telah ditetapkan sebagai orangtua atau tidak.

instagram viewer

Kami menggunakan properti Induk untuk mendapatkan atau mengatur induk kontrol. Misalnya, tempatkan dua panel (Panel1, Panel2) pada formulir dan letakkan satu tombol (Button1) di panel pertama (Panel1). Ini menetapkan properti Induk Button ke Panel1.

 Button1.Parent: = Panel2; 

Jika Anda menempatkan kode di atas dalam acara OnClick untuk Panel kedua, ketika Anda mengklik Panel2 tombol "melompat" dari Panel1 ke Panel2: Panel1 tidak lagi menjadi Induk Tombol.

Saat Anda ingin membuat TButton saat run-time, penting bagi kami untuk menetapkan orangtua - kontrol yang berisi tombol. Agar komponen terlihat, itu harus memiliki induk untuk menampilkan dirinya di dalamnya.

Induk Ini dan Induk Itu

Jika Anda memilih tombol pada waktu desain dan melihat Object Inspector Anda akan melihat beberapa properti "Parent-aware". Itu ParentFont, misalnya, menunjukkan apakah Font yang digunakan untuk judul Button adalah sama dengan yang digunakan untuk orang tua Button (dalam contoh sebelumnya: Panel1). Jika ParentFont Benar untuk semua Tombol pada Panel, mengubah properti Font panel menjadi Tebal menyebabkan semua teks Button pada Panel menggunakan font (tebal) itu.

Kontrol Properti

Semua komponen yang berbagi Induk yang sama tersedia sebagai bagian dari Kontrol milik orang tua itu. Sebagai contoh, Kontrol dapat digunakan untuk beralih ke semua anak-anak dari kontrol windowed.

Bagian kode selanjutnya dapat digunakan untuk menyembunyikan semua komponen yang terkandung di Panel1:

untuk ii: = 0 untuk Panel1.ControlCount - 1 melakukan

 Panel1.Controls [ii] .Visible: = false;


Trik Menipu

Kontrol berkelok-kelok memiliki tiga karakteristik dasar: mereka dapat menerima fokus input, mereka menggunakan sumber daya sistem, dan mereka dapat menjadi orang tua dari kontrol lain.

Misalnya, komponen Tombol adalah kontrol berjendela dan tidak dapat menjadi induk dari beberapa komponen lain - Anda tidak dapat menempatkan komponen lain di atasnya. Masalahnya adalah bahwa Delphi menyembunyikan fitur ini dari kami. Contohnya adalah kemungkinan tersembunyi untuk TStatusBar untuk memiliki beberapa komponen seperti TProgressBar di atasnya.

Kepemilikan

Pertama, perhatikan bahwa Formulir adalah Pemilik keseluruhan komponen apa pun yang berada di atasnya (diposisikan di formulir pada waktu desain). Ini berarti bahwa ketika suatu formulir dihancurkan, semua komponen pada formulir tersebut juga dihancurkan. Misalnya, jika kita memiliki aplikasi dengan lebih dari satu formulir ketika kita memanggil metode Gratis atau Rilis untuk objek formulir, kami tidak perlu khawatir tentang secara eksplisit membebaskan semua objek pada formulir itu — karena formulir adalah pemilik semua objeknya komponen.

Setiap komponen yang kami buat, pada desain atau waktu proses, harus dimiliki oleh komponen lain. Pemilik komponen — nilai properti Pemiliknya — ditentukan oleh parameter yang diteruskan ke konstruktor Buat saat komponen dibuat. Satu-satunya cara lain untuk menetapkan ulang Pemilik menggunakan metode InsertComponent / RemoveComponent selama run-time. Secara default, formulir memiliki semua komponen di dalamnya dan pada gilirannya dimiliki oleh Aplikasi.

Ketika kita menggunakan kata kunci Diri sebagai parameter untuk metode Buat — objek yang kita buat dimiliki oleh kelas yang berisi metode tersebut — yang biasanya merupakan bentuk Delphi.

Jika di sisi lain, kita membuat komponen lain (bukan bentuk) pemilik komponen, maka kita membuat komponen yang bertanggung jawab untuk membuang objek ketika dihancurkan.

Seperti yang lainnya Komponen delphi, komponen TFindFile yang dibuat khusus dapat dibuat, digunakan dan dimusnahkan pada saat dijalankan. Untuk membuat, menggunakan dan membebaskan a Komponen TFindFile saat dijalankan, Anda dapat menggunakan potongan kode berikut:

menggunakan Mencari berkas;

...
var FFile: TFindFile;

prosedur TForm1.InitializeData;

mulai // form ("Self") adalah Pemilik komponen // tidak ada Induk karena // ini adalah komponen yang tidak terlihat.

 FFile: = TFindFile. Buat (Mandiri);

 ...

akhir;

Catatan: Karena File dibuat dengan pemilik (Formulir 1), kami tidak perlu melakukan apa pun untuk membebaskan komponen — itu akan dibebaskan ketika pemilik dihancurkan.

Properti Komponen

Semua komponen yang berbagi Pemilik yang sama tersedia sebagai bagian dari Properti komponen dari Pemilik itu. Prosedur berikut digunakan untuk menghapus semua komponen Edit yang ada di formulir:

prosedur ClearEdits (AForm: TForm);

var

 ii: Integer;

mulai

untuk ii: = 0 untuk Sebuah bentuk. ComponentCount-1 melakukan

jika (Sebuah bentuk. Komponen [ii] adalah TEdit) kemudian TEdit (AForm. Komponen [ii]). Teks: = '';

akhir; 

"Anak yatim"

Beberapa kontrol (seperti kontrol ActiveX) terkandung dalam jendela non-VCL daripada kontrol induk. Untuk kontrol ini, nilai Induk adalah nol dan ParentWindow properti menentukan jendela induk non-VCL. Pengaturan ParentWindow memindahkan kontrol sehingga terkandung di jendela yang ditentukan. ParentWindow diatur secara otomatis ketika kontrol dibuat menggunakan Buat Dipersiapkan metode.

Yang benar adalah bahwa dalam kebanyakan kasus Anda tidak perlu peduli dengan Orang Tua dan Pemilik, tetapi ketika datang ke OOP dan pengembangan komponen atau ketika Anda ingin mengambil Delphi selangkah lebih maju, pernyataan dalam artikel ini akan membantu Anda untuk mengambil langkah itu lebih cepat.

instagram story viewer