Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
Po tych wstępnych czynnościach nie pozostaje nam nic innego jak zaimplementować
w programie dwie procedury +,-. obliczające kolejne całkowite potęgi Y wy-
branej liczby całkowitej X. Musimy również wypełnić treści procedur odpowiednich
zdarzeń, podobnie jak zostało to pokazane na wydruku 4.3.
Wydruk 4.3. Kod głównego modułu Unit_09.pas projektu Projekt_09.dpr, wykorzystującego przeciążane procedury
=>+K
A
/1.9%.=.L .
.C ) . . .
3%.
##
9 9
#'#
#*#
# $
#' $
#* $
!
1 56,.
1 56 ,.7%
!
DEF"A !
" 1 56 ,.7%
.27%
%
2
A
%
22F,
60
ABC Delphi 6
9 "I"&7 ,J0;%0J
7 J00J7 2
GGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
" 1 56,.
.2
%
2
A
%
22F,
9 "I"&7 ,J0;%0J
7 J00J7 2
GGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
"# $
.7%
%
9 "
*+
1 56.GG11M 222 N
GGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
"#* $
%
9 "
1 56'.+GG11M 221 OP
GGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
"#' $
%
& "
"
Program skompilujemy, korzystając z klawisza F9 lub opcji menu Run, Run. Śledząc
kod programu, możemy też zauważyć, iż w celu skasowania zawartości komponentu
Memo1 posługujemy się metodą .
Wyjątki
Podobnie jak w przypadku metod przeciążanych, ktoś mógłby powątpiewać w celowość
wprowadzania pojęcia wyjątku w kursie programowania, przeznaczonym dla osób
mniej zaawansowanych. Należy jednak zdawać sobie sprawę z faktu, iż wyjątki jako
obiekty pełnią bardzo ważną rolę we wszystkich współczesnych systemach operacyj-
nych oraz środowiskach programowania i pewne własności kompilatora, które jeszcze
do niedawna uważano za bardzo zaawansowane, obecnie już takimi być przestają.
Rozdział 4. ♦ Object Pascal w wydaniu Delphi
61
Wyjątki pozwalają osobie piszącej kod na uwzględnienie sytuacji, w której program
w jakimś momencie wykonywania może ulec niekontrolowanemu zakończeniu. Wy-
jątek może być umiejscowiony w dowolnej metodzie. W Delphi podstawową klasą, zajmującą się obsługą wyjątków, jest Exception (ang. wyjątek). Klasa ta wywodzi się
bezpośrednio z klasy TObject. Z kolei z Exception (chodź nie bezpośrednio) wywodzi
się klasa EMathError, będąca z kolei nadklasą (klasą bazową) dla zbioru niezwykle użytecznych klas, obsługujących wyjątki, powstałe przy wykryciu przez kompilator błędów operacji matematycznych na liczbach zmiennopozycyjnych (liczbach dziesiętnych). Wyjątki dziedziczące z EMathError zostały przedstawione w tabeli 4.1.
Tabela 4.1. Klasy dziedziczące z EMathError
Klasa wyjątku
Znaczenie
?7& %
Przekroczenie zakresu zmienności zadeklarowanego typu danych
?7
Nieprawidłowa operacja zmiennoprzecinkowa
? A1
Przekroczenie zakresu typu zmiennoprzecinkowego
?= A1
Wartość typu zmiennoprzecinkowego jest zbyt mała
?: 3
Zmiennoprzecinkowe dzielenie przez zero
Delphi posługuje się dwoma wyrażeniami przeznaczonymi do obsługi wyjątków.
Z pierwszym, a zarazem podstawowym z nich, zapoznamy się obecnie. Wyrażenie
/( uaktywnia procedurę obsługi wyjątku przejmującą kontrolę nad
dalszym wykonywaniem programu, w przypadku gdy zostanie wykonana jakaś nie-
dozwolona operacja. Jako przykład niech nam posłuży prosty algorytm wykonujący operację zmiennopozycyjnego dzielenia dwóch liczb, które wprowadzimy do odpowiednich komponentów edycyjnych. Bez trudu możemy przewidzieć, iż wyjątek po-
wstanie przy próbie wykonania dzielenia na znakach nie będących liczbami lub przy
próbie dzielenia przez zero.
Zaprojektujmy bardzo prostą aplikację, wykonującą zmiennopozycyjne dzielenie dwóch
liczb, wprowadzanych z klawiatury do dwóch nowoczesnych komponentów edycyj-
nych LabeledEdit1 i LabeledEdit2. Wynik będzie przechowywany w komponencie
LabeledEdit3.
Stwórzmy nowy formularz projektu Projekt_10.dpr, w skład którego wchodzić będą
dwa przyciski (reprezentujące klasę TButton) oraz trzy komponenty edycyjne (repre-
zentujące klasę TLabeledEdit z karty Additional). W inspektorze obiektów właściwo-
ściom Text komponentów LabeledEdit1 i LabeledEdit2 przypiszmy wartości 0,0, aby
ich cechy Text nie posiadały wartości nieokreślonej. Cechę Text komponentu Labele-
dEdit3 wykasujmy. Komponenty reprezentujące klasę TLabeledEdit posiadają moż-
liwość automatycznego ich opisu. Są one jakby połączeniem komponentów z klas TLabel i TEdit. Rozwijając w inspektorze obiektów opcje właściwości EditLabel komponentu LabeledEdit1 (obok nazwy właściwości w inspektorze obiektów pojawi
się znaczek „–”) opiszmy jego cechę Caption jako Liczba 1. Podobnie opiszemy wszystkie komponenty edycyjne, tak jak przedstawiono to na rysunku 4.5.
62
ABC Delphi 6
Rysunek 4.5.
Rozmieszczenie i opis
komponentów
reprezentujących
klasę TLabeledEdit
Bardzo często korzystanie z różnego rodzaju komponentów ułatwiają nam dymki
podpowiedzi (ang. hint). Jeżeli zechcemy je zastosować na potrzeby naszych okienek
edycji, musimy zamknąć opcje właściwości EditLabel (obok nazwy tej właściwości w inspektorze obiektów pojawi się znaczek „+”). Zaznaczmy myszką wybrany komponent i odszukajmy w inspektorze obiektów jego właściwość Hint, którą opiszemy jako Podaj pierwszą liczbę. Aby dymek podpowiedzi był rzeczywiście widoczny w trakcie działania programu, właściwości ShowHint należy nadać wartość . Analo-gicznie postąpimy z następnym komponentem edycyjnym.
Przystąpmy obecnie do wypełniania głównego modułu Unit_10.pas naszego formula-