Rozdział 19

[ Powrót do kursów ]

Jeszcze trochę na temat wyjątków

Omawiając wyjątki nie wspomniałem wówczas o jeszcze jednej ważnej rzeczy. Mianowicie o selektywnej obsługi wyjątków. Spójrz na poniższy kod:

    try
       
Image1.Picture.LoadFromFile('C:\Image.jpg');
    except
  
     on EInvalidGraphic do begin
                           
MessageDlg('To nie jest plik graficzny!', mtError, [mbOK], 0);
        end;
       
        on
EInvalidImage('Ten opbrazek jest uszkodzony!',mtError, [mbOK], 0);

        end;

Jak widzisz program może obsłużyć wiele wyjątków w zależności od zaistniałej sytuacji. W pierwszym przypadku jeżeli obrazek nie będzie miał formatu graficznego wywołany zostanie pierwszy komunikat. Jeżeli obrazek jest uszkodzony wywoływany jest komunikat drugi. Poniżej napisałem kilka najpopularniejszych typów:

EFOpenError            -    W przypadku błędu podczas otwarcia pliku.
EFCreateError          -    W przypadku złego np. zapisania pliku.
EWriteError              -    W przypadku złego wpisania np. do pliku.
EComponentError     -    W przypadku błędu komponentu.
EInvalidOperation     -    W przypadku błędu podczas wykonywania jakiejś operacji.

Możliwe jest także napisanie własnego wyjątku. 

  1. W sekcji interface przed sekcją implementation wpisz taką linie kodu:

    type 
               
    EMojWyjatek = class(Exception);

 

Teraz możesz pisać:

  except
        on
EInvalidGrapihic do begin
               
{tu wpisz obsługę wyjątku};
        end;

        on
EMojWyjatek do begin
               
{tu wpisz obsługę swojego wyjątku}end;

W powyższym przykładzie zadeklarowałeś własny typ wyjątku (nowa klasa).

 

Trochę na temat wywoływania okien komunikatów

Pamiętacie jak pisałem o wywoływaniu okien?

MessageDlg('Hej!', mtInformation, [mbOK], 0);

Można także ustawić położenie takiego okna:

MessageDlgPos('Hej',mtInformation, [mbOK], 0, 20,2);

W powyższym przypadku okno zostanie ustawione o pozycji 20 i 2. Można też zrobić tak:

ShowMessagePos('Hej',20,2);

Przeciążanie

Przeciążanie to nowość w Delphi 4. W poprzednich wersjach Delphi musiałeś pisać coś takiego:

function Dodawanie(L1, L2 : Integer) : Integer;
function Dodawanie2(L1, L2 : Double)  : Double;

Teraz możesz pisać tak:

function Dodawanie(L1, L2 : Integer) : Integer; overload;
function Dodawanie(L1, L2 : Double) : Double; overload;

Rozumiesz w czym rzecz? W poprzednich wersjach Delphi nie tolerowało nazw funkcji o takich samych nazwach. Teraz jest to możliwe dzięki zastosowaniu słówka overload.

Adam Boduch

[ Powrót do kursów ]