2011-10-10 33 views
7

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

14

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 ApplicationMainForm chưa được giải phóng.

+0

Tuyệt vời @Remy Lebeau. Tôi không nghĩ đến việc sử dụng tệp dự án. –

+1

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

7

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ụ).

+0

Cảm ơn Misha. Tôi cũng sẽ thử. –

Các vấn đề liên quan