ROZDZIAŁ 19





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.