unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, AppEvnts;



type
  EWyjatek = class(EMathError);

  TMainForm = class(TForm)
    Panel1: TPanel;
    btnCLOSE: TBitBtn;
    btnStart1: TBitBtn;
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);
    procedure FormShow(Sender: TObject);
    procedure btnStart1Click(Sender: TObject);
    procedure btnCLOSEClick(Sender: TObject);
  private
	 fn : String;
    fh : TextFile;
  
  public

  end;

var
  MainForm: TMainForm;

implementation
{$R *.dfm}
{------------------------------------------------------------------------------}
procedure TMainForm.btnCLOSEClick(Sender: TObject);
begin
	Close();
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
	fn := ExtractFilePath(Application.ExeName) + 'app.log';
   if not FileExists(fn) then
   begin
   	AssignFile(fh, fn);
      Rewrite(fh);
      CloseFile(fh);
   end;
end;

procedure TMainForm.btnStart1Click(Sender: TObject);
var
   a     : Double;
   b     : Double;
   wynik : Double;

begin
	a     := 123.45;
	b     := 0.0;
	wynik := 0.0;

   // ta instrukcja spowoduję błąd:
	// wynik := a / b;


   // w tym przypadku błąd nie pojawi się na ekranie
   // nie trafi również do pliku
   try
		wynik := a / b;
	except
	   // zagłuszenie wyjątku
   end;
end;

procedure TMainForm.ApplicationEvents1Exception(Sender: TObject; E: Exception);
var
	dt     : TDateTime;
   e_opis : String;

begin
	e_opis := '';

	try
	   AssignFile(fh, fn);
   	Append(fh);
      e_opis := 'Błąd powstał: ' + DateTimeToStr(Now()) + ' ' + E.Message;
	   Writeln(fh, e_opis);
   finally
	   CloseFile(fh);
   end;

	ShowMessage('Bład zarejestrowany w pliku');
end;

end.

