procedure TgsCatcher.SetEnabled(const Value: boolean); begin FEnabled := Value; if Enabled then EnableCatcher else DisableCatcher; end;
procedure TgsCatcher.DisableCatcher; begin Application.OnException := nil; end;
procedure TgsCatcher.EnableCatcher; begin Application.OnException := Catcher; end;
procedure TgsCatcher.Catcher(Sender: TObject; E: Exception); begin Fn := ExtractFilename(Application.ExeName)+'_'+ Screen.ActiveForm.Name+ FormatDateTime('_ddmmyyyy_hhnnss',now)+ '_debug'; if GenerateScreenshot then DoGenerateScreenshot; if CollectInfo then DoCollectInfo(E); end;
procedure TgsCatcher.DoGenerateScreenshot; var bmp: TBitmap; jpg: TJPEGImage; begin bmp := Screen.ActiveForm.GetFormImage; if not FJPEGScreenshot then bmp.SaveToFile(fn+'.bmp') else begin jpg := TJPEGImage.Create; jpg.CompressionQuality := JPEGQuality; jpg.Assign(bmp); jpg.SaveToFile(fn+'.jpg'); FreeAndNil(jpg); end; FreeAndNil(bmp); end;
function TgsCatcher.CollectUserName: string; var uname: pchar; unsiz: cardinal; begin uname := StrAlloc(255); unsiz := 254; GetUserName(uname,unsiz); if (unsiz > 0) then Result := string(uname) else Result := 'n/a'; StrDispose(uname); end;
function TgsCatcher.CollectComputerName: string; var cname: pchar; cnsiz: cardinal; begin cname := StrAlloc(MAX_COMPUTERNAME_LENGTH + 1); cnsiz := MAX_COMPUTERNAME_LENGTH + 1; GetComputerName(cname,cnsiz); if (cnsiz > 0) then Result := string(cname) else Result := 'n/a'; StrDispose(cname); end;
procedure TgsCatcher.DoCollectInfo(E: Exception); var sl: TStringList; begin sl := tstringlist.Create; sl.add('--- This report is created by automated reporting system.'); sl.add('Computer name is: ['+ComputerName+']'); sl.add('User name is: ['+UserName+']'); sl.add('--- End of report ---------------------------------------'); sl.SaveToFile(Fn+'.txt'); end;
end.
Зачем вылаживать исходник для ознакомления, если он нерабочий. Создать дополнительные трудности начинающим программистам? Поверьте им и так трудно. Вспомните себя... :)
//**! ---------------------------------------------------------- //**! This unit is a part of GSPackage project (Gregory Sitnin's //**! Delphi Components Package). //**! ---------------------------------------------------------- //**! You may use or redistribute this unit for your purposes //**! while unit's code and this copyright notice is unchanged //**! and exists. //**! ---------------------------------------------------------- //**! (c) Gregory Sitnin, 2001-2002. All rights reserved. //**! ----------------------------------------------------------