Jest to dość łatwe do zrozumienia tego z kodu. Wystarczy wyszukać tekst za TApplication.Create
. Na przykład za pomocą funkcji Znajdź w plikach IDE.
Ale zawsze można być leniwym i uruchomić debugger.
- Włącz debugowanie DCU.
- Ustaw punkt przerwania w
TApplication.Create
.
- Uruchom.
Kiedy program się zepsuje, spójrz na stos wywoławczy. Zobaczysz, że obiekt TApplication
jest tworzony od InitControls
w jednostce Controls
. I InitControls
jest wywoływane z sekcji initialization
jednostki Controls
.
Pełne stos nabór zwykły waniliowy aplikacji VCL wygląda następująco:
Vcl.Forms.TApplication.Create(nil)
Vcl.Controls.InitControls
Vcl.Controls.Vcl.Controls
System.InitUnits
System._StartExe(???,???)
SysInit._InitExe($5A81BC)
Project1.Project1
:749933aa kernel32.BaseThreadInitThunk + 0x12
:76f09ef2 ntdll.RtlInitializeExceptionChain + 0x63
:76f09ec5 ntdll.RtlInitializeExceptionChain + 0x36
robi to samo z TScreen.Create
, widać, że obiekt TScreen
również wystąpienia w InitControls()
.
Nie będę starał się wyjaśniać tego wszystkiego. Sądzę, że jest tu wystarczająco dużo informacji i porad, abyś mógł to wszystko opracować. Chociaż jest to stos wywołań z aplikacji XE3, będzie wyglądać tak samo dla twojej aplikacji Delphi 5.
Sprawia, że zastanawiam się, dlaczego Aplikacja została zadeklarowana w postaci jednostkowych na pierwszym miejscu (Kontrola używa Formularze, Formularze wykorzystuje kontrole) .. . – kobik
Sterowanie używa tylko formularzy w implementacji. TApplication musi być deklarowane wyżej niż TForm, ponieważ odnosi się do TForm w sekcji interfejsu. –