Thật dễ dàng để làm việc này từ mã. Bạn chỉ cần thực hiện tìm kiếm văn bản cho TApplication.Create
. Ví dụ sử dụng tính năng Tìm trong tập tin của IDE.
Nhưng bạn luôn có thể lười biếng và yêu cầu trình gỡ lỗi thực hiện.
- Bật DCU gỡ lỗi.
- Đặt điểm ngắt tại
TApplication.Create
.
- Chạy.
Khi chương trình bị hỏng, hãy nhìn vào ngăn xếp cuộc gọi. Bạn sẽ thấy rằng đối tượng TApplication
được khởi tạo từ InitControls
trong đơn vị Controls
. Và InitControls
được gọi từ phần initialization
của đơn vị Controls
.
Cuộc gọi đầy đủ ngăn xếp cho một ứng dụng vani VCL đồng bằng trông như thế này:
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
Làm điều tương tự với TScreen.Create
, bạn sẽ thấy rằng đối tượng TScreen
cũng được thuyết minh trong InitControls()
.
Tôi sẽ không cố gắng giải thích tất cả những điều này. Tôi nghĩ có đủ thông tin và lời khuyên ở đây để bạn có thể làm việc đó từ đây. Mặc dù đây là ngăn xếp cuộc gọi từ một ứng dụng XE3, nó sẽ trông giống hệt cho ứng dụng Delphi 5 của bạn.
Nguồn
2013-02-07 17:37:09
Làm cho tôi tự hỏi tại sao ứng dụng được khai báo trong đơn vị hình thức ở nơi đầu tiên (Điều khiển sử dụng hình thức, hình thức sử dụng Controls) .. – kobik
Điều khiển chỉ sử dụng Biểu mẫu đang triển khai. TApplication phải được khai báo cao hơn TForm vì nó đề cập đến TForm trong phần giao diện của nó. –