Tôi đang sử dụng Delphi 6 Pro. Tôi cần một sự kiện sẽ kích hoạt khi ứng dụng của tôi dứt khoát tắt nhưng trước khi bất kỳ Biểu mẫu nào bị hủy. Tôi nghĩ về bẫy WM_QUIT tin nhắn trong hình thức chính WndProc() nhưng điều đó không làm việc vì các hình thức bắt đầu phá hủy trước khi tôi nhìn thấy một tin nhắn WM_QUIT. Tôi đã tự hỏi nếu có một sự kiện Delphi tiêu chuẩn mà tôi có thể sử dụng để thực thi mã tại thời điểm này của chuỗi tắt các sự kiện? Tôi không thể sử dụng sự kiện FormClose() của biểu mẫu chính vì nó không được bảo đảm để kích hoạt, và sự kiện FormDestroy() đã quá muộn. Bất kỳ ý tưởng?Có sự kiện Delphi nào được đảm bảo khi được gọi khi ứng dụng chấm dứt nhưng trước khi bất kỳ biểu mẫu nào bị hủy?
Trả lời
Bạn sẽ không thấy một Thông tin về WM_QUIT
đến trong phương pháp WndProc()
, như WM_QUIT
là một tín hiệu cho thông điệp vòng để ngừng chạy, và như vậy nó thường không được cử đến một thủ tục cửa sổ.
Không có sự kiện cụ thể cho những gì bạn đang yêu cầu. Tuy nhiên, những gì bạn có thể làm là mở tệp .dpr của dự án và đặt bất kỳ mã nào bạn cần sau khi gọi tới số Application.Run
thoát. Vòng lặp tin nhắn không còn chạy nữa, nhưng các đối tượng Application
và MainForm
chưa được giải phóng.
Cách tốt nhất để thực hiện việc này (và tôi đã dành nhiều thời gian xem xét điều này qua nhiều năm) là kết nối một thủ tục thông qua quy trình AddTerminateProc() trong SysUtils.pas. Điều này làm việc mọi lúc và tôi đã sử dụng nó trong nhiều năm (trừ khi bạn giết quá trình thông qua trình quản lý tác vụ).
Cảm ơn Misha. Tôi cũng sẽ thử. –
- 1. Chức năng nào được gọi khi ứng dụng iPhone bị chấm dứt?
- 2. Xóa tệp được đảm bảo khi chấm dứt chương trình (C/C++)
- 3. Tải xuống tệp từ Internet trong khi có thể hủy tải xuống bất kỳ lúc nào
- 4. Trình xử lý sự kiện có được đảm bảo hoàn thành trước khi gọi lại AJAX không?
- 5. Làm thế nào để đảm bảo một đoạn mã được chạy trước khi thoát khỏi ứng dụng java
- 6. Có phương pháp nào trong appDelegate được gọi khi ứng dụng gặp sự cố không?
- 7. onScroll được gọi khi tôi đặt listView.onScrollListener (this), nhưng không có bất kỳ liên lạc nào
- 8. Bất kỳ cách nào để được thông báo khi có điều gì đó đăng ký một sự kiện/đại biểu?
- 9. C# ứng dụng chấm dứt bất ngờ
- 10. Phạm vi có chấm dứt khi không có tham chiếu nào được trả về không?
- 11. Gọi phương thức mỗi lần trước khi bất kỳ phương pháp nào khác được gọi là
- 12. có thể bắt được khi bất kỳ Tác vụ nào chấm dứt ngoại lệ và đăng nhập không?
- 13. Các máy hủy có được gọi sau khi ném C++?
- 14. Bật chế độ đảm bảo sẽ được gọi khi Activity không còn hoạt động?
- 15. Cách gọi sự kiện trước khi Environment.Exit()?
- 16. Có cách nào để đảm bảo tiến trình nền được sinh ra bởi chương trình của tôi bị giết khi quá trình của tôi chấm dứt?
- 17. Làm cách nào để đảm bảo phiên bản Giao diện được giải phóng trước khi FreeLibrary được gọi là
- 18. Khi truy cập, có cách nào để thực thi mã khi chấm dứt chương trình không?
- 19. Khi nào cần hủy các sự kiện trong Silverlight
- 20. Bất kỳ cân nhắc nào trước khi nhảy vào SQLite?
- 21. Chạy mã tùy chỉnh khi ứng dụng MFC bị chấm dứt: d'tor hoặc WM_CLOSE?
- 22. Sự kiện nào được kích hoạt khi ShowDialog (ParentForm) được gọi trong C#
- 23. Làm thế nào để phát hiện khi ứng dụng chấm dứt?
- 24. Khi nào ExecuteCodeWithGuaranteedCleanup thực sự đảm bảo dọn dẹp?
- 25. Cách nào đúng để lưu NSUserDefaults khi ứng dụng của tôi bị chấm dứt trên iOS
- 26. khi nào là sự kiện "DOMNodeInserted" được gọi?
- 27. Đa luồng (TThread) Ứng dụng Delphi sẽ không chấm dứt
- 28. Tôi làm cách nào để hủy gửi biểu mẫu trong nút gửi khi sự kiện nhấp?
- 29. Khi nào nên sử dụng Environment.Exit để chấm dứt ứng dụng bảng điều khiển?
- 30. Chức năng đảm bảo để được gọi trong C++ trong chấm dứt đột ngột hoặc thoát
Tuyệt vời @Remy Lebeau. Tôi không nghĩ đến việc sử dụng tệp dự án. –
Vấn đề duy nhất với điều này là sau khi Application.Run đã hoàn thành tất cả mọi thứ đã có hiệu quả đóng cửa và chỉ có phần cuối cùng còn lại để chạy. Điều này là rất muộn trong phần - quá muộn để làm bất kỳ công việc hiệu quả. – Misha