Zrozumienie właściciela vs. Rodzic w aplikacjach Delphi

Za każdym razem, gdy umieszczasz panel na formularzu i przycisk na tym panelu, tworzysz połączenie „niewidoczne”. Forma staje się właściciel przycisku, a panel jest ustawiony jako jego rodzic.

Każdy komponent Delphi ma właściwość Owner. Właściciel zajmuje się uwolnienie posiadane komponenty podczas uwalniania.

Podobna, ale inna właściwość Parent wskazuje komponent zawierający element „child”.

Rodzic

Nadrzędny odnosi się do komponentu, w którym znajduje się inny komponent, takiego jak TForm, TGroupBox lub TPanel. Jeśli jedna kontrolka (rodzic) zawiera inne, zawierały kontrole są kontrolą rodzicielską dziecka.

Element nadrzędny określa sposób wyświetlania komponentu. Na przykład wszystkie właściwości Left i Top są względne względem elementu nadrzędnego.

Właściwość Parent może być przypisywana i zmieniana w czasie wykonywania.

Nie wszystkie komponenty mają element nadrzędny. Wiele formularzy nie ma rodzica. Na przykład formularze pojawiające się bezpośrednio na pulpicie Windows mają wartość Parent ustawioną na zero. Składnik

instagram viewer
HasParent Metoda zwraca wartość logiczną wskazującą, czy komponentowi przypisano element nadrzędny.

Używamy właściwości Parent, aby uzyskać lub ustawić element nadrzędny formantu. Na przykład umieść dwa panele (Panel1, Panel2) na formularzu i umieść jeden przycisk (Button1) na pierwszym panelu (Panel1). To ustawia właściwość Parent przycisku Button na Panel1.

 Button1.Parent: = Panel2; 

Jeśli umieścisz powyższy kod w zdarzeniu OnClick dla drugiego Panelu, po kliknięciu Panelu 2 przycisk „przeskoczy” z Panelu 1 do Panelu 2: Panel1 nie jest już rodzicem przycisku.

Gdy chcesz utworzyć TButton w czasie wykonywania, ważne jest, aby pamiętać o przypisaniu elementu nadrzędnego - formantu zawierającego przycisk. Aby komponent był widoczny, to musi mieć rodzica do wyświetlenia się.

ParentThis i ParentThat

Jeśli wybierzesz przycisk w czasie projektowania i spojrzysz na Inspektora obiektów, zauważysz kilka właściwości „rozpoznających rodziców”. The ParentFontwskazuje na przykład, czy czcionka użyta do podpisu przycisku jest taka sama, jak czcionka użyta dla elementu nadrzędnego przycisku (w poprzednim przykładzie: Panel1). Jeśli parametr ParentFont ma wartość True dla wszystkich przycisków w panelu, zmiana właściwości czcionki panelu na pogrubienie powoduje, że podpis wszystkich przycisków w panelu używa tej (pogrubionej) czcionki.

Kontroluje właściwość

Wszystkie składniki, które współużytkują ten sam rodzic, są dostępne jako część Sterownica własność tego rodzica. Na przykład można użyć Kontroli powtarzaj wszystkie dzieci kontrolki okienkowej.

Następnego fragmentu kodu można użyć do ukrycia wszystkich zawartych składników w Panelu1:

dla ii: = 0 do Panel1.ControlCount - 1 robić

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


Tricks Tricks

Kontrolki okienkowe mają trzy podstawowe cechy: mogą skupiać się na danych wejściowych, używają zasobów systemowych i mogą być rodzicami innych kontrolek.

Na przykład komponent Button jest kontrolką okienkową i nie może być elementem nadrzędnym dla jakiegoś innego komponentu - nie można na nim umieścić innego komponentu. Chodzi o to, że Delphi ukrywa przed nami tę funkcję. Przykładem jest ukryta możliwość, że TStatusBar ma na sobie pewne składniki, takie jak TProgressBar.

Własność

Po pierwsze, należy zauważyć, że Formularz jest całkowitym właścicielem wszystkich komponentów, które się w nim znajdują (umieszczonych na formularzu w czasie projektowania). Oznacza to, że gdy formularz zostanie zniszczony, wszystkie jego elementy również zostaną zniszczone. Na przykład, jeśli mamy aplikację z więcej niż jedną formą, gdy wywołujemy metodę Free lub Release dla obiektu formularza, my nie musisz się martwić o jawne uwolnienie wszystkich obiektów w tym formularzu - ponieważ formularz jest właścicielem wszystkich jego formularzy składniki.

Każdy komponent, który tworzymy, podczas projektowania lub wykonywania, musi być własnością innego komponentu. Właściciel komponentu - wartość jego właściwości Owner - jest określony przez parametr przekazany do konstruktora Create podczas tworzenia komponentu. Jedynym innym sposobem na ponowne przypisanie właściciela jest użycie metod InsertComponent / RemoveComponent w czasie wykonywania. Domyślnie formularz jest właścicielem wszystkich komponentów i jest z kolei własnością aplikacji.

Kiedy używamy słowa kluczowego Samego siebie jako parametr metody Create - obiekt, który tworzymy, jest własnością klasy, w której znajduje się metoda - która jest zwykle formą Delphi.

Z drugiej strony, jeśli innym komponentem (a nie formą) staniemy się właścicielem tego komponentu, wówczas ten komponent jest odpowiedzialny za usunięcie obiektu po jego zniszczeniu.

Jak każdy inny Składnik Delphi, niestandardowy komponent TFindFile może być tworzony, używany i niszczony w czasie wykonywania. Aby utworzyć, użyć i bezpłatnie Składnik TFindFile przy uruchomieniu możesz użyć następnego fragmentu kodu:

wykorzystuje Znajdź plik;

...
var FFile: TFindFile;

procedura TForm1.InitializeData;

zaczynać // forma („Jaźń”) jest właścicielem komponentu // nie ma rodzica, ponieważ // jest niewidocznym komponentem.

 FFile: = TFindFile. Utwórz (Jaźń);

 ...

koniec;

Uwaga: Ponieważ plik FFile jest tworzony z właścicielem (Form1), nie musimy nic robić, aby zwolnić komponent - zostanie on uwolniony, gdy właściciel zostanie zniszczony.

Właściwość komponentów

Wszystkie składniki, które mają tego samego właściciela, są dostępne jako część Właściwość składników tego właściciela. Poniższa procedura służy do wyczyszczenia wszystkich komponentów edycji znajdujących się w formularzu:

procedura ClearEdits (AForm: TForm);

var

 ii: Liczba całkowita;

zaczynać

dla ii: = 0 do Forma. ComponentCount-1 robić

gdyby (Forma. Komponenty [ii] jest TEdit) następnie TEdit (AForm. Komponenty [ii]). Tekst: = '';

koniec; 

„Sieroty”

Niektóre formanty (takie jak formanty ActiveX) są zawarte w oknach innych niż VCL niż w formantach nadrzędnych. Dla tych elementów sterujących wartość elementu nadrzędnego wynosi zero i ParentWindow właściwość określa okno nadrzędne inne niż VCL. Ustawienie ParentWindow powoduje przesunięcie formantu tak, aby znajdował się w określonym oknie. ParentWindow jest ustawiany automatycznie, gdy formant jest tworzony za pomocą CreateParented metoda.

Prawda jest taka, że ​​w większości przypadków nie musisz przejmować się rodzicami i właścicielami, ale jeśli chodzi o OOP i opracowanie komponentów lub jeśli chcesz zrobić Delphi jeden krok naprzód, stwierdzenia w tym artykule pomogą ci zrobić ten krok szybciej.

instagram story viewer