85 lines
2.0 KiB
ObjectPascal
85 lines
2.0 KiB
ObjectPascal
{ *************************************************************************** }
|
|
{ }
|
|
{ EControl Common Library }
|
|
{ }
|
|
{ Copyright (c) 2004 - 2015 EControl Ltd., Zaharov Michael }
|
|
{ www.econtrol.ru }
|
|
{ support@econtrol.ru }
|
|
{ }
|
|
{ *************************************************************************** }
|
|
|
|
{$mode delphi}
|
|
|
|
unit ecSysUtils;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, Controls, Forms;
|
|
|
|
// 0 - all is ok
|
|
// 1 - application terminated
|
|
// 2 - object destroyed
|
|
function SafeProcessMessages(Sender: TObject): integer;
|
|
procedure SafeDestroying(Sender: TObject);
|
|
|
|
implementation
|
|
|
|
uses SysUtils;
|
|
|
|
function SafeProcessMessages(Sender: TObject): integer;
|
|
begin
|
|
Application.ProcessMessages;
|
|
if Application.Terminated then Result:= 1 else Result:= 0;
|
|
end;
|
|
|
|
procedure SafeDestroying(Sender: TObject);
|
|
begin
|
|
end;
|
|
|
|
(*
|
|
// 0 - all is ok
|
|
// 1 - application terminated
|
|
// 2 - object destroyed
|
|
var
|
|
ProcessCounter: Cardinal;
|
|
RefList: TList = nil;
|
|
|
|
function SafeProcessMessages(Sender: TObject): integer;
|
|
begin
|
|
if RefList = nil then
|
|
RefList := TList.Create;
|
|
RefList.Add(Sender);
|
|
Inc(ProcessCounter);
|
|
try
|
|
Application.ProcessMessages;
|
|
if ProcessCounter mod 10000 = 0 then
|
|
Application.HandleMessage;
|
|
finally
|
|
if RefList.IndexOf(Sender) = -1 then
|
|
Result := 2
|
|
else if Application.Terminated then
|
|
Result := 1
|
|
else
|
|
Result := 0;
|
|
RefList.Remove(Sender);
|
|
end;
|
|
end;
|
|
|
|
procedure SafeDestroying(Sender: TObject);
|
|
begin
|
|
if RefList <> nil then
|
|
RefList.Remove(Sender);
|
|
end;
|
|
*)
|
|
|
|
|
|
initialization
|
|
//RefList := TList.Create;
|
|
|
|
finalization
|
|
//FreeAndNil(RefList);
|
|
|
|
|
|
end.
|