Bạn có thể có MainForm gán một event handler OnClose
hoặc OnDestroy
để mỗi đứa trẻ MDI nó tạo ra. Mỗi khi một máy khách MDI được đóng/hủy, trình xử lý có thể kiểm tra xem có bất kỳ biểu mẫu con MDI nào khác vẫn đang mở, và nếu không thì làm bất cứ điều gì cần làm.
procedure TMainForm.ChildClosed(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
// the child being closed is still in the MDIChild list as it has not been freed yet...
if MDIChildCount = 1 then
begin
// do work
end;
end;
Hoặc:
const
APPWM_CHECK_MDI_CHILDREN = WM_APP + 1;
procedure TMainForm.ChildDestroyed(Sender: TObject);
begin
PostMessage(Handle, APPWM_CHECK_MDI_CHILDREN, 0, 0);
end;
procedure TMainForm.WndProc(var Message: TMessage);
begin
if Message.Msg = APPWM_CHECK_MDI_CHILDREN then
begin
if MDIChildCount = 0 then
begin
// do work
end;
Exit;
end;
inherited;
end;
Nguồn
2013-09-04 00:14:35
+1 Nice! Tốt hơn tôi. ;-) – NGLN
@NGLN - Cảm ơn! Của bạn là mạnh mẽ hơn mặc dù, trong trường hợp bạn cần phải biết khi một đứa trẻ làm điều này và rằng ... :) –
NGLN, Sertac Akyus và Remy Lebeau. Cảm ơn câu trả lời của bạn, tất cả đều tuyệt vời. Bạn rất tốt. Đối với tình huống này, mã tốt nhất là Sertac Akyuz. Đơn giản hơn và giải quyết được vấn đề của tôi. NGLN và Remy, tôi đã lưu mã của bạn cho các tình huống trong tương lai. Cảm ơn. – Delphiman