Κάθε φορά που τοποθετείτε έναν πίνακα σε μια φόρμα και ένα κουμπί σε αυτόν τον πίνακα, κάνετε μια "αόρατη" σύνδεση. Η φόρμα γίνεται η ιδιοκτήτης του Κουμπιού και ο Πίνακας έχει ρυθμιστεί να είναι το δικό του μητρική εταιρεία.
Κάθε συνιστώσα των Δελφών έχει ιδιοκτησία ιδιοκτήτη. Ο ιδιοκτήτης φροντίζει απελευθέρωση τα ιδιοκτησιακά στοιχεία όταν απελευθερώνεται.
Παρόμοια, αλλά διαφορετική, η ιδιότητα γονικού στοιχείου υποδεικνύει το στοιχείο που περιέχει το στοιχείο "παιδί".
Μητρική εταιρεία
Ο γονέας αναφέρεται στο στοιχείο που περιέχει ένα άλλο στοιχείο, όπως το TForm, το TGroupBox ή το TPanel. Αν ένας έλεγχος (γονέας) περιέχει άλλα, το ελέγχους είναι τα παιδιά ελέγχου του γονέα.
Ο γονέας καθορίζει τον τρόπο εμφάνισης του στοιχείου. Για παράδειγμα, οι ιδιότητες Αριστεράς και Κορυφής είναι όλες σχετικές με τον γονέα.
Η ιδιότητα του γονέα μπορεί να εκχωρηθεί και να αλλάξει κατά τη διάρκεια εκτέλεσης.
Δεν υπάρχουν όλα τα στοιχεία του γονέα. Πολλές μορφές δεν έχουν γονέα. Για παράδειγμα, οι φόρμες που εμφανίζονται απευθείας στην επιφάνεια εργασίας των Windows έχουν μηδενική ρύθμιση. Ένα συστατικό
HasParent η μέθοδος επιστρέφει μια τιμή boolean που υποδεικνύει εάν έχει αποδοθεί ή όχι γονική εντολή στο στοιχείο.Χρησιμοποιούμε την ιδιότητα Parent για να πάρουμε ή να ορίσουμε το γονικό στοιχείο ενός στοιχείου ελέγχου. Για παράδειγμα, τοποθετήστε δύο φύλλα (Πίνακας1, Πίνακας2) σε μια φόρμα και τοποθετήστε ένα κουμπί (Κουμπί1) στον πρώτο πίνακα (Πίνακας1). Αυτό θέτει την ιδιότητα γονέα του Button στο Panel1.
Button1.Parent: = Πίνακας2;
Εάν τοποθετήσετε τον παραπάνω κώδικα στο συμβάν OnClick για τον δεύτερο πίνακα, όταν κάνετε κλικ στο Panel2, το κουμπί "μεταπηδά" από το Panel1 στο Panel2: Το Panel1 δεν είναι πλέον ο γονέας του κουμπιού.
Όταν θέλετε να δημιουργήσετε ένα TButton κατά το χρόνο εκτέλεσης, είναι σημαντικό να θυμόμαστε να ορίσετε έναν γονέα - τον έλεγχο που περιέχει το κουμπί. Για να είναι ορατό ένα στοιχείο, αυτό πρέπει να έχει έναν γονέα για να εμφανιστεί μέσα.
Το γονικό αυτό και το γονικό αυτό
Εάν επιλέξετε ένα κουμπί κατά τη διάρκεια του σχεδιασμού και κοιτάξετε τον Επιθεωρητή αντικειμένων, θα παρατηρήσετε αρκετές ιδιότητες "Γονείς". ο ParentFont, για παράδειγμα, δείχνει αν η γραμματοσειρά που χρησιμοποιείται για τη λεζάντα του κουμπιού είναι ίδια με αυτή που χρησιμοποιείται για τον γονέα του κουμπιού (στο προηγούμενο παράδειγμα: Πίνακας1). Εάν το ParentFont είναι αληθινό για όλα τα κουμπιά ενός πάνελ, αλλάζοντας την ιδιότητα Γραμματοσειρά του πίνακα στην έντονη γραφή, προκαλεί τη λεζάντα όλων των κουμπιών στον πίνακα για να χρησιμοποιήσει αυτή τη γραμματοσειρά (με έντονα γράμματα).
Ελέγχει την ιδιότητα
Όλα τα στοιχεία που μοιράζονται τον ίδιο γονέα είναι διαθέσιμα ως μέρος του Έλεγχοι ιδιοκτησίας αυτού του γονέα. Για παράδειγμα, μπορούν να χρησιμοποιηθούν οι έλεγχοι επανάληψη όλων των παιδιών του παραθύρου ελέγχου.
Το επόμενο κομμάτι κώδικα μπορεί να χρησιμοποιηθεί για την απόκρυψη όλων των περιεχόμενων στοιχείων στον πίνακα1:
Για ii: = 0 προς το Panel1.ControlCount - 1 κάνω
Panel1.Controls [ii] .Visible: = false;
Κόλπα τεχνάσματα
Τα παράθυρα ελέγχου έχουν τρία βασικά χαρακτηριστικά: μπορούν να λάβουν την εστίαση εισόδου, χρησιμοποιούν τους πόρους του συστήματος και μπορούν να είναι γονείς σε άλλους ελέγχους.
Για παράδειγμα, το στοιχείο Button είναι ένα παράθυρο ελέγχου και δεν μπορεί να είναι το γονικό σε κάποιο άλλο στοιχείο - δεν μπορείτε να τοποθετήσετε άλλο στοιχείο σε αυτό. Το πράγμα είναι ότι οι Δελφοί αποκρύπτουν αυτό το χαρακτηριστικό από εμάς. Ένα παράδειγμα είναι η κρυφή δυνατότητα για ένα TStatusBar να έχει κάποια στοιχεία όπως το TProgressBar σε αυτό.
Ιδιοκτησία
Πρώτον, σημειώστε ότι μια φόρμα είναι ο γενικός ιδιοκτήτης οποιωνδήποτε εξαρτημάτων που βρίσκονται σε αυτό (τοποθετείται στη φόρμα κατά το σχεδιασμό). Αυτό σημαίνει ότι όταν καταστρέφεται μια φόρμα, καταστρέφονται επίσης όλα τα στοιχεία της φόρμας. Για παράδειγμα, εάν έχουμε μια εφαρμογή με περισσότερες από μία φόρμα όταν καλούμε τη μέθοδο Free ή Release για ένα αντικείμενο φόρμας, εμείς δεν χρειάζεται να ανησυχείτε για τη ρητή απελευθέρωση όλων των αντικειμένων σε αυτή τη μορφή - επειδή το έντυπο είναι ο ιδιοκτήτης όλων των συστατικά.
Κάθε στοιχείο που δημιουργούμε, κατά το σχεδιασμό ή το χρόνο εκτέλεσης, πρέπει να ανήκει σε άλλο στοιχείο. Ο ιδιοκτήτης ενός στοιχείου - η τιμή της ιδιότητας του ιδιοκτήτη του - καθορίζεται από μια παράμετρο που μεταβιβάζεται στον δημιουργό δημιουργίας όταν δημιουργείται το στοιχείο. Ο μόνος άλλος τρόπος εκ νέου εκχώρησης του κατόχου είναι η χρήση των μεθόδων InsertComponent / RemoveComponent κατά τη διάρκεια εκτέλεσης. Από προεπιλογή, μια φόρμα διαθέτει όλα τα στοιχεία σε αυτήν και ανήκει με τη σειρά της στην εφαρμογή.
Όταν χρησιμοποιούμε τη λέξη-κλειδί Εαυτός ως παράμετρος για τη μέθοδο δημιουργίας - το αντικείμενο που δημιουργούμε ανήκει στην κλάση στην οποία περιέχεται η μέθοδος - η οποία είναι συνήθως μια μορφή Delphi.
Εάν, από την άλλη πλευρά, κάνουμε ένα άλλο στοιχείο (όχι τη μορφή) τον ιδιοκτήτη του στοιχείου, τότε κάνουμε αυτό το στοιχείο υπεύθυνο για τη διάθεση του αντικειμένου όταν καταστρέφεται.
Όπως και κάθε άλλο Το στοιχείο Delphi, προσαρμοσμένη συνιστώσα TFindFile μπορεί να δημιουργηθεί, να χρησιμοποιηθεί και να καταστραφεί κατά το χρόνο εκτέλεσης. Για να δημιουργήσετε, να χρησιμοποιήσετε και να απαλλαγείτε από ένα TFindFile κατά την εκτέλεση, μπορείτε να χρησιμοποιήσετε το επόμενο απόσπασμα κώδικα:
χρήσεις FindFile;
...
var FFile: TFindFile;
διαδικασία TForm1.InitializeData;
ξεκινήσει // form ("Self") είναι ο ιδιοκτήτης του στοιχείου // δεν υπάρχει γονέας δεδομένου ότι // είναι ένα αόρατο στοιχείο.
FFile: = TFindFile. Δημιουργία (Self);
...
τέλος;
Σημείωση: Δεδομένου ότι το FFile δημιουργείται με έναν κάτοχο (Form1), δεν χρειάζεται να κάνουμε τίποτα για να απελευθερώσουμε το στοιχείο - θα ελευθερωθεί όταν καταστραφεί ο ιδιοκτήτης.
Στοιχεία ιδιοκτησίας
Όλα τα στοιχεία που μοιράζονται τον ίδιο Ιδιοκτήτη είναι διαθέσιμα ως μέρος του Η ιδιότητα των στοιχείων του εν λόγω κατόχου. Η ακόλουθη διαδικασία χρησιμοποιείται για να διαγράψετε όλα τα στοιχεία επεξεργασίας που βρίσκονται στη φόρμα:
διαδικασία ClearEdits (AForm: TForm);
var
ii: Ακέραιος αριθμός.
ξεκινήσει
Για ii: = 0 προς το Μια φόρμα. ComponentCount-1 κάνω
αν (Μια φόρμα. Στοιχεία [ii] είναι TEdit) έπειτα TEdit (AForm. Στοιχεία [ii]). Κείμενο: = '';
τέλος;
"Ορφανά"
Ορισμένα στοιχεία ελέγχου (όπως στοιχεία ελέγχου ActiveX) περιέχονται σε παράθυρα που δεν είναι VCL παρά σε γονικό έλεγχο. Για αυτούς τους ελέγχους, η τιμή του γονέα είναι μηδέν και το ParentWindow ιδιότητα προσδιορίζει το γονικό παράθυρο που δεν είναι VCL. Η ρύθμιση ParentWindow μετακινεί τον έλεγχο έτσι ώστε να περιέχεται στο συγκεκριμένο παράθυρο. Το ParentWindow ρυθμίζεται αυτόματα όταν δημιουργείται ένας έλεγχος χρησιμοποιώντας το CreateParented μέθοδος.
Η αλήθεια είναι ότι στις περισσότερες περιπτώσεις δεν χρειάζεται να νοιάζεστε για τους Γονείς και τους Ιδιοκτήτες, αλλά όταν πρόκειται για OOP και ανάπτυξη συστατικών στοιχείων ή όταν θέλετε να πάρετε τους Δελφούς ένα βήμα μπροστά οι δηλώσεις σε αυτό το άρθρο θα σας βοηθήσουν να κάνετε αυτό το βήμα πιο γρήγορα.