home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 October / PCWorld_2000-10_cd2.bin / Borland / interbase / IBConsole_src.ZIP / ibconsole / thdExternalEditor.pas < prev    next >
Pascal/Delphi Source File  |  2000-07-24  |  3KB  |  103 lines

  1. {
  2.  * The contents of this file are subject to the InterBase Public License
  3.  * Version 1.0 (the "License"); you may not use this file except in
  4.  * compliance with the License.
  5.  * 
  6.  * You may obtain a copy of the License at http://www.Inprise.com/IPL.html.
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS IS"
  9.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  10.  * the License for the specific language governing rights and limitations
  11.  * under the License.  The Original Code was created by Inprise
  12.  * Corporation and its predecessors.
  13.  * 
  14.  * Portions created by Inprise Corporation are Copyright (C) Inprise
  15.  * Corporation. All Rights Reserved.
  16.  * 
  17.  * Contributor(s): ______________________________________.
  18. }
  19.  
  20. unit thdExternalEditor;
  21.  
  22. interface
  23.  
  24. uses
  25.   Classes;
  26.  
  27. type
  28.   TExternalEditorThread = class(TThread)
  29.   private
  30.     { Private declarations }
  31.     FFileName,
  32.     FCmdLine,
  33.     FExceptionMsg: String;
  34.     procedure thdDisplayMessage;
  35.  
  36.   protected
  37.     procedure Execute; override;
  38.  
  39.   public
  40.     constructor Create(const ExtCmdLine, ExtFilename: string);
  41.   end;
  42.  
  43. implementation
  44.  
  45. uses
  46.   zluUtility, frmuMessage, Windows, SysUtils;
  47.  
  48. { TExternalEditorThread }
  49.  
  50. constructor TExternalEditorThread.Create(const ExtCmdLine, ExtFilename: string);
  51. begin
  52.   FFileName := ExtFileName;
  53.   FCmdLine := ExtCmdLine+' '+ExtFileName;
  54.   FreeOnTerminate := true;
  55.   inherited Create(False);
  56. end;
  57.  
  58. procedure TExternalEditorThread.Execute;
  59. var
  60.   retval: boolean;
  61.   StartupInfo: TStartupInfo;
  62.   ProcessInfo: TProcessInformation;
  63.   buf: array[byte] of char;
  64.  
  65. begin
  66.   try
  67.     try
  68.       FillChar (StartupInfo, sizeof(StartupInfo), 0);
  69.       StartupInfo.cb := sizeof (StartupInfo);
  70.       retval := CreateProcess (nil, PChar(FCmdLine), nil, nil, False,
  71.          NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
  72.  
  73.       if retval then
  74.       begin
  75.         with ProcessInfo do
  76.           WaitForSingleObject (hProcess, INFINITE);
  77.       end
  78.       else
  79.       begin
  80.         FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError,
  81.                 LOCALE_USER_DEFAULT, Buf, sizeof(Buf), nil);
  82.         raise Exception.Create (Buf+#13#10+'Command: '+cmdLine);
  83.       end;
  84.     except
  85.     on E: Exception do
  86.       begin
  87.         FExceptionMsg := E.Message;
  88.         Synchronize (thdDisplayMessage);
  89.       end;
  90.     end;
  91.   finally
  92.     DeleteFile (FFileName);
  93.   end;
  94. end;
  95.  
  96. procedure TExternalEditorThread.thdDisplayMessage;
  97. begin
  98.  DisplayMsg (ERR_EXTERNAL_EDITOR, FExceptionMsg);
  99. end;
  100.  
  101. end.
  102.  
  103.