Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
Delphi 2006.
wiczenia praktyczne
Autor: Andrzej Orowski
ISBN: 83-246-0524-X
Format: A5, stron: 128
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Wstp
Rozdzia 1. rodowisko Delphi 2006
Uruchomienie Delphi 2006
Podstawowe pola paska Menu
Pole File
Pole Edit
Pole View
Pole Project
Pole Run
9
11
11
12
13
14
15
18
19
21
21
22
23
23
24
25
25
29
31
32
32
32
32
33
34
35
37
37
37
40
42
45
46
46
47
48
48
53
54
55
78
81
81
89
90
94
96
97
99
101
101
102
102
102
103
103
Spis treci
Dodatek A
Paski zmian
Refaktoryzacja
Szablony dynamiczne
Otaczanie (surround)
103
104
104
107
Dla dociekliwych
109
109
115
120
Podsumowanie
126
48
4.1
Z utworzeniem projektu nowej aplikacji przy uyciu pola File/New Czytelnik zosta ju zapoznany. Poniej zilustrowany zostanie ten sam
proces z wykorzystaniem strony powitalnej (Welcome Page), co jest
moim zdaniem znacznie prostsze i wygodniejsze (droga na skrty).
Aby utworzy aplikacj konsolow dla Win32 naley kolejno:
1. Wybra zakadk New Project.
2. Zaznaczy platform, dla ktrej bdzie tworzona aplikacja
(Delphi Projects).
3. Zaznaczy ikon Console Application i zatwierdzi wybr
podwjnym klikniciem lewego klawisza myszki lub klikn
na przycisku OK.
Kolejne zaznaczane opcje tworzenia nowego projektu aplikacji pokazuje rysunek 4.2.
Kod rdowy nowego projektu aplikacji konsolowej dla Win32 przedstawia listing 4.1.
Listing 4.1. Kod rdowy nowego projektu aplikacji konsolowej dla Win32
program Project1;
{$APPTYPE CONSOLE} // Typ aplikacji
uses
SysUtils;
begin
{ TODO -oUser -cConsole Main : Insert code here }
end.
49
Rysunek 4.2.
Wybr aplikacji
konsolowej
dla Win32
Na przedstawionym listingu kod rdowy nie zawiera adnych instrukcji, nie bdzie wic nic wykonywa, a na dodatek, po uruchomieniu, natychmiast zakoczy swoje dziaanie.
1. Zapisa nowy projekt na dysku (w oddzielnym katalogu),
wykorzystujc polecenie Save Project As, nadajc mu now
unikatow nazw, tak jak opisane to zostao ju w punkcie
Wasne aplikacje/Tworzenie aplikacji/Zachowanie projektu
(plikw) na dysku/Zachowanie na dysku plikw z moliwoci
zmiany nazwy (Save Project As...), np. w katalogu
F:/D_2006/Konsola/ App_Con_W32/ pod nazw App_Con_W32.
Po wykonaniu powyszych czynnoci kod rdowy naszego
projektu bdzie wyglda tak jak na listingu 4.2.
Listing 4.2. Kod rdowy programu po zapisaniu na dysku, z nadaniem
mu danej unikatowej nazwy
program App_Con_W32;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
{ TODO -oUser -cConsole Main : Insert code here }
end.
50
W trakcie kompilacji nie zostanie zasygnalizowany aden bd. Program pod wzgldem skadniowym jest bowiem prawidowy. Jego uruchomienie spowoduje jednak efekt przedstawiony na rysunku 4.3.
51
W I C Z E N I E
4.2
52
W I C Z E N I E
4.3
Teraz najwaniejszym zagadnieniem jest znalezienie przyczyny zawieszenia si programu. W tym celu naley:
1. Z menu Run wybra polecenie Trace Into F7 lub nacisn
Jeeli po kilku przebiegach ptli jej warto nie ulega zmianie, oznacza to, e pominita zostaa instrukcja inkrementacji (dekrementacji)
tej zmiennej, co oczywicie skutkuje niemoliwoci spenienia warunku zakoczenia jej dziaania (nieskoczenie wielka liczba powtrze), a tym samym zawieszeniem si programu. Po dodaniu instrukcji
inkrementacji (inc()) w przykadzie instrukcja ta zawarta jest w linii
komentarza (// inc(Powtarzaj)). Po usuniciu symbolu komentarza (//)
program zakoczy prac zgodnie z oczekiwaniem, a na ekranie zostanie wywietlony wynik zgodny z parametrami wywoania procedury Suma().
53
54
Aplikacje VCL Form Application Delphi for Win32 bd najprawdopodobniej najczciej tworzonymi aplikacjami przez pocztkujcych
programistw, zaczynajcych swoj przygod z Delphi 2006. Powodem tego bdzie prawie identyczna konstrukcja tych programw, jak
w poprzednich wersjach Delphi. Co to jest biblioteka VCL (Visual
Component Library) nie bd teraz wyjania, bo najlepiej jest zapozna
si z tym pojciem na praktycznym przykadzie. Ponadto w punkcie
tym zajmiemy si rwnie importem gotowych ju projektw napisanych dla Delphi 7 do Delphi 2006. W pierwszej kolejnoci jednak
zaczniemy od nowego projektu aplikacji VCL Forms.
55
Po nadaniu projektowi i moduowi nowej, unikatowej nazwy, i zapisaniu na dysku w oddzielnym katalogu (np. program KL_VCL_32
i modu KlawiszVCL32), kod rdowy naszego nowego projektu
powinien wyglda tak, jak na listingu 4.7.
Listing 4.7. Kod rdowy programu i moduu po modyfikacji
program KL_dCL_32;
uses
Forms,
KlawiszdCL32 in 'KlawiszdCL32.pas' {Okno_Klawisz},
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TOkno_Klawisz, Okno_Klawisz);
Application.Run;
end.
56
Pora, aby naszemu oknu nada nowy tytu (Caption) odpowiedni dla
danej aplikacji, oraz now unikatow nazw (Name), tak by przy
wikszej liczbie formularzy (okien) nie utraci kontroli nad projektem. Wymienione powyej czynnoci przeprowadzamy w oknie Object
Inspector rodowiska Delphi 2006.
57
58
59
Rysunek 4.9.
Pozycja okna
aplikacji
na ekranie
Rysunek 4.10.
Zmiana pozycji
okna za pomoc
okna edycji kodu
60
4.4
Dodajemy komponenty
Projektowanie graficznego interfejsu uytkownika (GUI) jest prawdopodobnie jedn z waniejszych czynnoci, jakie ma do wykonania
programista. Pomijajc wzgldy estetyczne, czytelno i intuicyjno
61
4.5
62
na formularzu,
q oznaczajc obszar umieszczenia komponentu, klikn lewym
przyciskiem myszki,
q wybrany komponent zostanie umieszczony na formularzu
w wyznaczonym miejscu i otoczony ramk do zmiany wymiarw
(rysunek 4.14), oraz opatrzony domylnym tytuem (Button1).
Rysunek 4.14.
Umieszczenie
komponentu
(Button1)
na formularzu
Tak zainstalowany komponent nie bdzie nic wykonywa do czasu jego
oprogramowania.
63
Wczeniej wspomniane byo, e nazwy (tytuy) domylne s praktyczne, ale mao przydatne w rzeczywistoci. Szczeglnie trudno
bowiem powiza nazw komponentu z jego rzeczywistym przeznaczeniem.
W I C Z E N I E
4.6
Nadawanie nazwy formularzowi byo ju opisane, natomiast nadawanie tytuu i nazwy komponentom przebiega w identyczny sposb
dla wszystkich komponentw, i dlatego przedstawiony zostanie
sposb przeprowadzenia tej czynnoci tylko na przykadzie przycisku Button1.
Aby nada nazw (Name) i tytu (Caption) komponentowi, najprociej jest:
1. Zaznaczy wybrany komponent (zostanie otoczony ramk).
2. W oknie Object Inspector wybra pole Miscellaneous/Name
64
4.7
65
W I C Z E N I E
4.8
Projektujc jak aplikacj, nie mamy pewnoci, e zawsze bdzie pracowaa przy jednakowej, ustalonej przez nas rozdzielczoci ekranu.
W przypadku pracy przy innych rozdzielczociach moe doj do
sytuacji, e nasze okno nie bdzie miecio si na ekranie lub bdzie
nie tam, gdzie by powinno. Aby mc ustawi waciwe rozmiary (i jego
pooenie) w zalenoci od rozdzielczoci, naley posiada informacj o aktualnych wymiarach pulpitu (Desktop). W tym celu naley:
66
OnCreate do postaci:
procedure TOkno_Klawisz.FormCreate(Sender: TObject);
begin
L := Screen.DesktopWidth;
H := Screen.DesktopHeight;
Okno_Klawisz.Left := L div 2;
Okno_Klawisz.Top := H div 3;
Okno_Klawisz.Width := L div 3;
Okno_Klawisz.Height := H div 4;
end;
W I C Z E N I E
4.9
4.10
Pasek Menu
67
68
Rysunek 4.21.
Tworzenie menu
Dodanie paska Menu niczego jeszcze w dziaaniu programu nie zmienia. Teraz naley wypeni programem okrelone zdarzenia (Events)
tych pl. Zaczniemy od najprostszego pola, jakim jest pole Plik/Zakocz
{Zakocz1}. Nazwa w nawiasie klamrowym to nazwa nadana przez
Delphi 2006.
W I C Z E N I E
4.11
69
4.12
70
71
Application.CreateForm(TOkno_Klawisz, Okno_Klawisz);
Application.CreateForm(TAbout ox, About ox);
Application.Run;
end.
4.13
Aby zapobiec tworzeniu aplikacji pomocniczej jednoczenie z tworzeniem aplikacji gwnej, naley:
1. Otworzy okno Project Options (Project/Options), widoczne
na rysunku 4.26.
72
Na powyszym listingu wida, e w sekcji uses deklaracja moduu pozostaa, natomiast usunita zostaa linia AAAlication.CreateForm(TaboutBox, AboutBox);, co oznacza, e okrelony formularz (okno), nie bdzie
tworzony automatycznie przy starcie programu. Poniewa dodatkowe
okno nie zostao utworzone automatycznie przy starcie programu,
zachodzi potrzeba utworzenia go w trakcie dziaania programu, co
pokae kolejne wiczenie.
73
W I C Z E N I E
4.14
4.15
74
Dodajemy formularze
W tym punkcie omwione zostan rne metody dodawania dodatkowych formularzy do tworzonego programu. Dodatkowym celem jest
pokazanie rnych formularzy (okien), jakie mog by tworzone przez
Delphi 2006. W celu zademonstrowania powyszych zagadnie wykorzystamy utworzony ju wczeniej projekt Kl_VCL_32 i przypiszemy
do pola Okna jego menu odpowiednie rodzaje formularzy (okien).
Moliwe rodzaje formularzy dostpne s w oknie Object Inspector
w zakadce Properties, co pokazuje rysunek 4.28.
Rysunek 4.28.
Dostpne style
formularza
(okna)
W I C Z E N I E
4.16
Czsto zachodzi potrzeba uycia okna w innym ni domylny (bsSizeable) stylu. W tym wiczeniu pokazane zostan rne, oferowane przez
Delphi 2006 style okien (formularzy). Przedstawiony zostanie jeden
ze sposobw doczania nowego formularza do projektu, wsplny dla
formularzy wszystkich stylw.
Aby doczy nowy formularz do projektu, naley:
1. Otworzy nowy modu (File/New/Form Delphi for Win32).
W oknie edycyjnym pojawi si nowa zakadka: Unit1,
co pokazuje rysunek 4.29.
75
4.17
na komponencie TMainMenu.
76
77
Rysunek 4.32.
Okno edycji
ActionList
Rysunek 4.33.
Wybranie
kategorii File
i akcji TFileRun
78
Rysunek 4.34.
Uzupeniona
lista ActionList1
5.
6.
7.
8.
Podsumowanie
W tym miejscu przedstawione zostan kompletne listingi kodw rdowych i moduw tworzonej przykadowej aplikacji KL_VCL_32. Kod
rdowy programu przedstawia listing 4.12.
Listing 4.12. Kod rdowy programu KL_VCL_32
program KL_dCL_32;
uses
Forms,
79
Ten kod tworzony jest automatycznie przez Delphi 2006, i na razie nie
ma potrzeby ingerencji w jego zawarto.
80
81
Aplikacje typu WinForm znaczco rni si od aplikacji VCL. Podstawowymi rnicami pomidzy projektami VCL a WinForm s miedzy
innymi rne:
1. Nazwy komponentw.
2. Waciwoci komponentw.
3. Funkcje i procedury.
4. Nazwy moduw.
5. Nazwy zdarze.
W tej czci sprbujemy zaprojektowa podobn do poprzedniej (program KL_VCL_32;), chocia troch uproszczon pod wzgldem funkcjonalnoci aplikacj, jaka bya utworzona w czci VCL Form Appilcation Delphi for Win32.
4.18
82
83
implementation
{$AUTO OX ON}
procedure TWinForm.Dispose(Disposing: oolean);
begin
if Disposing then
begin
if Components <> nil then
Components.Dispose();
end;
inherited Dispose(Disposing);
end;
constructor TWinForm.Create;
begin
inherited Create;
// Required for Windows Form Designer support
InitializeComponent;
// TODO: Add any constructor code after InitializeComponent call
end;
end.
Dodajemy komponenty
Proces dodawania komponentw na formularzu jest identyczny jak
w przypadku innych rodzajw projektw. Rnica polega jedynie na innych nazwach komponentw i nazwach ich waciwoci. Przykadowo:
84
4.19
Dodajemy komponenty
i tytuy (Text).
Formularz z dodanymi komponentami przedstawia rysunek 4.37.
85
4.20
86
Na tym etapie tworzenia nowej aplikacji uruchomienie jej spowoduje jedynie wywietlenie formularza z rozmieszczonymi komponentami, ktre niestety nie bd nic robi. Pora wic na oprogramowanie
ich tak, aby speniay swoj rol.
Oprogramowanie komponentw
Wikszo komponentw, aby moga poprawnie dziaa, musi obsugiwa okrelone zdarzenia, zgaszane przez uytkownika aplikacji. Najczciej bdzie to kliknicie na danym komponencie, co wywoa odpowiedni reakcj na to zdarzenie. Oprogramowanie zainstalowanych
komponentw rozpoczniemy do polecenia Plik/Zakocz, ktre koczy
prac naszej aplikacji.
W I C Z E N I E
4.21
Polecenie Plik/Zakocz
Mamy teraz moliwo wybrania stylu okna (waciwoci FormBorderStyle) jako None, co oznacza brak belki tytuowej, a co za tym idzie
brak przyciskw sterujcych.
87
W I C Z E N I E
4.22
Polecenie Uruchom
4.23
88
na zdarzeniu Click.
3. Procedur obsugi zdarzenia uzupeni kodem:
procedure TWinForm.WymiaryPulpitu_Click(sender: System.Object; e:
System.EventArgs);
var
L, H
: Integer;
WymiarOkna : TRect; // Struktura zawierajca pola Left, Top, Right
// i ottom
h_Wnd
: HWND; // Uchwyt okna
begin
h_Wnd := GetDesktopWindow; // Funkcja GetDsktopWindow zwraca uchwyt
// g wnego okna systemu (Desktop), czyli ekranu
GetWindowRect(h_Wnd, WymiarOkna); // Pobranie danych ekranu
// i przekazanie ich zmiennej, WymiarOkna
L := WymiarOkna.Right - WymiarOkna.Left; // obliczenie szerokoci
// okna
H := WymiarOkna. ottom - WymiarOkna.Top; // obliczenie wysokoci
// okna
WysokoscPulpitu.Text := IntToStr(H); // Konwersja danych
// i wywietlenie
SzerokoscPulpitu.Text := IntToStr(L); // Konwersja danych
// i wywietlenie
end;