You are on page 1of 19

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

ABC Delphi 2006


Autor: Jacek Matulewski
ISBN: 83-246-0573-8
Format: B5, stron: 320
Przykady na ftp: 3950 kB

ZAMW DRUKOWANY KATALOG

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

rodowisko programistyczne Delphi od lat cieszy si zasuon popularnoci wrd


twrcw oprogramowania. Potne narzdzie programistyczne, oparte na popularnym
jzyku Pascal, byo prekursorem rodowisk wizualnych, w ktrych tworzenie aplikacji
przypomina budowanie modelu z klockw. Kolejne wersje Delphi byy wykorzystywane
do tworzenia przernych aplikacji poczwszy od prostych programikw,
a skoczywszy na rozbudowanych systemach bazodanowych. Najnowsza wersja,
oznaczona symbolem 2006, umoliwia tworzenie aplikacji dla platformy .NET
oraz tradycyjnych aplikacji Win32.
Ksika ABC Delphi 2006 to wprowadzenie do programowania w tym rodowisku.
Na praktycznych przykadach przedstawia najnowsz wersj Delphi, jzyk Object
Pascal oraz filozofi tworzenia aplikacji na podstawie komponentw VCL. Czytajc j,
poznasz rodowisko programistyczne, elementy jzyka Object Pascal oraz zasady
programowania strukturalnego i obiektowego. Nauczysz si budowa wasne aplikacje
dla systemu Windows oraz wykorzystywa i tworzy komponenty VCL. Zdobdziesz
solidne podstawy do dalszej nauki programowania w Delphi.
Struktura projektu w Delphi
Typy danych i zmienne
Instrukcje sterujce, ptle i wyraenia warunkowe
Programowanie obiektowe
Wykrywanie i usuwanie bdw w kodzie
Korzystanie z komponentw VCL
Programowanie grafiki
Operacje na plikach i drukowanie
Zapisywanie informacji w rejestrze Windows
Projektowanie komponentw
Poznaj jedno z najpopularniejszych narzdzi programistycznych

Wstp ........................................................................... 11

rodowisko programistyczne
Borland Developer Studio
i jzyk programowania Object Pascal ..........15

Poznajemy moliwoci Delphi ........................................ 17


Platformy Win32 i .NET ................................................................. 18
Co to jest Win32? ...................................................................... 18
Czym jest platforma .NET? ...................................................... 19
Pierwszy projekt ............................................................................. 20
Projekt VCL Forms Application Delphi for Win32 .............. 21
Jak umieci komponent na formie? ....................................... 22
Co to jest inspektor obiektw? ................................................. 23
Jak za pomoc inspektora obiektw zmienia
wasnoci komponentw? ...................................................... 23
Jak dopasowa pooenie komponentu? ................................. 26
Jak umieszcza na formie wiele komponentw
tego samego typu? .................................................................. 26
Jak zaznaczy wiele komponentw jednoczenie? ................. 27
Jak zaprogramowa reakcj programu na kliknicie
panelu przez uytkownika? ................................................... 27
Domylna metoda zdarzeniowa ............................................... 28
Polecenie ShowMessage ........................................................... 28
CodeInsight, czyli nieoceniona pomoc
w trakcie edycji kodu ............................................................. 29

ABC Delphi 2006

Model zdarzeniowy projektowania aplikacji .......................... 30


Jak uruchomi projektowan aplikacj? ................................. 30
Jak przecza midzy widokiem projektowania
i edytorem? ............................................................................. 31
Jak ustali pozycj okna po uruchomieniu aplikacji? ............ 31
Jak zmienia wasnoci obiektw programowo? ................... 32
Jak zapisa projekt na dysku? ................................................. 33
Oznaczenie zmian w kodzie ..................................................... 35
Pliki projektu Win32 ................................................................ 35
Pierwsze podsumowanie .......................................................... 36
Ustawienia projektu ....................................................................... 36
Jak zmieni tytu i ikon aplikacji? ......................................... 36
Informacje o wersji aplikacji doczane
do skompilowanego pliku .exe .............................................. 37
Dj vu, czyli pierwszy projekt w wersji dla platformy .NET ..... 40
Projekt VCL Forms Application Delphi for .NET ................ 40
Pliki projektu VCL.NET ............................................................ 43
Dystrybucja programw ................................................................ 44
Projekty VCL Forms Application Delphi for Win32 ........... 44
Projekty dla .NET korzystajce z biblioteki
Windows Forms ..................................................................... 44
Projekty VCL Forms Application Delphi for .NET .............. 44
Win32 albo .NET? oto jest pytanie ........................................... 45
Konfiguracja rodowiska Delphi 2006 ........................................... 47
Okno postpu kompilacji .......................................................... 47
Automatyczne zapisywanie plikw projektu .......................... 47
Modyfikowanie menu File/New ............................................... 48
Edytor kodu .................................................................................... 50
Opcje edytora ............................................................................ 50

Analiza kodu pierwszej aplikacji,


czyli wprowadzenie do jzyka Object Pascal ....................53
Wczytywanie istniejcego projektu .............................................. 54
Jak wczyta wczeniej zapisany projekt do Delphi? .............. 54
Plik Kolory.dpr ............................................................................... 54
Modu Unit1.pas ............................................................................. 57
Jak wczyta modu bdcy elementem projektu? .................. 57
Czym jest modu? ...................................................................... 58
Sekcje moduu ........................................................................... 59
Interfejs moduu Unit1 ............................................................. 59
Implementacja .......................................................................... 60
Pliki .dfm i .nfm .............................................................................. 61
Kod rdowy projektu dla platformy .NET ................................. 61

Typy zmiennych i instrukcje sterujce,


czyli o tym, co kady programista umie musi .................63
Podstawy ........................................................................................ 64
Rwnanie kwadratowe ............................................................ 64
Przygotowanie interfejsu ......................................................... 66
Deklarowanie zmiennych ......................................................... 67

Spis treci

Dygresja na temat typw rzeczywistych w Delphi ................. 68


Konwersja acucha na liczb .................................................. 69
Obliczenia arytmetyczne i ich kolejno ................................. 71
Typ logiczny i operatory logiczne ............................................ 72
Instrukcja warunkowa if .......................................................... 73
Jak wyczy podpowiadanie przez edytor
szablonw instrukcji? ............................................................. 74
O bdach w kodzie i czci else instrukcji warunkowej ........ 75
Procedura Exit .......................................................................... 78
Na tym nie koniec ........................................................................... 79
Typy cakowite Delphi .............................................................. 79
Instrukcja wielokrotnego wyboru case ................................... 81
Procedura ShowMessage .......................................................... 83
Obsuga wyjtkw .......................................................................... 84
Czym s i do czego su wyjtki? ........................................... 84
Przechwytywanie wyjtkw .................................................... 85
Zgaszanie wyjtkw ................................................................ 87
Ptle ................................................................................................. 88
Ptla for ..................................................................................... 88
Ptla for w praktyce, czyli tajemnica pitagorejczykw .......... 89
Uwaga o instrukcji goto, ktr naley czyta
z zamknitymi oczami ............................................................ 92
Ptla repeat..until ..................................................................... 92
Ptla while..do .......................................................................... 93
Procedury Break i Continue ..................................................... 94
Podsumowanie ................................................................................ 96
Typy zoone ................................................................................... 96
Tablice ....................................................................................... 96
Ptla for..in..do .......................................................................... 98
Tablice dwuwymiarowe ........................................................... 99
Definiowanie wasnych typw ............................................... 100
Tablice dynamiczne ................................................................ 100
Typy wyliczeniowe ................................................................. 101
Zbiory ...................................................................................... 102
Rekordy ................................................................................... 106
Jak sprawdzi zawarto tablicy rekordw? ........................ 109
Instrukcja with ....................................................................... 109
Kombinacja rekordw i typw wyliczeniowych ................... 110
Kilka sw o konwersji typw ...................................................... 111
acuchy ....................................................................................... 112
Dyrektywy preprocesora .............................................................. 114
Definiowanie blokw .............................................................. 114
Kompilacja warunkowa .......................................................... 116
Wskaniki ..................................................................................... 117
Czym s wsaniki? .................................................................. 117
Podstawowe konstrukcje ........................................................ 118
Wskaniki w projekcie .NET .................................................. 119
Do czego mog suy wskaniki? ......................................... 120
Wskaniki unika, czy nie? ................................................ 120

ABC Delphi 2006

W domu: ....................................................................................... 121


Zdegenerowane rwnanie kwadratowe ................................ 121
Silnia ....................................................................................... 121
Imitacja ptli for ..................................................................... 121
NWD ........................................................................................ 121
Ikony formy ............................................................................ 122
Typ wyliczeniowy i zbir ....................................................... 122
Rekordy ................................................................................... 122
Instrukcja with ....................................................................... 122

Programowanie strukturalne ........................................123


Procedury, funkcje, moduy ......................................................... 124
Procedury ................................................................................ 124
Definiowanie procedury ......................................................... 125
Interfejs moduu ..................................................................... 127
Parametry procedur przekazywane przez warto .............. 129
Wiksza ilo parametrw ..................................................... 129
Wartoci domylne parametrw ............................................ 130
Parametry przesyane przez zmienn (referencj) ................ 130
Funkcje .................................................................................... 131
Funkcje imitujce globalne stae ........................................... 133
Zmienne proceduralne ............................................................ 133
W domu ......................................................................................... 134
Funkcje Silnia i NWP .............................................................. 134
Sekcje initialization i finalization moduu ............................ 134

Programowanie obiektowe ............................................135


Pojcia obiekt i klasa .................................................................... 135
Klasa ........................................................................................ 136
Referencje (zmienne obiektowe) ............................................ 137
Tworzenie obiektw ............................................................... 138
Jeden obiekt moe mie wiele referencji .............................. 140
Interfejs i implementacja klasy ................................................... 141
Definicja klasy ........................................................................ 141
Projektowanie klasy ustalanie zakresu dostpnoci
pl i metod ............................................................................ 142
Pola .......................................................................................... 144
Konstruktor klasy inicjowanie stanu obiektu .................. 144
Referencja Self ........................................................................ 146
Tworzenie obiektw ............................................................... 146
Usuwanie obiektw z pamici w projektach
dla platformy Win32 ............................................................ 147
Metoda Free w platformie .NET ............................................ 147
Metoda prywatna ................................................................... 148
Zbir metod publicznych udostpniajcych wyniki ............. 149
Testowanie klasy .................................................................... 150
Przechwytywanie wyjtkw .................................................. 151
Zwikszona kontrola zakresu dostpnoci .................................. 151
Przestrzenie nazw .................................................................. 151
Nowe zakresy dostpnoci w klasach ................................... 152
Blokowanie dziedziczenia ...................................................... 153

Spis treci

W domu ......................................................................................... 153


Referencje ................................................................................ 153
Referencja Self ........................................................................ 154
Rozwj klasy TRownanieKwadratowe .................................. 154
Metody statyczne .................................................................... 154
Definiowanie operatorw w projektach .NET ...................... 155

Podstawy debugowania kodu ........................................ 157


Debuger rodowiska BDS ............................................................. 158
Ukryty bd ............................................................................. 158
Aktywowanie debugowania ................................................... 159
Kontrolowane uruchamianie i ledzenie
dziaania aplikacji ................................................................. 160
Zaawansowane techniki debugowania ........................................ 161
Breakpoint ............................................................................... 161
Obserwacja wartoci zmiennych ........................................... 162
Obsuga wyjtkw przez rodowisko BDS ............................ 163
Wyczanie debugowania ....................................................... 165

Korzystanie z klas platformy .NET


na przykadzie kolekcji ................................................ 167
Kolekcje w Delphi ......................................................................... 168
Kolekcja ArrayList .................................................................. 168
Kolekcja SortedList i inne ....................................................... 170

II

Biblioteki komponentw VCL i VCL.NET ...173

Podstawowe komponenty VCL/VCL.NET ....................... 175


Komponent TShape powtrzenie wiadomoci ....................... 176
Jak umieszcza komponenty na formie? ............................... 176
Jak modyfikowa zoone wasnoci komponentw
za pomoc inspektora obiektw? ......................................... 176
Jak reagowa na zdarzenia? .................................................. 177
Komponent TImage. Okna dialogowe .......................................... 179
Automatyczne adaptowanie rozmiarw komponentw
do rozmiaru formy ................................................................ 179
Jak wczyta obraz w trakcie projektowania aplikacji? ........ 180
Konfigurowanie komponentu TOpenDialog .......................... 181
Jak wczyta obraz podczas dziaania programu
za pomoc okna dialogowego? ............................................. 181
Jak odczyta plik w formacie JPEG? ..................................... 183
Kontrola programu za pomoc klawiatury ............................ 185
Wczytywanie dokumentu z pliku wskazanego
jako parametr linii komend .................................................. 186
Jak uruchomi projektowan aplikacj w rodowisku
BDS z parametrem linii komend? ........................................ 187
Komponent TMediaPlayer ........................................................... 187
Odtwarzacz plikw wideo ...................................................... 188
Panel jako ekran odtwarzacza wideo .................................... 190

ABC Delphi 2006

Wybr filmu za pomoc okna dialogowego


w trakcie dziaania programu ............................................. 190
Odtwarzacz CDAudio ............................................................. 192
Komponenty sterujce .................................................................. 192
Suwak TScrollBar i pasek postpu TProgressBar ................. 192
Pole opcji TCheckBox ............................................................. 193
Pole wyboru TRadioButton .................................................... 194
Niezalena grupa pl wyboru ................................................ 196
TTimer .......................................................................................... 197
Czynnoci wykonywane cyklicznie ....................................... 197
Czynno wykonywana z opnieniem ................................. 198
Aplikacja z wieloma formami ...................................................... 199
Dodawanie form do projektu ................................................. 199
Dostp do nowej formy z formy gwnej ............................... 200
Show versus ShowModal ....................................................... 202
Zmiana wasnoci Visible formy w trakcie projektowania .. 203
Dostp do komponentw z innej formy ................................. 204
Waciciel i rodzic ........................................................................ 205
Wasnoci Owner i Parent komponentw ............................. 205
Zmiana rodzica w trakcie dziaania programu ..................... 207
Co waciwie oznacza zamknicie dodatkowej formy? ........ 207
Tworzenie kontrolek VCL w trakcie dziaania programu .... 208
W domu ......................................................................................... 210
Komponent TSaveDialog ........................................................ 210
Komponenty TMemo, TRichEdit ........................................... 210
Komponent TRadioGroup ....................................................... 210

Wicej VCL ..................................................................211


Menu aplikacji .............................................................................. 211
Menu gwne aplikacji i edytor menu ................................... 212
Rozbudowywanie struktury menu ........................................ 214
Tworzenie nowych metod zwizanych
z pozycjami menu ................................................................. 215
Wizanie istniejcych metod z pozycjami menu .................. 216
Wstawianie pozycji. Separatory ............................................ 216
Usuwanie pozycji z menu ...................................................... 218
Klawisze skrtu ...................................................................... 218
Ikony w menu ......................................................................... 219
Pasek stanu ................................................................................... 220
Sztuczki z oknami ........................................................................ 222
Jak spowodowa, aby forma stopniowo znikaa
przy zamkniciu aplikacji .................................................... 223
Jak uzyska dowolny ksztat formy? .................................... 224
Jak poradzi sobie z niepoprawnym skalowaniem formy
w systemach z rn wielkoci czcionki? ......................... 225
Jak ograniczy rozmiary formy? ........................................... 226
Jak przygotowa wizytwk programu (splash screen)? ..... 227
W domu ......................................................................................... 229
Menu kontekstowe ................................................................. 229
Pasek narzdzi ........................................................................ 230

Spis treci

10

Prosta grafika ............................................................. 231


Ptno i sztaluga ........................................................................... 231
Klasa TCanvas ......................................................................... 231
Odwieanie formy. Zdarzenie OnPaint formy ..................... 232
Linie .............................................................................................. 232
Mieszanie kolorw .................................................................. 232
Rysowanie linii ....................................................................... 234
ClientHeight i Height, czyli obszar uytkownika formy ....... 236
Okno dialogowe wyboru koloru TColorDialog ...................... 237
Punkty ........................................................................................... 239
Korzystanie z tablicy TCanvas.Pixels .................................... 239
Negatyw .................................................................................. 240
Jak w projektach dla platformy Win32 umoliwi
edycj obrazw z plikw JPEG? .......................................... 242
Kilka sw o operacjach na bitach ......................................... 244
Wasno TBitmap.ScanLine (platforma Win32) .................. 246
Wskaniki IntPtr i klasa Marshal (platforma .NET) ............. 247
Inne moliwoci ptna ................................................................ 248
Tekst na ptnie ...................................................................... 248
Obraz na ptnie w projekcie Win32 ..................................... 251
Obraz na ptnie w projekcie .NET ........................................ 253
W domu ......................................................................................... 254

11

Operacje na plikach i drukowanie


z poziomu VCL i VCL.NET ........................................... 255
Automatyczne dopasowywanie rozmiaru komponentw .......... 256
Wasno Align, czyli o tym jak przygotowa
interfejs aplikacji, ktry bdzie automatycznie
dostosowywa si do zmian rozmiaru formy? .................... 256
Komponent TSplitter .............................................................. 257
Komponenty VCL pomagajce w obsudze plikw ..................... 258
Jak poczy komponenty TDriveComboBox,
TDirectoryListBox i TFileListBox eby stworzy
prost przegldark plikw? ................................................ 259
Jak filtrowa zawarto komponentu TFileListBox? ........... 259
Prezentowanie nazwy katalogu wybranego za pomoc
TDirectoryListBox na komponencie TLabel ........................ 259
Prezentowanie na komponencie TLabel pliku
wybranego w TFileListBox .................................................. 261
Jak z acucha wyodrbni nazw pliku,
jego rozszerzenie lub katalog, w ktrym si znajduje? ....... 261
Wczytywanie plikw graficznych wskazanych
w FileListBox ........................................................................ 263
Przegldanie katalogw w TFileListBox ............................... 264
Obsuga plikw z poziomu Object Pascala .................................. 266
Tworzenie pliku tekstowego .................................................. 266
Dopisywanie do pliku ............................................................. 268
Odczytywanie plikw tekstowych ......................................... 269
Funkcja czy procedura ............................................................ 271

ABC Delphi 2006

System plikw .............................................................................. 272


Operacje na plikach ................................................................ 273
Operacje na katalogach .......................................................... 275
Jak sprawdzi ilo wolnego miejsca na dysku? .................. 275
Drukowanie automatyczne ....................................................... 276
Drukowanie tekstu znajdujcego si w komponencie
TRichEdit. Okno dialogowe TPrintDialog ........................... 277
Wybr drukarki z poziomu kodu aplikacji ............................ 279
Drukowanie rczne ................................................................... 280
Tworzenie i przygotowanie moduu Drukowanie ................ 280
Jak w trybie graficznym wydrukowa tekst
przechowywany w klasie TStrings? .................................... 281
Testowanie drukowania tekstu w trybie graficznym .......... 285
Jak wydrukowa obraz z pliku? ............................................ 286
Dodawanie kodu rdowego moduu do projektu ............... 288
Powtrka z edycji menu aplikacji .......................................... 289
Testowanie procedury drukujcej obraz ............................... 289
W domu ......................................................................................... 290
Klasa TStringList .................................................................... 290
Rozwijanie procedur Drukuj .................................................. 291

Rozwizania niektrych zada .....................................293


Rozdzia 3 ..................................................................................... 293
Zdegenerowane rwnanie kwadratowe ................................ 293
Silnia ....................................................................................... 295
Imitacja ptli for ..................................................................... 296
NWD ........................................................................................ 296
Ikony formy ............................................................................ 297
Typ wyliczeniowy i zbir ....................................................... 298
Rekordy ................................................................................... 298
Instrukcja with ....................................................................... 299
Rozdzia 4 ..................................................................................... 299
Funkcja Silnia ......................................................................... 299
Funkcja NWD .......................................................................... 300
Sekcje initialization i finalization moduu ............................ 301
Rozdzia 5 ..................................................................................... 302
Referencje ............................................................................... 302
Referencja Self ........................................................................ 302
Rozwj klasy TRownanieKwadratowe .................................. 303
Metody statyczne ................................................................... 304
Rozdzia 8 ..................................................................................... 305
Komponent TSaveDialog ........................................................ 305
Komponent TMemo ................................................................ 306
Komponent TRadioGroup ....................................................... 307
Rozdzia 9 ..................................................................................... 308
Menu kontekstowe ................................................................. 308
Pasek narzdzi ........................................................................ 308
Rozdzia 10 ................................................................................... 309
Rozdzia 11 ................................................................................... 310
Rozwijanie procedur Drukuj .................................................. 310

Skorowidz ....................................................................315
10

poprzednim rozdziale przygotowalimy zgrabn


aplikacj, pozwalajc na zmienianie koloru panelu za
pomoc trzech suwakw. Wikszo czynnoci wykonalimy z myszk w rku, wpisujc tylko dwie linie
kodu. Jednak jeeli zajrzymy do plikw Unit1.pas
i Kolory.dpr widocznych w katalogu projektu, to przekonamy si, e kodu powstao znacznie wicej. W tym
rozdziale zanalizujemy w kod, co da nam jednoczenie okazj do przedstawienia podstaw jzyka Object
Pascal. Nie bdzie to jednak dogbne studium wszystkich elementw jzyka, ktre zobaczymy w tych plikach, bo wwczas pogubilibymy si w szczegach.

ABC Delphi 2006

Bdzie to wic raczej turystyczny przewodnik po tej nowej galaktyce. Zatem


i w tym rozdziale wiele razy bd obiecywa, e jaki termin lub zagadnienie
omwione bdzie dokadniej w jednym z kolejnych rozdziaw.

Jak wczyta wczeniej zapisany projekt do Delphi?


Otwrzmy projekt aplikacji, ktr zajmowalimy si na pocztku poprzedniego
rozdziau (projekt dla Win32). Jak to zrobi? Przede wszystkim naley zwrci
uwag, czy uruchomiona przez nas wersja rodowiska BDS zawiera modu odpowiedzialny za przygotowywanie i kompilacj projektu, ktry chcemy wczyta.
Jeeli uruchomilimy tylko modu Delphi for the Microsoft .NET Framework,
to nie uda nam si wczyta projektu typu VCL Forms Application Delphi for
Win32. Wwczas naley zamkn BDS i ponownie je uruchomi, korzystajc
z ikony Delphi for Microsoft Win32 lub Borland Developer Studio 2006 w menu
Start. Po uruchomieniu waciwej wersji rodowiska mamy do wyboru co najmniej cztery sposoby na wczytanie zapisanego na dysku projektu. Po pierwsze
w kadej chwili moemy na pasku narzdzi rodowiska BDS (rysunek 2.1) klikn
ikon Open Project lub w menu File aplikacji wybra pozycj Open Project.... Jeszcze innym sposobem na wczytanie projektu jest uycie kombinacji klawiszy Ctrl+
F11. W obu przypadkach pojawi si okno dialogowe pozwalajce na wybr i wczytanie pliku projektu (pliku z rozszerzeniem .bdsproj). Ponadto, jeeli poprzedni
projekt zosta zamknity (tzn. z menu File wybralimy polecenie Close All), to
w gwnej czci rodowiska widoczna jest pokazana na rysunku 2.1 lista kilku
ostatnich projektw. Niestety, jeeli kto, tak jak ja, jest zbyt leniwy, eby opisowo nazywa projekty, to zobaczy jedynie list kilku plikw Project1.bdsproj.
Wwczas pomc moe informacja o dokadnym pooeniu pliku, ktra pojawi si,
gdy chwil potrzymamy kursor nad nazw projektu. W dowolny z opisanych powyej sposobw wczytajmy projekt aplikacji Kolory.bdsproj, ktremu towarzyszy
zota ikona symbolizujca aplikacj dla Win32.

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

Analiza kodu pierwszej aplikacji, czyli wprowadzenie do jzyka Object Pascal

Rysunek 2.1.

Wszystkie drogi prowadz do...

Listing 2.1.

Gwny plik programu Kolory

program Kolory;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.Title := 'Kolory';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Skoro ju mamy go przed oczami i jest taki wany, to powimy mu chwil.


Przede wszystkim zwrmy uwag, e plik ten zaczyna si od sowa kluczowego
program i nastpujcej po nim nazwie aplikacji Kolory. Tak zaczynaj si wszystkie programy napisane w Pascalu. Tylko jeden plik projektu moe rozpoczyna
si w ten sposb, i w Delphi jest nim wanie plik .dpr. W kolejnej linii widzimy
sowo kluczowe uses, po ktrym wymienione s dwa moduy. Modu Forms
z biblioteki VCL oraz dobrze nam znany modu Unit1. Tak nazw nosi modu
zapisany w poprzednim rozdziale do pliku Unit1.pas. O ile pooenie moduu
Forms jest znane kompilatorowi Delphi, to plik, w ktrym znajduje si modu
Unit1, jest jawnie wskazywany. Suy do tego konstrukcja Unit1 in 'Unit1.pas'
(modu Unit1 w pliku Unit1.pas). Czym jest modu, moemy ju chyba sobie wyobrazi. Mwic najprociej, jest to osobny plik z kodem rdowym. Ale to tylko
wstpna definicja.

55

ABC Delphi 2006

To co widoczne jest w dalszej czci, a wic {Form1}, jest tylko komentarzem.


Kady tekst znajdujcy si pomidzy nawiasami klamrowymi, z pewnymi wyjtkami, jest zwyczajnie ignorowany przez kompilator. Ignorowany jest wic napis
Form1, ale ju nie znajdujcy si za nawiasem rednik ;. Nawiasy mog znajdowa si w rnych liniach, co oznacza, e w ten sposb mona zakomentowa
rwnie wiele linii jednoczenie.
Innym typem komentarza jest //. Wszystko, co znajduje si po podwjnym znaku
slash a do koca linii, jest rwnie ignorowane przez kompilator. Wobec tego
omawiana linia mogaby z rwnym skutkiem mie nastpujc posta:
Unit1 in 'Unit1.pas';

//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.

Analiza kodu pierwszej aplikacji, czyli wprowadzenie do jzyka Object Pascal

Tyle e klasa moe by projektowana przez nas, a typy zmiennych s wbudowane


w kompilator Delphi. W szczeglnoci klasa TForm1, opisujca form aplikacji Kolory, jest zdefiniowana w module Unit1. Jej definicja obejmuje wszystkie zmiany,
jakie wprowadzilimy w widoku projektowania (dodalimy do niej panel i suwaki). Zawiera take zdefiniowane przez nas dwie metody zdarzeniowe (s jej
metodami skadowymi). Projektowaniu kodu klasy TForm1 by w zasadzie powicony cay poprzedni rozdzia.
I wreszcie ostatnia linia programu zawiera wywoanie metody Application.Run.
Uruchamia ona gwn ptl programu. Bya ona ju kilkakrotnie wspominana
w pierwszym rozdziale. Ptla ta jest odpowiedzialna za odbieranie od systemu
Windows komunikatw dotyczcych aplikacji i generowania na ich podstawie
zdarze, ktre powoduj uruchamianie zdefiniowanych przez nas metod zdarzeniowych. Jej wykonywanie trwa, dopki uytkownik aplikacji nie postanowi
zamkn formy i w ten sposb zakoczy dziaania aplikacji.

No dobrze. Plik Kolory.dpr zosta cakowicie i automatycznie utworzony przez


Delphi. Czytelnika zapewne bardziej interesuje modu Unit1, nad ktrym spdzilimy kilka miych chwil, wykonujc czynnoci opisane w poprzednim rozdziale.
Jak si do niego dosta?

Jak wczyta modu bdcy elementem projektu?


Po wczytaniu zapisanego na dysku projektu do Delphi powstay dwie zakadki.
Pierwsza, na ktrej znajduje si plik Kolory.dpr, i druga, z plikiem, w ktrym
zdefiniowana jest gwna forma projektu, zazwyczaj Unit1.pas. Zatem jedyne,
co musimy zrobi, to zmieni zakadk w grnej czci okna edytora na Unit1.
Pojawi si wwczas widok projektowania formy zdefiniowanej w tym pliku. Jeeli
chcemy obejrze kod pliku Unit1.pas, musimy nacisn klawisz F12, ktry, co ju
mamy dobrze opanowane, suy do przeczania midzy widokiem projektowania
a edytorem kodu.
Jeeli jednak taka zakadka nie pojawia si lub j niechcco zamknlimy, moemy wesprze si oknem projektu (numer 2 na rysunku 1.1). Klikajc dwukrotnie
nazw pliku Unit1.pas, wczytamy go do edytora.

57

ABC Delphi 2006

Czym jest modu?


Edytor kodu zawiera znajomy kod pliku Unit1.pas (listing 2.2). W jego dolnej
czci widoczne s napisane przez nas metody Panel1Click i ScrollBar1Change.
Ale zacznijmy od pocztku. A na pocztku jest sowo kluczowe unit, a po nim
nazwa Unit1 ta, ktr widzielimy w sekcji uses w pliku Kolory.dpr. Sowo
unit sygnalizuje, e plik, z ktrym mamy teraz do czynienia, jest moduem, a wic
nie samodzielnym programem, ktry zaczynaby si od sowa kluczowego program,
a tylko oddzieln jednostk kodu, w ktrej zdefiniowane mog by procedury
i funkcje oraz klasy i ich metody (formalnie nazywane procedurami i funkcjami
skadowymi). Nazw tego moduu jest Unit1, wskazuje j pierwsza linia kodu.

Listing 2.2.

Peen kod moduu, w ktrym zdefiniowana jest forma

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

Analiza kodu pierwszej aplikacji, czyli wprowadzenie do jzyka Object Pascal

procedure TForm1.ScrollBar1Change(Sender: TObject);


begin
panel1.Color:=RGB(scrollbar1.Position,scrollbar2.Position,scrollbar3.Position);
end;
end.

Dla osb rozpoczynajcych programowanie pojcia procedury, funkcji i metody,


s one oczywicie nowociami i w zwizku z tym czste ich uywanie moe atwo
spowodowa lekki zawrt gowy. Bez obawy, wszystkie te terminy zostan jeszcze wyjanione w rozdziale czwartym. Ju mamy jednak pewn intuicj, czym
one s de facto dwie metody napisalimy przecie w poprzednim rozdziale.

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.

Interfejs moduu Unit1


W interfejsie moduu Unit1 widzimy trzy sekcje: uses, type i var. W pierwszej
wymienione s inne moduy, ktrych zawarto ma by widoczna w trakcie kompilacji biecego moduu.
Sekcja type zawiera natomiast definicje nowych typw, ktre s zdefiniowane
w module Unit1. W naszym przypadku zdefiniowany jest tam typ TForm1, ktry,
ktry rozpoczyna si od linii:
type
TForm1 = class(TForm)

59

ABC Delphi 2006

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

Analiza kodu pierwszej aplikacji, czyli wprowadzenie do jzyka Object Pascal

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

ABC Delphi 2006

Rysunek 2.2.

Plik Kolory.dpr w projekcie dla platformy .NET

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

You might also like