Ustawianie własności komponentu inną drogą

0

Jeśli wpiszę:
Button1.Top to mam dojście do właściwości top tego buttona
Jednak jeśli położenie komponentu chcę ustawić w inny sposób:
Form1.Components[x]. (x liczba naturalna) to delphi już nie udostępnia właściwości "top" chociaż "name" udostępnia
W czym rzecz???

2

w podstawach obiektowości, której nie masz.

if Form1.Components[x] is TButton then
  TButton(Form1.Components[x]).Top := 10;
1

W tym, że właściwość Form.Components zwraca obiekt typu TComponent, czyli instancję klasy bazowej dla innych komponentów. A klasa TComponent nie posiada właściwości Top.

Warto też dodać, że właściwość Components daje dostęp do wszystkich komponentów znajdujących się na formularzu (bez względu na stopień zagnieżdżenia). Co innego właściwość Controls – ta zwraca instancję TControl i daje możliwość przeiterowania bo komponentach bezpośrednio leżących na formularzu (lub innym komponencie grupującym, np. TPanel, TGroupBox itd.).

Jeśli chcesz wykorzystać instancję zwracaną przez właściwość Components to trzeba brać pod uwagę kilka sposobów. Jeżeli masz pewność, że wskazanym komponentem jest np. TButton to wystarczy pobraną instancję zrzutować na ten typ:

TButton(MyForm.Components[Index]).Top := 100;

lub za pomocą operatora as:

(MyForm.Components[Index] as TButton).Top := 100;

Natomiast jeśli nie ma pewności, że komponent o zadanym indeksie to TButton, najpierw należy się tego upewnić, dodając warunek przed instrukcjami zmieniającymi:

if MyForm.Components[Index] is TButton then
  (MyForm.Components[Index] as TButton).Top := 100;

Jest jeszcze możliwość sprawdzenia, czy mamy do czynienia z instancją dziedziczącą z konkretnej klasy. Do tego celu służy metoda InheritsFrom:

if MyForm.Components[Index].InheritsFrom(TCustomButton) then
  // mamy do czynienia z instancją dziedziczącą po TCustomButton, np. TButton, TBitButton itd.

Jednak jej przeznaczenie jest nieco inne – ale warto o tym wspomnieć.

0

Dzięki za obszerne wyjaśnienia :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1