소스 검색

+ handle closing events

pierre 22 년 전
부모
커밋
c0054f06cd
2개의 변경된 파일50개의 추가작업 그리고 2개의 파일을 삭제
  1. 25 1
      fv/w32smsg.inc
  2. 25 1
      fvision/w32smsg.inc

+ 25 - 1
fv/w32smsg.inc

@@ -62,6 +62,25 @@ procedure SystemEventHandler(var ir:INPUT_RECORD);
 var
 var
   Xsize, YSize : longint;
   Xsize, YSize : longint;
 
 
+function HandleConsoleCtrl(typ : dword) : BOOL; stdcall;
+var
+  SE :   TSystemEvent;
+begin
+  HandleConsoleCtrl:=false;
+  case typ of
+    CTRL_CLOSE_EVENT,
+    CTRL_LOGOFF_EVENT,
+    CTRL_SHUTDOWN_EVENT :
+      begin
+        SE.typ:=SysClose;
+        SE.CloseTyp:=typ;
+        PutSystemEvent(SE);
+        HandleConsoleCtrl:=true;
+      end;
+  end;
+end;
+
+
 procedure InitSystemMsg;
 procedure InitSystemMsg;
 
 
 var
 var
@@ -86,6 +105,7 @@ begin
   InitializeCriticalSection(ChangeSystemEvents);
   InitializeCriticalSection(ChangeSystemEvents);
   SetResizeEventHandler(@SystemEventHandler);
   SetResizeEventHandler(@SystemEventHandler);
   SetFocusEventHandler(@SystemEventHandler);
   SetFocusEventHandler(@SystemEventHandler);
+  SetConsoleCtrlHandler(@HandleConsoleCtrl,true);
   SystemEventActive:=true;
   SystemEventActive:=true;
 end;
 end;
 
 
@@ -104,6 +124,7 @@ begin
   SetResizeEventHandler(nil);
   SetResizeEventHandler(nil);
   SetFocusEventHandler(nil);
   SetFocusEventHandler(nil);
   DeleteCriticalSection(ChangeSystemEvents);
   DeleteCriticalSection(ChangeSystemEvents);
+  SetConsoleCtrlHandler(@HandleConsoleCtrl,false);
   SystemEventActive:=false;
   SystemEventActive:=false;
 end;
 end;
 
 
@@ -170,7 +191,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.2  2002-06-06 20:32:34  pierre
+  Revision 1.3  2003-01-31 11:01:50  pierre
+   + handle closing events
+
+  Revision 1.2  2002/06/06 20:32:34  pierre
    * check console window size changes
    * check console window size changes
 
 
   Revision 1.1  2002/05/21 11:59:57  pierre
   Revision 1.1  2002/05/21 11:59:57  pierre

+ 25 - 1
fvision/w32smsg.inc

@@ -62,6 +62,25 @@ procedure SystemEventHandler(var ir:INPUT_RECORD);
 var
 var
   Xsize, YSize : longint;
   Xsize, YSize : longint;
 
 
+function HandleConsoleCtrl(typ : dword) : BOOL; stdcall;
+var
+  SE :   TSystemEvent;
+begin
+  HandleConsoleCtrl:=false;
+  case typ of
+    CTRL_CLOSE_EVENT,
+    CTRL_LOGOFF_EVENT,
+    CTRL_SHUTDOWN_EVENT :
+      begin
+        SE.typ:=SysClose;
+        SE.CloseTyp:=typ;
+        PutSystemEvent(SE);
+        HandleConsoleCtrl:=true;
+      end;
+  end;
+end;
+
+
 procedure InitSystemMsg;
 procedure InitSystemMsg;
 
 
 var
 var
@@ -86,6 +105,7 @@ begin
   InitializeCriticalSection(ChangeSystemEvents);
   InitializeCriticalSection(ChangeSystemEvents);
   SetResizeEventHandler(@SystemEventHandler);
   SetResizeEventHandler(@SystemEventHandler);
   SetFocusEventHandler(@SystemEventHandler);
   SetFocusEventHandler(@SystemEventHandler);
+  SetConsoleCtrlHandler(@HandleConsoleCtrl,true);
   SystemEventActive:=true;
   SystemEventActive:=true;
 end;
 end;
 
 
@@ -104,6 +124,7 @@ begin
   SetResizeEventHandler(nil);
   SetResizeEventHandler(nil);
   SetFocusEventHandler(nil);
   SetFocusEventHandler(nil);
   DeleteCriticalSection(ChangeSystemEvents);
   DeleteCriticalSection(ChangeSystemEvents);
+  SetConsoleCtrlHandler(@HandleConsoleCtrl,false);
   SystemEventActive:=false;
   SystemEventActive:=false;
 end;
 end;
 
 
@@ -170,7 +191,10 @@ end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.2  2002-06-06 20:32:34  pierre
+  Revision 1.3  2003-01-31 11:01:50  pierre
+   + handle closing events
+
+  Revision 1.2  2002/06/06 20:32:34  pierre
    * check console window size changes
    * check console window size changes
 
 
   Revision 1.1  2002/05/21 11:59:57  pierre
   Revision 1.1  2002/05/21 11:59:57  pierre