Explorar o código

* fix the disappearing desktop for win32

pierre %!s(int64=23) %!d(string=hai) anos
pai
achega
1cc272351a
Modificáronse 2 ficheiros con 27 adicións e 4 borrados
  1. 10 1
      ide/fpide.pas
  2. 17 3
      ide/fpusrscr.pas

+ 10 - 1
ide/fpide.pas

@@ -810,6 +810,10 @@ begin
 {$ifndef go32v2}
 {$ifndef go32v2}
   InitScreen;
   InitScreen;
 {$endif ndef go32v2}
 {$endif ndef go32v2}
+{$ifdef win32}
+  { write the empty screen to dummy console handle }
+  UpdateScreen(true);
+{$endif ndef win32}
   InitEvents;
   InitEvents;
   InitSysError;
   InitSysError;
   CurDirChanged;
   CurDirChanged;
@@ -822,9 +826,11 @@ begin
 {$ifdef Unix}
 {$ifdef Unix}
   SetKnownKeys;
   SetKnownKeys;
 {$endif Unix}
 {$endif Unix}
+{$ifndef win32}
 {$ifndef go32v2}
 {$ifndef go32v2}
   UpdateScreen(true);
   UpdateScreen(true);
 {$endif go32v2}
 {$endif go32v2}
+{$endif win32}
 end;
 end;
 
 
 function TIDEApp.AutoSave: boolean;
 function TIDEApp.AutoSave: boolean;
@@ -1187,7 +1193,10 @@ end;
 END.
 END.
 {
 {
   $Log$
   $Log$
-  Revision 1.10  2002-04-12 08:58:22  pierre
+  Revision 1.11  2002-04-25 13:34:17  pierre
+   * fix the disappearing desktop for win32
+
+  Revision 1.10  2002/04/12 08:58:22  pierre
    + add RTE(250) for Ctrl+F11 in DEBUG mode
    + add RTE(250) for Ctrl+F11 in DEBUG mode
 
 
   Revision 1.9  2002/03/20 14:52:01  pierre
   Revision 1.9  2002/03/20 14:52:01  pierre

+ 17 - 3
ide/fpusrscr.pas

@@ -130,6 +130,7 @@ type
       DosScreenBufferHandle,
       DosScreenBufferHandle,
       IDEScreenBufferHandle,
       IDEScreenBufferHandle,
       StartScreenBufferHandle,
       StartScreenBufferHandle,
+      DummyScreenBufferHandle,
       NewScreenBufferHandle : THandle;
       NewScreenBufferHandle : THandle;
       IDEActive : boolean;
       IDEActive : boolean;
       ConsoleMode,IdeMode      : Dword;
       ConsoleMode,IdeMode      : Dword;
@@ -613,6 +614,10 @@ begin
     GENERIC_READ or GENERIC_WRITE,
     GENERIC_READ or GENERIC_WRITE,
     FILE_SHARE_READ or FILE_SHARE_WRITE,SecurityAttr,
     FILE_SHARE_READ or FILE_SHARE_WRITE,SecurityAttr,
     CONSOLE_TEXTMODE_BUFFER,nil);
     CONSOLE_TEXTMODE_BUFFER,nil);
+  DummyScreenBufferHandle:=CreateConsoleScreenBuffer(
+    GENERIC_READ or GENERIC_WRITE,
+    FILE_SHARE_READ or FILE_SHARE_WRITE,SecurityAttr,
+    CONSOLE_TEXTMODE_BUFFER,nil);
   StartScreenBufferHandle:=GetStdHandle(STD_OUTPUT_HANDLE);
   StartScreenBufferHandle:=GetStdHandle(STD_OUTPUT_HANDLE);
   GetConsoleMode(GetStdHandle(Std_Input_Handle), @ConsoleMode);
   GetConsoleMode(GetStdHandle(Std_Input_Handle), @ConsoleMode);
   IdeMode:=ConsoleMode;
   IdeMode:=ConsoleMode;
@@ -655,6 +660,7 @@ begin
   SetStdHandle(Std_Output_Handle,StartScreenBufferHandle);
   SetStdHandle(Std_Output_Handle,StartScreenBufferHandle);
   UpdateFileHandles;
   UpdateFileHandles;
   CloseHandle(NewScreenBufferHandle);
   CloseHandle(NewScreenBufferHandle);
+  CloseHandle(DummyScreenBufferHandle);
   inherited Done;
   inherited Done;
 end;
 end;
 
 
@@ -841,6 +847,9 @@ end;
 procedure TWin32Screen.SaveIDEScreen;
 procedure TWin32Screen.SaveIDEScreen;
 begin
 begin
   GetConsoleMode(GetStdHandle(Std_Input_Handle), @IdeMode);
   GetConsoleMode(GetStdHandle(Std_Input_Handle), @IdeMode);
+  { set the dummy buffer as active already now PM }
+  SetStdHandle(Std_Output_Handle,DummyScreenBufferHandle);
+  UpdateFileHandles;
 end;
 end;
 
 
 { dummy for win32 as the Buffer screen
 { dummy for win32 as the Buffer screen
@@ -848,8 +857,8 @@ end;
 procedure TWin32Screen.SaveConsoleScreen;
 procedure TWin32Screen.SaveConsoleScreen;
 begin
 begin
   GetConsoleMode(GetStdHandle(Std_Input_Handle), @ConsoleMode);
   GetConsoleMode(GetStdHandle(Std_Input_Handle), @ConsoleMode);
-  { set the IDE buffer as active already now PM }
-  SetStdHandle(Std_Output_Handle,IDEScreenBufferHandle);
+  { set the dummy buffer as active already now PM }
+  SetStdHandle(Std_Output_Handle,DummyScreenBufferHandle);
   UpdateFileHandles;
   UpdateFileHandles;
 end;
 end;
 
 
@@ -869,6 +878,8 @@ var
   res : boolean;
   res : boolean;
   error : longint;
   error : longint;
 begin
 begin
+  SetStdHandle(Std_Output_Handle,IDEScreenBufferHandle);
+  UpdateFileHandles;
   GetConsoleScreenBufferInfo(IDEScreenBufferHandle,
   GetConsoleScreenBufferInfo(IDEScreenBufferHandle,
     @ConsoleScreenBufferInfo);
     @ConsoleScreenBufferInfo);
   SetConsoleActiveScreenBuffer(IDEScreenBufferHandle);
   SetConsoleActiveScreenBuffer(IDEScreenBufferHandle);
@@ -932,7 +943,10 @@ end;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.8  2002-01-22 16:29:52  pierre
+  Revision 1.9  2002-04-25 13:34:17  pierre
+   * fix the disappearing desktop for win32
+
+  Revision 1.8  2002/01/22 16:29:52  pierre
     * try to fix win32 problem with Dos program ouptut in command shell
     * try to fix win32 problem with Dos program ouptut in command shell
       Warning, to debug under win32 with GDB you must use "set new-console on"
       Warning, to debug under win32 with GDB you must use "set new-console on"