Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
Wstp ........................................................................... 11
rodowisko programistyczne
Borland Developer Studio
i jzyk programowania Object Pascal ..........15
Spis treci
Spis treci
II
Spis treci
10
11
Skorowidz ....................................................................315
10
Po wczytaniu zobaczymy nie ten plik, z ktrym pracowalimy w poprzednim rozdziale (Unit1.pas), tylko widoczny na listingu 2.1 plik Kolory.dpr. Jest to gwny
plik programu, od niego rozpoczyna si wykonywanie kodu caego projektu.
54
Rysunek 2.1.
Listing 2.1.
program Kolory;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Kolory';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
55
//Form1
W kolejnej linii znajduje si co dziwnego ({$R *.res}), co wyglda jak komentarz, ale nim nie jest. Jest to dyrektywa prekompilatora. Ta konkretna dyrektywa
wczytuje do projektu plik zasobw .res, czyli plik, w ktrym zapisana jest np.
ikona aplikacji oraz informacje o wersji i nazwie produktu, ktre okrelilimy
w poprzednim rozdziale. Wicej o dyrektywach prekompilatora dowiemy si
w nastpnym rozdziale. Tu jednak moemy ucili wiedz o wieloliniowych komentarzach. Nie jest komentarzem wyraenie, w ktrym za lewym nawiasem
klamrowym znajduje si znak dolara. To jest dyrektywa.
I w ten sposb docieramy do zasadniczej czci, rozpoczynajcej si od sowa kluczowego begin, a zakoczonej sowem kluczowym end.. Midzy nimi znajduj
si instrukcje wykonywane przez program. Z tego, co widzimy, wszystkie cztery
wykonywane w tym miejscu polecenia s zwizane z obiektem Application. Jest
to obiekt tworzony automatycznie (jego definicja znajduje si w module Forms,
ktry jak pamitamy zosta wymieniony w sekcji uses). Obiekt ten reprezentuje
nasz aplikacj. Po pierwsze wywoywana jest jego metoda Initialize, ktra
w naszym projekcie tak naprawd niczego ciekawego nie robi (waciwie nie robi
nic)1. Nastpnie zmieniana jest wasno Title aplikacji na Kolory. Linia ta pojawia si w momencie, w ktrym ustalalimy tytu aplikacji za pomoc okna
opcji projektu.
Znacznie waniejsze s dwie kolejne linie. Polecenie Application.CreateForm
(TForm1, Form1); tworzy bowiem obiekt formy i zapisuje odwoanie do niego do
zmiennej o nazwie Form1 zadeklarowanej w module Unit1. Utworzony obiekt
formy jest instancj klasy TForm1. Brzmi to troch zagadkowo, ale jest proste.
Relacja midzy obiektem a klas jest taka sama, jak midzy zmienn i jej typem.
56
Zwrmy uwag, e wywoanie funkcji, procedur i metod, ktre nie przyjmuj adnych
argumentw, nie wymaga w Object Pascalu dodawania pustych nawiasw. Cho jest to
dopuszczalne.
57
Listing 2.2.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
ScrollBar1: TScrollBar;
ScrollBar2: TScrollBar;
ScrollBar3: TScrollBar;
procedure ScrollBar1Change(Sender: TObject);
procedure Panel1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Panel1Click(Sender: TObject);
begin
ShowMessage('Witaj wiecie!');
end;
58
Sekcje moduu
Kady modu podzielony jest na dwie czci: interfejs i implementacje. S to nie
tylko nazwy czci moduw, ale i podstawowe terminy programowania strukturalnego. Interfejs to zbir tych procedur, funkcji i klas, ktre s udostpniane
przez ten modu innym moduom, jego cz publiczna. Wszystkie deklaracje, ktre
znajduj si w sekcji interface moduu Unit1, s widoczne np. z pliku Kolory.dpr.
W szczeglnoci dostpna jest tam klasa TForm1, ktrej definicja jest te w sekcji
interface. Natomiast implementacja to cz prywatna moduu. W niej znajduj
si kody procedur, funkcji i metod. Mog by tu rwnie zadeklarowane pomocnicze zmienne. Jeeli funkcja zdefiniowana jest w sekcji implementacji i nie jest
zadeklarowana w sekcji interfejsu, nie bdzie widoczna poza moduem.
Poza tym modu moe zawiera jeszcze sekcj initialization, ktra suy do wykonywania polece w momencie wczytywania moduu do pamici przy starcie
programu, oraz sekcj finalization, ktra pozwala na okrelenie czynnoci zwizanych z koczeniem pracy moduu przy zamykaniu programu. Moe to by na
przykad otwieranie pliku rejestrowania zdarze aplikacji i jego zamykanie. Sekcje
te nie s domylnie tworzone w moduach Delphi, i w tej ksice, poza prostym
wiczeniem w rozdziale 4, nie uyjemy ich ani razu.
59
Po niej nastpuj definicje zmiennych: Panel1, ktra zwizana jest z panelem, i trzy
zmienne: ScrollBar1, ScrollBar2 i ScrollBar3, reprezentujce suwaki. Widoczne
s rwnie deklaracje dwch metod zdarzeniowych, ktre stworzylimy, a wic
Panel1Click i ScrollBar1Change. One rwnie s zadeklarowane w klasie formy
wobec tego te s w jaki sposb z ni zwizane. To jest wanie definicja
klasy TForm1. Zmienne zdefiniowane w jej obrbie nazywane s polami. Panel1 jest
zatem polem klasy TForm1. Natomiast funkcje i procedury zdefiniowane w obrbie
klasy bdziemy nazywa metodami. Nie chciabym jednak teraz dalej rozwija
tematu klas na to przyjdzie czas w rozdziale 5.
Ostatnia sekcja interfejsu moduu Unit1 to sekcja var. Zawiera ona definicj jednej
tylko zmiennej. Jest ni zmienna o nazwie Form1 typu TForm1. W rzeczywistoci
ju t zmienn poznalimy. Jeeli przypomnimy sobie polecenie tworzce form
z pliku Kolory.dpr:
Application.CreateForm(TForm1, Form1);
to okae si, e wanie do zmiennej Form1 zapisana zostaa referencja do utworzonego obiektu formy. Zmienna ta reprezentuje wic obiekt formy, ktry widzimy
w postaci okna po uruchomieniu aplikacji.
Implementacja
W sekcji implementacji mog znajdowa si te same podsekcje, co w interfejsie,
a wic uses, type i var. Jednak w tym przypadku typy zdefiniowane w sekcji type
i zmienne zadeklarowane w sekcji var bd lokalne, czyli niedostpne poza moduem. Bd mogy by wykorzystane jedynie w sekcji implementacji tego konkretnego moduu. Podobnie moduy wymienione w sekcji uses, ktra moe tu by
umieszczona, bd widoczne jedynie w kodzie z implementacji tego moduu. Moliwo tworzenia lokalnej sekcji uses okae si bardzo wana; pozwoli bowiem
zapobiec zaptleniu moduw, co zdarza si, gdy np. w projekcie mamy wicej
form (kada definiowana jest w osobnym module), ktre chc by dla siebie nawzajem widoczne. Problem ten zostanie szerzej omwiony w rozdziale 8.
W interfejsie naszego moduu nie ma jednak adnej z wymienionych wyej sekcji,
a jest tylko kolejna dyrektywa prekompilatora i definicje dwch metod, ktre zdefiniowalimy w poprzednim rozdziale. Skoro ju wiemy, e klasa TForm1 jest
wacicielem tych metod, to zwrmy uwag, e w odrnieniu do ich deklaracji
w klasie, ktre widzielimy w sekcji interface, tu ich nazwy poprzedzone s nazw klasy, do ktrej nale. Mamy wic np.
procedure TForm1.Panel1Click(Sender: TObject);
To wanie odrnia definicje procedur skadowych, ktre umwilimy si nazywa po prostu metodami, od zwykych procedur.
60
Kolejna dyrektywa preprocesora, ktra znajduje si w interfejsie moduu, jest bardzo podobno do tej, ktra doczaa do projektu plik zasobw. Tym razem jednak
doczany jest plik z rozszerzeniem .dfm (w projektach .NET .nfm). Jest to
plik zawierajcy wartoci wasnoci formy i umieszczonych na niej komponentw, jakie okrelilimy za pomoc inspektora obiektw i na podgldzie formy
w widoku projektowania. Z atwoci moemy ten plik obejrze, korzystajc
choby z Notatnika Windows, jest to bowiem w nowych wersjach Delphi plik
tekstowy. Mona go rwnie obejrze w rodowisku Delphi. W tym celu naley
przej do widoku projektowania (F12) i klikn prawym klawiszem na podgldzie formy, aby rozwin menu kontekstowe. Z tego menu wybieramy pozycj
View as Text. Zamiast podgldu formy zobaczymy wwczas rwnowany jej
zbir wasnoci. To jest wanie zawarto pliku Unit1.dfm. Zawiera ona to wszystko, co mona skonfigurowa w formie w widoku projektowania, a co bezpieczniej jest usun sprzed oczu programisty, a wic z edytowanego pliku moduu
Unit1.pas. I tak naprawd lepiej w pliku .dfm/.nfm nie grzeba rcznie do jego
edycji suy widok projektowania. Aby powrci do podgldu formy z menu kontekstowego, wybieramy View as Form.
Teraz wczytajmy kod rdowy projektu, ktry w poprzednim rozdziale przygotowalimy dla platformy .NET, eby przekona si, jak wiele jest w nim rnic
w porwnaniu do projektu dla Win32. Wczytywanie projektu odbywa si identycznie jak w przypadku projektu dla Win32, z t jedn rnic, e Delphi musi
by uruchomione w trybie, ktry pozwala na edycj projektw .NET.
Ponownie zobaczymy plik Kolory.dpr. Okazuje si, e rni si on od poznanego
wczeniej w kilku znaczcych szczegach. Przede wszystkim rzuca si w oczy
zbir dyrektyw, ktre znajduj si bezporednio za lini program Kolory; (rysunek 2.2). Odpowiadaj one za zawarto gazi References widocznej w oknie projektu; wskazuje ona cieki dostpu do zarzdzanych bibliotek wykorzystywanych
w projekcie. Poza bibliotekami platformy .NET (np. System.dll) mog tam by biblioteki zawierajce komponenty VCL.NET i inne klasy zwizane z Delphi (pliki
Borland.Vcl.dll, Borland.Delphi.dll i Borland.VclRtl.dll).
Dalsza cz kodu rni si jeszcze dwoma rzeczami. Po pierwsze za dyrektyw
preprocesora wczytujc plik zasobw znajduje si linia z napisem Program/
Assembly Information. Jeeli klikniemy znak plusa widoczny na lewym marginesie przy tej linii (rysunek 2.2), to... pewnie westchniemy oszoomieni. Pojawi
61
Rysunek 2.2.
si bowiem znaczna ilo kodu i komentarzy. Nie ma tam jednak adnej linii typowej dla Pascala, a wszystkie linie otoczone s nawiasami kwadratowymi. S to
atrybuty przechowujce numer wersji, nazw producenta, znaki zastrzeone i inne
informacje, ktre ustalilimy w oknie opcji projektu. W przypadku projektu Win32
wszystkie te informacje umieszczone zostay w pliku zasobw Kolory.res. Tym
razem ukryte zostay w bloku Program/Assembly Information, ktry mona na
szczcie zwin z powrotem do jednej linii. Wwczas zobaczymy ponownie blok
begin..end, a w nim polecenia inicjujce aplikacj. Te polecenia s ju identyczne,
jak w projekcie Win32. Przed tym blokiem dodany jest jednak atrybut STAThread.
Mwic w wielkim skrcie, informuje on platform .NET, e nasza aplikacja powinna komunikowa si z systemem w trybie pojedynczego wtku (prosz nie
przejmowa si, jeeli to Czytelnikowi nic nie mwi).
Natomiast jeeli zajrzymy do pliku moduu Unit1.pas, ktry powinien nas interesowa najbardziej, to okae si, e poza nieco wiksz liczb zadeklarowanych
w sekcji uses moduw nie rni si on niczym od swojego odpowiednika dla
platformy Win32.
62