Dzięki :)
Dziwi mnie tylko czemu w takim razie składnia w kursach jest taka:
type
TForm1=class(TForm)
Button1: TButton;
//deklaracja procedury
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Po co jakby dwie deklaracje pól typu public? Już lepiej byłoby napisać protected jako trzeci wariant.
Jeśli stworzysz własną klasę od zera, z poziomu kodu, to sekcje public,private, protected
możesz sobie układać dowolnie.
W przytoczonym przykładzie klasa TForm1 jest tworzona w środowisku IDE i stąd pierwsza, nieokreślona jawnie co do widzialności, sekcja pól następująca po deklaracji TForm1=class(TForm)
zawiera pola (obiekty) zarządzane przez środowisko IDE oraz związane z nimi metody obsługi zdarzeń. W tym przypadku masz Button1: TButton;
i procedure Button1Click(Sender: TObject);
.
Zatem taki podział sekcji wymusza samo środowisko IDE.
Zauważ że każdy obiekt który umieścisz na formie, wyląduje właśnie w tej pierwszej sekcji.
Klasa TForm jest trochę specyficzna, ponieważ jej podstawowy konstruktor create
, w celu utworzenia obiektów na formie, zawsze odwołuje się do zasobów w celu pobrania informacji o obiektach zdefiniowanych w pierwszej sekcji.
Chcąc utworzyć formę bez odwołania do zasobów klasa TForm posiada metodę createnew
, która tworzy pustą formę, ale wtedy wszystkie obiekty które mają się znaleźć na formie musisz utworzyć przy pomocy własnego kodu.
Zatem taki a nie inny domyślny układ sekcji w definicji klasy dziedziczącej z TForm i utworzonej w środowisku IDE nie wynika z samych zasad programowania obiektowego, ale również ze specyfiki samego środowiska IDE i kompilatora