You are on page 1of 46

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

Delphi 2006.
wiczenia praktyczne
Autor: Andrzej Orowski
ISBN: 83-246-0524-X
Format: A5, stron: 128

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Delphi 2006 to najnowsza wersja niezwykle popularnego rodowiska


programistycznego, ktre jest poczeniem jzyka programowania Object Pascal
z moliwoci budowania aplikacji z klockw gotowych komponentw.
Taka filozofia pracy pozwala na tworzenie nawet najbardziej zoonych programw
szybko i efektywnie. W najnowszej wersji Delphi moliwe jest take korzystanie
z elementw platformy .NET opracowanej przez firm Microsoft. Za pomoc tego
rodowiska mona kreowa zarwno proste aplikacje konsolowe, jak i rozbudowane
systemy informatyczne wykorzystujce mechanizmy sieciowe, bazy danych
i zaawansowane biblioteki graficzne.
Ksika Delphi 2006. wiczenia praktyczne to wprowadzenie do programowania
z wykorzystaniem tego wanie rodowiska. Czytajc j i wykonujc kolejne wiczenia,
nauczysz si zasad korzystania z narzdzi oferowanych przez Delphi i przyswoisz sobie
reguy pisania programw w jzyku Object Pascal, bdcym fundamentem rodowiska.
Poznasz rnice midzy aplikacjami wykorzystujcymi biblioteki Win32 i .NET,
utworzysz wasne programy oraz skompilujesz je i uruchomisz.
Interfejs uytkownika Delphi 2006
Podstawowe elementy jzyka Object Pascal
Definiowanie parametrw projektu
Aplikacje konsolowe
Tworzenie aplikacji okienkowych w oparciu o komponenty VCL i .NET
Korzystanie z bibliotek WinAPI i OpenGL
Poznaj profesjonalne narzdzie programistyczne
i korzystaj z niego podczas pracy

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

Rozdzia 2. Podstawy jzyka Delphi


Stae
Zmienne
Typy liczb i ich zakresy
Liczby cakowite
Liczby rzeczywiste
Instrukcje
Instrukcja grupujca (begin...end)
Instrukcje powtarzajce
Instrukcja procedury (procedure)
Instrukcja skoku (goto)
Instrukcja przypisania (:=)
Instrukcja pusta

9
11
11
12
13
14
15
18
19

21
21
22
23
23
24
25
25
29
31
32
32
32

Delphi 2006 wiczenia praktyczne


Instrukcja warunkowa (if)
Instrukcja wica (with)
Instrukcja wyboru (case)
Funkcje konwersji

Rozdzia 3. Wasne aplikacje


Tworzenie aplikacji
Nowy projekt
Zachowanie projektu (plikw) na dysku
Otwieranie projektu lub pliku
Zamknicie pliku (Close)
Zamknicie wszystkich plikw (Close All)
Drukowanie (Print)

Rozdzia 4. Przykadowe aplikacje


Aplikacje konsolowe
Aplikacja konsolowa dla Win32
Aplikacja konsolowa dla platformy .NET
VCL Form Applications Delphi for Win32
Nowy projekt aplikacji typu VCL Forms dla Win32
Podsumowanie
Windows Forms Application Delphi for .NET
(WinForm)
Nowy projekt aplikacji typu Windows Forms
Application Delphi for .NET

Rozdzia 5. Z Delphi 7 do Delphi 2006


Z Delphi 7 do VCL Win Application
Delphi for Win32
Z Delphi 7 do VCL Win Application Delphi for .NET
Z Delphi 7 do Windows Forms Application
Delphi for .NET
Z Delphi 7 do WinForm metod doczenia moduu
Z Delphi 7 do WinForm metod adaptacji funkcji

Rozdzia 6. Rozszerzenia Delphi 2006


Osobowoci
Uzupenianie blokw
begin
for
while
repeat

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

Aplikacja wykorzystujca WinAPI


Grafika OpenGL
Biblioteki

109
115
120

Podsumowanie

126

W tej czci ksiki przedstawione zostan przykady tworzenia


podstawowych aplikacji dla Win32 i platformy .NET. rodowisko programistyczne Delphi 2006 umoliwia tworzenie
aplikacji dla Win32 oraz dla platformy .NET. Poniewa aplikacje tworzone dla platformy .NET nie mog by uruchomione na komputerze,
na ktrym nie zainstalowano odpowiednich skadnikw, lub komputer nie pracuje pod kontrol systemu Windows 2003, istnieje potrzeba
oznaczenia, dla ktrej platformy utworzona zostaa dana aplikacja. Istniej przynajmniej dwa (2) sposoby rozrnienia, dla ktrej platformy utworzona zostaa dana aplikacja:
1. Nadanie programowi nazwy z sekwencj _NET w nazwie
programu, np. Klawisz_NET.
2. Rozrnienie, na podstawie ikony programu, tak jak pokazuje
to rysunek 4.1.
Rysunek 4.1.
Ikony programw
dla Win32
i platformy .NET

Rnice s widoczne (szachownica dla Win32 i skrzyowane strzaki


dla .NET). Aplikacje tworzone dla Win32 i .NET rni si nie tylko
ikon programu, ale gwnie skadni poszczeglnych polece, komponentami i ich obsug, oraz innymi elementami, ktre zostan pokazane w przykadach poszczeglnych aplikacji tworzonych dla tych
platform.

48

Delphi 2006 wiczenia praktyczne

Aplikacje konsolowe maj w rodowisku programistycznym Delphi


2006 ograniczone zastosowanie, gwnie ze wzgldu na brak interfejsu
graficznego tego typu aplikacji, do ktrego jestemy ju przyzwyczajeni.
Zalet takich aplikacji jest natomiast, dla pocztkujcych programistw, moliwo szybkiego sprawdzenia dziaania pisanych procedur
lub funkcji, ktre musz by pisane samodzielnie przez programist.

Aplikacja konsolowa dla Win32


W I C Z E N I E

4.1

Nowy projekt aplikacji konsolowej dla Win32

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.

Rozdzia 4. Przykadowe aplikacje

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.

Na tym etapie programowania mamy ju utworzony nowy projekt,


zapisany na dysku, co zabezpiecza nas przed utrat dotychczas wpro-

50

Delphi 2006 wiczenia praktyczne

wadzonych zmian. Podstawowy sposb uruchomienia programu zosta


ju opisany wczeniej, w punkcie Pole Run. Na przykadzie aplikacji
konsolowej dla Win32 poka inny sposb uruchamiania programu,
przydatny szczeglnie wtedy, kiedy kompilator nie zgasza adnych
bdw, a program nie dziaa tak jak oczekujemy, lub nie dziaa w ogle
(np. zawiesza si). Uzupenijmy nasz program do postaci przedstawionej na listingu 4.3.
Listing 4.3. Program aplikacji konsolowej po zmianie nazw domylnych
program App_Con_W32;
{$APPTYPE CONSOLE}
uses SysUtils;
var
I, X : Integer;
procedure Suma (X, Razy : Integer);
var
Powtarzaj : Integer;
begin
Powtarzaj := 0;
while Powtarzaj < Razy do
begin
I := I + X;
end;
end;
begin
{ TODO -oUser -cConsole Main : Insert code here }
I := 0;
Suma(5, 3);
Writeln(I);
Readln;
end.

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.

Rysunek 4.3. Ekran aplikacji, ktra nie reaguje na komendy (zawieszonej)

Rozdzia 4. Przykadowe aplikacje

51

W I C Z E N I E

4.2

Zakoczenie pracy zawieszonego programu

W sytuacji zawieszenia si programu naley wykona nastpujce


czynnoci:
1. Nacisn kombinacj klawiszy Ctrl+Alt+Del. Po wywietleniu
okienka Zabezpieczenia systemu Windows klikn na przycisk
Meneder Zada.
2. W oknie Meneder zada Windows zaznaczy zawieszon

aplikacj (rysunek 4.4).


Rysunek 4.4.
Wybr
zawieszonej
aplikacji w celu
jej zakoczenia

3. Klikn na przycisk Zakocz proces. Po tej operacji powrcimy

do rodowiska Delphi 2006.

52

Delphi 2006 wiczenia praktyczne

W I C Z E N I E

4.3

Szukanie bdw w programie (praca krokowa)

Teraz najwaniejszym zagadnieniem jest znalezienie przyczyny zawieszenia si programu. W tym celu naley:
1. Z menu Run wybra polecenie Trace Into F7 lub nacisn

klawisz funkcyjny F7 (polecam ten drugi sposb).


2. W kolejnych krokach (naciskajc kadorazowo klawisz F7)

kontrolowa zachowanie si programu (wartoci zmiennych).


3. Po dojciu (w tym konkretnym przypadku) do ptli While

w kolejnych obiegach ptli kontrolowa wartoci wszystkich


zmiennych.
4. Sprawdza szczeglnie warto zmiennej wyliczeniowej

Powtarzaj, tak jak pokazuje to rysunek 4.5.


Rysunek 4.5.
Warto zmiennej
wyliczeniowej
Powtarzaj,
nie zmienionej,
po kilku przebiegach
ptli While
Sprawdzenie wartoci najprociej mona przeprowadzi, naprowadzajc
kursor myszki na dan zmienn (Powtarzaj).

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().

Rozdzia 4. Przykadowe aplikacje

53

Zakoczenie pracy aplikacji konsolowej moliwe jest poprzez:


q Nacinicie przycisku Close (X).
q Nacinicie kombinacji klawiszy Ctrl+C.
q Nacinicie kombinacji klawiszy Ctrl+Break.
q Programowe zakoczenie dziaania aplikacji poprzez
nacinicie dowolnego klawisza, jeeli ostatni instrukcj
w programie bdzie funkcja Readln.

Aplikacja konsolowa dla platformy .NET


Utworzenie nowej aplikacji konsolowej dla platformy .NET przebiega
identycznie jak dla platformy Win32, z t jednake rnic, e naley
wybra inne opcje w okienku New Items po wyborze zakadki New
Project na stronie powitalnej. Przykad nowego projektu aplikacji konsolowej dla platformy .NET po jego utworzeniu, nadaniu unikatowej
nazwy i zapisaniu na dysku, przedstawia listing 4.4.
Listing 4.4. Nowa aplikacja konsolowa dla platformy .Net
program App_Con_NET;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
{ TODO -oUser -cConsole Main : Insert code here }
end.

W przypadku automatycznie wygenerowanego szkieletu projektu nie


otrzymujemy niestety adnej informacji, dla jakiej platformy jest utworzony dany projekt, co moe stwarza pewne problemy na dalszym
etapie programowania. Dlatego przypominam o nadaniu projektowi
nazwy sugerujcej jej rodowisko pracy lub zastosowaniu zapisu nazw
moduw charakterystycznych dla platformy .NET w sekcji uses, czyli
np. Borland.Vcl.SysUtils. Zmodyfikowany projekt przedstawia listing 4.5.
Listing 4.5. Projekt nowej aplikacji konsolowej dla platformy .NET
po modyfikacji
program App_Con_NET;
{$APPTYPE CONSOLE}
uses
orland.dcl.SysUtils, orland.dcl.Math;

54

Delphi 2006 wiczenia praktyczne


var
Kwadrat : Double;
Kat
: Single;
begin
{ TODO -oUser -cConsole Main : Insert code here }
Kat := DegToRad(45); // Funkcja z moduu Math
Kwadrat := tan(Kat); // Funkcja z moduu Math
Writeln(Kwadrat:6:2); // Tekst formatowany
Console.ReadLine;
end.

W powyszym przykadzie zastosowaem typy Single i Double dla


zmiennych rzeczywistych. Takie zadeklarowanie typw jest zalecane
w miejscu typu Real. Zalecenie to wynika ze zgodnoci tych typw
z formatem liczb akceptowanym przez koprocesor (procesor arytmetyczny FPU, czyli Floating-Point Unit), bez potrzeby ich konwertowania, co znacznie poprawia wydajno oblicze. W sekcji uses dodany zosta modu Math, ktry udostpnia znacznie szerszy zakres
funkcji matematycznych.

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.

Rozdzia 4. Przykadowe aplikacje

55

Nowy projekt aplikacji typu VCL Forms dla Win32


Aby utworzy nowy projekt aplikacji VCL Form dla Win32, naley postpowa wedug wskazwek podanych w punkcie Aplikacja konsolowa dla Win32, wybierajc oczywicie inny rodzaj aplikacji (VCL
Forms Application Delphi for Win32). W oknie edycyjnym wywietlony zostanie kod rdowy moduu nowego projektu, przedstawiony
na listingu 4.6.
Listing 4.6. Kod rdowy moduu nowego projektu
unit Unit1;
interface
uses
Windows, Messages, SysUtils, dariants, Classes, Graphics, Controls,
Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.

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

Delphi 2006 wiczenia praktyczne


unit KlawiszdCL32;
interface
uses
Windows, Messages, SysUtils, dariants, Classes, Graphics, Controls,
Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.

Po uruchomieniu programu na ekranie zobaczymy nasze okno, takie


jak na rysunku 4.6.
Rysunek 4.6.
Okno programu
KL_VCL_W32

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.

Zmiana tytuu (Caption) okna


Nadanie nowego tytuu okna przeprowadzamy tak, jak pokazuje rysunek 4.7.

Rozdzia 4. Przykadowe aplikacje

57

Rysunek 4.7. Nadanie nowego tytuu oknu aplikacji


Wpisywanie nowego tytuu okna (Caption) jest automatycznie
odzwierciedlane na pasku tytuowym okna.

Zmiana nazwy (Name) formularza


Zmian nazwy formularza ilustruje rysunek 4.8.
Rysunek 4.8.
Zmiana nazwy
formularza

Wprowadzone zmiany nazwy (Name) formularza s automatycznie


wprowadzane do kodu rdowego, co ilustruje listing 4.8.

58

Delphi 2006 wiczenia praktyczne

Listing 4.8. Zmiana nazwy formularza


unit KlawiszdCL32;
interface
uses
Windows, Messages, SysUtils, dariants, Classes, Graphics, Controls,
Forms,
Dialogs;
type
TOkno_Klawisz = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Okno_Klawisz: TOkno_Klawisz;
implementation
{$R *.dfm}
end.

Na powyszym listingu wida, e nastpia (automatycznie) zmiana


nazwy typu class(TForm) z TForm1 na TOkno_Klawisz oraz zmiana nazwy
zmiennej typu TOkno_Klawisz z Form1 na Okno_Klawisz. Taki program
nie robi na razie nic, poza wywietleniem okna, i jest oczywicie do
niczego nieprzydatny, ale stanowi szkielet, ktry teraz mona obudowa funkcjami, procedurami, komponentami itd., tworzc w peni
uyteczn aplikacj. Wywietlone na ekranie okno ma rozmiary domylne i, co oczywiste, nie zawsze odpowiada potrzebom tworzonej
aplikacji, dlatego najczciej bdziemy zmuszeni do zmiany jego rozmiarw oraz pooenia na ekranie.

Zmiana pooenia okna na ekranie


Pooenie okna na ekranie kontrolujemy w oknie edycyjnym (zakadka Design), jak pokazuje to rysunek 4.9.
Aby zmieni pozycj okna na ekranie, wystarczy uchwyci kursorem
myszki biay prostokt (okno) widoczny na tle ekranu (szary prostokt
w zaznaczonym polu) i przesun go w dowolne miejsce szarego prostokta, tak jak na rysunku 4.10.

Rozdzia 4. Przykadowe aplikacje

59

Rysunek 4.9.
Pozycja okna
aplikacji
na ekranie

Rysunek 4.10.
Zmiana pozycji
okna za pomoc
okna edycji kodu

Metoda ta, chocia wygodna, jest jednak mao precyzyjna i niekiedy


niewystarczajca, dlatego lepiej skorzysta z zakadki Properties (waciwoci) okna Object Inspector. Odpowiednie pola tej zakadki pokazuje rysunek 4.11.
Rysunek 4.11.
Pola do zmiany
pooenia okna
na ekranie

Wartoci w polach Left i Top odnosz si do lewego grnego naronika okna.

W oknie Object Inspector wywietlona jest nazwa obiektu poddawanego


modyfikacjom (tutaj Okno_Klawisz), co jest szczeglnie wane, gdy mamy
do czynienia z wieloma obiektami.

60

Delphi 2006 wiczenia praktyczne

Przedstawione sposoby nie s jedynym moliwymi, istnieje oczywicie


rwnie moliwo usytuowania okna na ekranie na drodze programowej, ktra jest nadrzdna w stosunku do ustawie Object Inspector, co pokae kolejne wiczenie.
W I C Z E N I E

4.4

Zmiana usytuowania okna na pulpicie

Aby programowo ustawi pozycj okna na pulpicie, naley:


1. W oknie Object Inspector wybra zakadk Events.
2. Wybra pole OnCreate i dwukrotnie klikn w jego polu

edycyjnym (rysunek 4.12).


Rysunek 4.12.
Utworzenie
procedury
obsugi
zdarzenia
OnCreate

3. W utworzonej automatycznie procedurze obsugi tego zdarzenia

wpisa dwie linie kodu:


procedure TOkno_Klawisz.FormCreate(Sender: TObject);
begin
Okno_Klawisz.Left := 500; // Object Inspektor : 3
Okno_Klawisz.Top := 300; // Object Inspektor : 269
end;

Po uruchomieniu programu okno zostanie wywietlone w miejscu


okrelonym w procedurze obsugi zdarzenia OnCreate.

Dodajemy komponenty
Projektowanie graficznego interfejsu uytkownika (GUI) jest prawdopodobnie jedn z waniejszych czynnoci, jakie ma do wykonania
programista. Pomijajc wzgldy estetyczne, czytelno i intuicyjno

Rozdzia 4. Przykadowe aplikacje

61

interfejsu, w znacznej mierze przyczynia si do atrakcyjnoci caej


aplikacji. W zakresie czytelnoci caego interfejsu decydujc rol
odgrywaj umieszczone na nim elementy sterujce prac aplikacji
(komponenty). Ponadto komponenty realizuj cay szereg zada, odciajc programist od pisania wielu linii kodu, co znacznie przyspiesza prac nad ca aplikacj. Biblioteka komponentw (VCL) jest
tak obszerna w Delphi 2006, e omwienie ich wszystkich jest w tej
ksice cakowicie niemoliwe. Do tego dochodz komponenty tworzone przez niezalenych programistw, ktrych jest prawdopodobnie jeszcze wicej. W tej czci ksiki zajmiemy si wic tylko najwaniejszymi komponentami, umoliwiajcymi sprawne sterowania
nasz aplikacj. W kolejnych wiczeniach bdziemy dodawa do naszej aplikacji kolejne komponenty, tak aby przybliy Czytelnikowi
ich moliwoci i przydatno w tworzonej aplikacji. W celu dodania
jakiegokolwiek komponentu naley oczywicie skorzysta z palety
komponentw zawartej w oknie Tool Palette. W zalenoci od typu
tworzonej aplikacji musimy wybra odpowiednie pole tego okna, ktre
zwykle rozwija si automatycznie dla danego typu aplikacji. Dodawanie
rnych (najczciej uywanych) komponentw poka w kolejnych
wiczeniach.
W I C Z E N I E

4.5

Dodanie do formularza komponentw Button (klawisz)


i Edit (pisz)

Aby doda do formularza komponent (np. Button), naley:


q wybra dany komponent z listy komponentw,
q klikn na wybranym komponencie (rysunek 4.13),
Rysunek 4.13.
Wybr
komponentu
do umieszczenia
na formularzu

62

Delphi 2006 wiczenia praktyczne

q przenie kursor w dane miejsce posadowienia komponentu

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.

Dodanie dalszych komponentw (Edit1 i Edit2) odbywa si identycznie.


Po dodaniu nowych komponentw kod rdowy aplikacji bdzie wyglda jak na listingu 4.9.
Listing 4.9. Kod rdowy po doczeniu komponentw Button1,
Edit1 i Edit2
unit Unit1;
interface
uses
Windows, Messages, SysUtils, dariants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
utton1: T utton;
Edit1: TEdit;
Edit2: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.

Rozdzia 4. Przykadowe aplikacje

63

Po uruchomieniu wywietlone okno bdzie wyglda tak, jak na rysunku 4.15.


Rysunek 4.15.
Okno po wstawieniu
nowych komponentw
(nazwy i tytuy
komponentw
domylne)

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

Nadanie tytuw i nazw komponentom

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

i wpisa nazw komponentu (rysunek 4.16).


Po nadaniu nazwy (Name) komponentowi nastpuje automatyczne
przypisanie tego tekstu waciwoci Caption, ale nigdy odwrotnie.
Waciwo Caption mona dowolnie zmienia.
Tre tekstu we waciwoci Name nie moe zawiera polskich znakw
diakrytycznych.

64

Delphi 2006 wiczenia praktyczne

Rysunek 4.16. Nadanie nazwy (Name) i tytuu (Caption) komponentowi


Button1

Zmiana rozmiarw okna


Rozmiary okna naszej aplikacji (szeroko i wysoko), jeeli nie s
to wartoci wymagane z innych wzgldw, najlepiej pozostawi do
ustalenia Delphi 2006.
W I C Z E N I E

4.7

Dopasowanie automatyczne (AutoSize)

Aby okno automatycznie dostosowywao si od niezbdnych rozmiarw, naley:


1. Wyrni formularz (klikajc na obszarze formularza). Wok
formularza pojawi si ramka do zmiany rozmiarw formularza.
2. W oknie Object Inspektor wybra zakadk Properties i odszuka

pole Visual/AutoSize. W oknie edycyjnym tego pola widnieje


napis False. Oznacza to, e rozmiary okna ustalane s przez
programist. Widok formularza przy takim ustawieniu ilustruje
rysunek 4.17.
3. Zmieni warto pola Visual/AutoSize na True. Obraz na ekranie

ulegnie zmianie, co wida na rysunku 4.18.


Jeeli na formularzu nie bdzie adnego komponentu, to okno zostanie
wywietlone w postaci belki zada.

Rozdzia 4. Przykadowe aplikacje

65

Rysunek 4.17. Ustawienia pola Visual/AutoSize, przy ustalaniu rozmiarw


okna przez programist
Rysunek 4.18.
Dopasowanie
rozmiarw
okna do
zainstalowanych
komponentw

W I C Z E N I E

4.8

Zmiana rozmiarw okna


przy zmianie rozdzielczoci ekranu

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

Delphi 2006 wiczenia praktyczne

1. Doda w sekcji var dwie zmienne: L (szeroko) i H (wysoko).


var
Okno_Klawisz: TOkno_Klawisz;
L, H : Integer; // Musz by zmiennymi typu Integer

2. Zmodyfikowa kod rdowy procedury obsugi zdarzenia

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

Zmiana rozmiarw okna ramk wymiarow

Zmiana rozmiarw okna przy pomocy ramki otaczajcej formularz:


Uchwyci kursorem za krawd ramki lub wydzielone kwadraciki
i przecigajc nim, nada formularzowi wymagane rozmiary.

Dodajemy pasek menu


Pasek menu to obok belki tytuowej jeden z najczciej wystpujcych elementw sterujcych okna aplikacji. Pasek menu powinien zawiera praktycznie wszystkie podstawowe polecenia (pola), umoliwiajce sterowanie prac caej aplikacji.
W I C Z E N I E

4.10

Pasek Menu

Aby doda pasek Menu do naszego formularza, naley:


1. W oknie Tool Palette wybra zakadk Standard i zaznaczy

komponent TMainMenu, a nastpnie naprowadzi kursor


w dowolne miejsce na formularzu i klikn lewym przyciskiem
myszki. Efekt dziaania przedstawia rysunek 4.19.

Rozdzia 4. Przykadowe aplikacje

67

Rysunek 4.19. Umieszczanie komponentu TMainMenu na formularzu


Komponent TMainMenu jest komponentem niewidocznym.
2. Przy zaznaczonym komponencie TMainMenu (otoczony ramk),

w oknie Object Inspektor, w zakadce Properties, w polu Name


nadajemy wasn nazw nowemu menu np. MenuOkno_1.
Przechodzimy do pola Items, aby uruchomi okno kreatora
menu poprzez dwukrotne kliknicie na tym polu. Wszystkie
w/w czynnoci ilustruje rysunek 4.20.

Rysunek 4.20. Zmiana nazwy komponentu TMainMenu i uruchomienie


kreatora menu
3. Po otworzeniu okna kreatora menu wpisujemy dany napis,

ktry po zatwierdzeniu pojawi si jako opis danego pola menu.


Jednoczenie za polem pojawi si nowy prostokt (zakrelony
lini przerywan) kolejnego pola menu, co pokazuje rysunek 4.21.

68

Delphi 2006 wiczenia praktyczne

Rysunek 4.21.
Tworzenie menu

4. Dodajemy podmenu kadego pola poprzez kliknicie

na wybranym polu. Po zakoczeniu dodawania pl menu


i podmenu zamykamy okno kreatora, a na formularzu pojawi
si pasek menu, co ilustruje rysunek 4.22.
Rysunek 4.22.
Formularz
z dodanym
paskiem 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

Oprogramowanie pola Plik/Zakocz{Zakocz1}

Zadaniem tego pola jest zakoczenie dziaania aplikacji.


Aby oprogramowa dowolne polecenie podmenu (tutaj pola Plik),
naley:
1. Dwukrotnie klikn na komponencie TMainMenu.
2. Wybra dane pole i jego polecenie (Plik/Zakocz).
3. W oknie Object Inspector, na zakadce Events wybra

zdarzenie, np. OnClick.


4. Dwukrotnie klikn na tym zdarzeniu. W oknie edycyjnym
wywietlony zostanie kod rdowy moduu, w ktrym
dodana zostaa procedura obsugi tego zdarzenia.

Rozdzia 4. Przykadowe aplikacje

69

5. Wpisujemy odpowiednie instrukcje, tak aby procedura wykonaa

zaoone zadanie. W tym wypadku treci procedury bdzie jedna


linia kodu. Ca procedur ilustruje poniszy fragment kodu:
procedure TOkno_Klawisz.Zakocz1Click(Sender: TObject);
begin
Application.Terminate;
end;

Po uruchomieniu programu bdzie mona zakoczy prac aplikacji


klikajc na polecenie Plik/Zakocz.

Pozostae polecenia poszczeglnych pl uzupenia si waciwymi


instrukcjami kodu w procedurach obsugujcych dane zdarzenia.
Pewnym wyjtkiem jest pole O programie. Jego obsuga rni si nieco
od opisanej poprzednio, a to ze wzgldu na wywoanie specjalnego
okna About.
W I C Z E N I E

4.12

Dodajemy okno About

Aby doda okno About do pola O programie, naley:


1. W oknie New Items (File/New/Other) wybra ikon moduu

About Box, tak jak na rysunku 4.23.


Rysunek 4.23.
Wybr moduu
About Box

2. W dolnej czci okna oznaczy opcj Use, ktra automatycznie

doczy modu do naszego projektu (rysunek 4.24).


Rysunek 4.24.
Zaznaczenie opcji
automatycznego
doczenia moduu
do projektu

70

Delphi 2006 wiczenia praktyczne

3. Zatwierdzi wybory (OK). Nowy modu zostanie wczony

do pliku programu, co pokazuje listing 4.10.


Listing 4.10. Uzupeniony automatycznie kod rdowy programu
po dodaniu moduu
program KL_dCL_32;
uses
Forms,
KlawiszdCL32 in 'KlawiszdCL32.pas' {Okno_Klawisz},
About in 'f:\borland\bds\4.0\ObjRepos\DelphiWin32\About.pas'
{About ox};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TOkno_Klawisz, Okno_Klawisz);
Application.CreateForm(TAbout ox, About ox);
Application.Run;
end.

Tak dodany modu jest rwnie automatycznie uruchamiany razem


z ca aplikacj. Wida to na kontrolce formularzy w oknie edycji, co
pokazuje rysunek 4.25.
Rysunek 4.25.
Formularze
uruchamiane
automatycznie
wraz ze startem
aplikacji
podstawowej
4. Otworzy do edycji plik About.pas (View/Units) i zapisa go na

dysku w naszym katalogu (File/Save As), nadajc mu inn,


unikatow nazw, np. OProgramie.
Po takiej operacji nasz plik programu przyjmie posta:
program KL_dCL_32;
uses
Forms,
KlawiszdCL32 in 'KlawiszdCL32.pas' {Okno_Klawisz},
OProgramie in 'OProgramie.pas' {About ox}; // About ox to nie
// zmieniona nazwa formularza
{$R *.res}
begin
Application.Initialize;

Rozdzia 4. Przykadowe aplikacje

71

Application.CreateForm(TOkno_Klawisz, Okno_Klawisz);
Application.CreateForm(TAbout ox, About ox);
Application.Run;
end.

Rozwizanie takie jest co prawda wygodne, ale zajmuje bardzo duo


pamici, co nie zawsze jest podane. Sytuacji takiej mona zapobiec,
tworzc dan aplikacj (Application.CreateForm(TAboutBox, AboutBox))
tylko wtedy, kiedy jest potrzebna.
W I C Z E N I E

4.13

Tworzenie aplikacji (okna) na yczenie uytkownika

Aby zapobiec tworzeniu aplikacji pomocniczej jednoczenie z tworzeniem aplikacji gwnej, naley:
1. Otworzy okno Project Options (Project/Options), widoczne

na rysunku 4.26.

Rysunek 4.26. Wybr formularza do rcznego uruchomienia


2. Po wybraniu formularza, ktry nie ma by tworzony

automatycznie w czasie startu programu, naciskamy klawisz (>),


co powoduje przeniesienie zaznaczonego formularza
do okienka Available forms, jak jest to pokazane na rysunku 4.27.

72

Delphi 2006 wiczenia praktyczne

Rysunek 4.27. Przeniesienie wybranego formularza (AboutBox) z okna


Auto-create forms: do okna Available forms: (nie uruchamiany przy starcie
programu)

Dziaanie takie skutkuje usuniciem okrelonego moduu z pliku kodu


rdowego programu, co ilustruje listing 4.11.
Listing 4.11. Anulowanie automatycznego tworzenia nowego okna AboutBox
program KL_dCL_32;
uses
Forms,
KlawiszdCL32 in 'KlawiszdCL32.pas' {Okno_Klawisz},
OProgramie in 'OProgramie.pas' {About ox};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TOkno_Klawisz, Okno_Klawisz);
Application.Run;
end.

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.

Rozdzia 4. Przykadowe aplikacje

73

W I C Z E N I E

4.14

Utworzenie okna w trakcie dziaania programu

Aby utworzy nowe (dodatkowe) okno w trakcie dziaania programu


gwnego, naley:
1. Doda now sekcj uses w module gwnym (KlawiszVCL32),
wpisujc tam nazw doczanego moduu (OProgramie).
2. Dwukrotnie klikn na komponencie TMainMenu, co spowoduje
otworzenie okna kreatora menu.
3. Wybra waciwe pole (O programie), i w oknie Object Inspector

w zakadce Events wybra polecenie obsugi zdarzenia OnClick,


po czym dwukrotnie klikn na tym zdarzeniu.
4. W utworzonej procedurze obsugi tego zdarzenia wpisa
nastpujce linie kodu:
procedure TOkno_Klawisz.Oprogramie1Click(Sender: TObject);
begin
About ox := TAbout ox.Create(Application);
About ox.Show;
end;
W I C Z E N I E

4.15

Zamknicie okna dodatkowego (O programie)

Aby zamkn okno O programie, utworzone w trakcie dziaania programu, naley:


1. Otworzy do edycji plik moduu dodatkowego (About.pas).
2. Wybra klawisz OK i w zakadce Events okna Object Inspector

dwukrotnie klikn na zdarzeniu OnClick.


3. W utworzonej procedurze obsugi zdarzenia wpisa:
procedure TAbout ox.OK uttonClick(Sender: TObject);
begin
About ox.Free;
end;

74

Delphi 2006 wiczenia praktyczne

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

Dodajemy formularze (okna) rnych stylw

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.

Rysunek 4.29. Nowy modu w oknie edytora kodu

Rozdzia 4. Przykadowe aplikacje

75

2. Zmieni domyln nazw (Form1) na odpowiedni dla danego

okna, np. Okno_bsDialog. Nastpi teraz jednoczenie zmiana


waciwoci Caption, ktra, jeeli nam odpowiada, moe pozosta.
Wprowadzone zmiany ilustruje rysunek 4.30.

Rysunek 4.30. Nadanie nowej nazwy i tytuu formularzowi (oknu)


3. Zapisa na dysku nowy plik w katalogu naszego projektu

(File/Save As), nadajc mu unikatow nazw np. OknobsDialog.


Z chwil wykonania tej czynnoci zmianie ulegy (zostay
automatycznie zaktualizowane) zapisy w pliku rdowym
programu (KL_VCL_32) oraz nazwa nowego moduu
(OknobsDialog).
4. W naszej sekcji uses dopisujemy nazw nowego moduu:
uses
OProgramie, OknobsDialog;

Na tym etapie nasz nowy modu jest ju doczony do projektu.


W I C Z E N I E

4.17

Wywietlenie nowego okna (Okno_bsDialog)

Poniewa nasze nowe okno zostao utworzone przy starcie programu,


aby je wywietli, wystarczy w kodzie rdowym moduu gwnego
(KlawiszVCL32) umieci procedur obsugi zdarzenia OnClick pola
menu (Okna/bsDialog).
Aby umieci dan procedur i wywietli okno Okno_bsDialog,
naley:
1. Na gwnym formularzu projektu dwukrotnie klikn

na komponencie TMainMenu.

76

Delphi 2006 wiczenia praktyczne

2. Na wywietlonym oknie kreatora menu klikn na polu Okna,

a nastpnie na polu bsDialog, tak jak na rysunku 4.31.


Rysunek 4.31.
Wybr pola menu
do wywietlenia
okna Okno_bsDialog
3. Wybra w oknie Object Inspektor w zakadce Properties

zdarzenie OnClick i dwukrotnie klikn lewym przyciskiem


myszki.
4. W edytowanej procedurze umieci nastpujcy kod:
procedure TOkno_Klawisz. sDialog1Click(Sender: TObject);
begin
Okno_bsDialog.Left := 0; // Lewa krawd pulpitu
Okno_bsDialog.Top := 0; // G rna krawd pulpitu
Okno_bsDialog.Show; // Poka okno
end;

Zamknicie dodatkowego okna moe odby si na kilka sposobw.


Najprostszym jest oczywicie skorzystanie z przycisku X (Zamknij).

Action tajemnicza waciwo


Niekiedy zdarza si, e nasza aplikacja musi umoliwi uruchomienie innych aplikacji. W prezentowanym od pocztku tego rozdziau
projekcie, w polu menu Plik znajduje si polecenie Uruchom. Najprostszym sposobem wykonania tego zadania jest skorzystanie z waciwoci Action tego polecenia.
Aby wykorzysta waciwo Action, naley:
1. Umieci na formularzu komponent TActionList. Komponent ten

znajduje si na karcie Standard okna Tool Palette.


2. Klikn dwukrotnie na tym komponencie, a nastpnie klikn

prawym klawiszem w okienku Categories:. Zobaczymy okno,


takie jak na rysunku 4.32.
3. Klikn dwukrotnie na tym komponencie. Zobaczymy okno,

takie jak na rysunku 4.33.

Rozdzia 4. Przykadowe aplikacje

77

Rysunek 4.32.
Okno edycji
ActionList

Rysunek 4.33.
Wybranie
kategorii File
i akcji TFileRun

4. Zatwierdzi wybr (OK), a okno Editing zmieni swj wygld

(w polu Categories: pojawi si napis File). Po klikniciu na tym


napisie w polu Actions: pojawi si napis FileRun1, co pokazuje
rysunek 4.34.

78

Delphi 2006 wiczenia praktyczne

Rysunek 4.34.
Uzupeniona
lista ActionList1

5.
6.

7.
8.

Tak uzupenion list mona ju wykorzysta do wypenienia


waciwoci Action pola Plik/Uruchom.
Klikn dwukrotnie na komponencie MenuOkno_1 (TMainMenu),
a nastpnie wybra polecenie Plik/Uruchom.
Na zakadce Properties klikn na polu Action i z rozwinitej
listy dostpnych akcji (teraz tylko jedna) wybra t waciw
(FileRun1).
Zmieni we waciwoci Action/Browse zapis False na True.
Zmieni we waciwoci Action/Caption zapis domylny
&Run na &Uruchom.

Czynnoci 6,7 i 8 ilustruje rysunek 4.35.


Rysunek 4.35.
Ustawianie
wartoci
waciwoci
Action polecenia
Plik/Uruchom

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,

Rozdzia 4. Przykadowe aplikacje

79

KlawiszdCL32 in 'KlawiszdCL32.pas' {Okno_Klawisz},


OProgramie in 'OProgramie.pas' {About ox},
OknobsDialog in 'OknobsDialog.pas' {Okno_bsDialog};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TOkno_Klawisz, Okno_Klawisz);
Application.CreateForm(TOkno_bsDialog, Okno_bsDialog);
Application.Run;
end.

Ten kod tworzony jest automatycznie przez Delphi 2006, i na razie nie
ma potrzeby ingerencji w jego zawarto.

Na listingu 4.13 przedstawiony jest kod rdowy gwnego moduu


projektu KlawiszVCL32.
Listing 4.13. Kod rdowy moduu KlawiszVCL32
unit KlawiszdCL32;
interface
uses
Windows, Messages, SysUtils, dariants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, Menus, StdActns, ExtActns, ListActns, ActnList;
type
TOkno_Klawisz = class(TForm)
Szerokosc: TEdit;
Wysokosc: TEdit;
Wymiary: T utton;
MenuOkno_1: TMainMenu;
Plik1: TMenuItem;
Zakocz2: TMenuItem;
Okna1: TMenuItem;
sDialog1: TMenuItem;
sSingle1: TMenuItem;
sSizeToolWin1: TMenuItem;
sNone1: TMenuItem;
sSizeAble1: TMenuItem;
sToolWin1: TMenuItem;
Oprogramie1: TMenuItem;
N2: TMenuItem;
Uruchom1: TMenuItem;
ActionList1: TActionList;
FileRun1: TFileRun;
procedure sDialog1Click(Sender: TObject);
procedure Oprogramie1Click(Sender: TObject);
procedure Zakocz1Click(Sender: TObject);

80

Delphi 2006 wiczenia praktyczne


procedure WymiaryClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Okno_Klawisz: TOkno_Klawisz;
L, H
: Integer;
implementation
{$R *.dfm}
uses // Nasze moduy
OProgramie, OknobsDialog;
procedure TOkno_Klawisz. sDialog1Click(Sender: TObject);
begin
Okno_bsDialog.Left := 0;
Okno_bsDialog.Top := 0;
Okno_bsDialog.Show;
end;
procedure TOkno_Klawisz.FormCreate(Sender: TObject);
begin
L := Screen.DesktopWidth;
H := Screen.DesktopHeight;
Okno_Klawisz.Width := L div 3;
Okno_Klawisz.Height := H div 4;
// Okno na rodku pulpitu
Okno_Klawisz.Left := (L div 2) - Okno_Klawisz.Width div 2;
Okno_Klawisz.Top := (H div 2) - Okno_Klawisz.Height div 2;
end;
procedure TOkno_Klawisz.Oprogramie1Click(Sender: TObject);
begin
About ox := TAbout ox.Create(Application);
About ox.Show;
end;
procedure TOkno_Klawisz.WymiaryClick(Sender: TObject);
begin
Szerokosc.Text := IntToStr(L);
Wysokosc.Text := IntToStr(H);
end;
procedure TOkno_Klawisz.Zakocz1Click(Sender: TObject);
begin
Application.Terminate;
end;
end.

Rozdzia 4. Przykadowe aplikacje

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.

Nowy projekt aplikacji typu Windows Forms Application


Delphi for .NET
W I C Z E N I E

4.18

Tworzymy nowy projekt WinForm

Aby utworzy nowy projekt typu WinForm, naley:


1. Wybra z menu polecenie File/New/Windows Forms Application

Delphi for .NET. Utworzone zostan podstawowe pliki projektu


(nazwy domylne: Project1 i Unit1).
2. Po jego utworzeniu zapisa nowy projekt w oddzielnym

katalogu, z jednoczesnym nadaniem unikatowych nazw


projektowi (np. KLWinForms) i moduowi gwnemu
(np. KL_WinForm). Kody rdowe tak utworzonego projektu
przedstawiaj listingi 4.14 i 4.15.

82

Delphi 2006 wiczenia praktyczne

Listing 4.14. Kod rdowy programu KLWinForms


program KLWinForms;
{%DelphiDotNetAssemblyCompiler
'$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.dll'}
{%DelphiDotNetAssemblyCompiler
'$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Data.dll'}
{%DelphiDotNetAssemblyCompiler
'$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Drawing.dll'}
{%DelphiDotNetAssemblyCompiler
'$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.Windows.Forms.dl
l'}
{%DelphiDotNetAssemblyCompiler
'$(SystemRoot)\microsoft.net\framework\v1.1.4322\System.XML.dll'}
{$R 'KL_WinForm.TWinForm.resources' 'KL_WinForm.resx'}
uses
System.Reflection,
System.Runtime.CompilerServices,
System.Runtime.InteropServices,
System.Windows.Forms,
KL_WinForm in 'KL_WinForm.pas' {KL_WinForm.TWinForm:
System.Windows.Forms.Form};
{$R *.res}
[STAThread]
begin
Application.Run(TWinForm.Create);
end.

Listing 4.15. Kod rdowy moduu KL_WinForm


unit KL_WinForm;
interface
uses
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data;
type
TWinForm = class(System.Windows.Forms.Form)
strict protected
/// <summary>
/// Clean up any resources being used.
/// </summary>
procedure Dispose(Disposing: oolean); override;
private
{ Private Declarations }
public
constructor Create;
end;
[assembly: RuntimeRequiredAttribute(TypeOf(TWinForm))]

Rozdzia 4. Przykadowe aplikacje

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.

Zmiana tytuu (Text) okna


Zmiany tytuu okna dokonuje si w oknie Object Inspector, w zakadce Properties, we waciwociach Appearance/Text, co pokazuje
rysunek 4.36.

Rysunek 4.36. Zmiana tytuu formularza (okna)

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

Delphi 2006 wiczenia praktyczne

q zamiast komponentu TButton jest Button,


q zamiast komponentu TEdit jest TextBox,
q waciwo Caption to Text,
q zdarzenie OnClick zastpio samo Click.
W I C Z E N I E

4.19

Dodajemy komponenty

Aby doda do naszego formularza nowe komponenty, naley:


1. W oknie Tool Palette wybra dany komponent

(z odpowiedniej palety), np. Button.


2. Klikn na wybranym komponencie, nastpnie przenie kursor

w wybrane dla danego komponentu miejsce i zaznaczy obszar,


w ktrym zostanie on umieszczony.
Postpujc w ten sam sposb, umiemy na formularzu jeszcze:
q

dwa komponenty TextBox (Edit) z palety Windows Forms,

dwa komponenty Label (Label) z palety Windows Forms,

komponent MainMenu (MainMenu) z palety Components,

komponent OpenFileDialog (OpenDialog) z palety Dialogs.


W nawiasach podano nazwy komponentw formularzy VCL dla Delphi.

3. Nada komponentom Label i TextBox nowe nazwy (Name)

i tytuy (Text).
Formularz z dodanymi komponentami przedstawia rysunek 4.37.

Pasek menu pola i polecenia


Pasek menu to obok belki tytuowej jeden z najczciej wystpujcych
elementw sterujcych okna aplikacji. Pasek menu powinien zawiera
praktycznie wszystkie podstawowe polecenia (pola), umoliwiajce
sterowanie prac caej aplikacji.

Rozdzia 4. Przykadowe aplikacje

85

Rysunek 4.37. Formularz aplikacji typu WinForm z dodanymi komponentami


W I C Z E N I E

4.20

Opis pola i polece menu

Aby opisa pola i polecenia menu, naley:


1. Klikn na pierwszym polu menu (zaznaczony prostokt
z napisem Type Here).
2. W oknie Object Inspector, zakadce Properties i polu Misc/Text

wpisa nazw pola np. &Plik.


3. Wpisa nazwy kolejnych polece pola Plik.
Opisane pole i polecenia menu przedstawia rysunek 4.38.
Rysunek 4.38.
Nadawanie nazw
poszczeglnym
polom
i poleceniom menu

86

Delphi 2006 wiczenia praktyczne

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

Aby kliknicie na poleceniu Plik/Zakocz koczyo prac aplikacji,


naley:
1. Rozwin pole Plik (klikn na tym polu).
2. Klikn na poleceniu Zakocz.
3. W oknie Object Inspector przej do zakadki Events.
4. Klikn dwukrotnie na zdarzeniu Misc/Click.
5. W utworzonej automatycznie procedurze obsugi zdarzenia

wpisa poniszy kod:


procedure TWinForm.MenuItem5_Click(sender: System.Object; e:
System.EventArgs);
begin
Application.Exit; // Odpowiada instrukcji Application.Terminate
dla dCL
end;

Mamy teraz moliwo wybrania stylu okna (waciwoci FormBorderStyle) jako None, co oznacza brak belki tytuowej, a co za tym idzie
brak przyciskw sterujcych.

Rozdzia 4. Przykadowe aplikacje

87

W I C Z E N I E

4.22

Polecenie Uruchom

Polecenie Uruchom pozwoli na uruchomienie programu typu *.exe).


Aby polecenie Uruchom dziaao, naley:
1. Klikn na komponencie OpenFileDialog.
2. Na zakadce Properties w polu Misc/Filter wpisa tekst:
Pliki tyAu (*.exe)|*.exe.
3. Rozwin pole Plik i klikn na poleceniu Uruchom.
4. Na zakadce Events klikn dwukrotnie na zdarzeniu Click.
5. Uzupeni procedur poniszym kodem:
procedure TWinForm.MenuItem3_Click(sender: System.Object; e:
System.EventArgs);
var
Plik : String;
begin
OpenFileDialog1.ShowDialog; // Otwarcie okna dialogowego
Plik := OpenFileDialog1.FileName; // Przypisanie do zmiennej Plik
// penej nazwy wybranego pliku (cznie ze ciek dostpu)
Label2_Sciezka.Text := Plik; // Wywietlenie penej nazwy wybranego
// pliku
WinExec(Plik, SW_SHOW); // Uruchomienie wybranego pliku
end;

Funkcja WinExec() nie dziaa w 32-bitowych programach VCL


tworzonych w Delphi 2006.
W I C Z E N I E

4.23

Przycisk Wymiary pulpitu

Zadaniem tego klawisza jest dostarczenie informacji o aktualnych


wymiarach (w pikselach) pulpitu. Informacja taka moe by przydatna np. do proporcjonalnej zmiany wymiarw okna w zalenoci
od aktualnej rozdzielczoci ekranu (pulpitu). W oprogramowaniu tego
przycisku wykorzystane zostay pewne funkcje, na ktrych szczegowe
omwienie ze wzgldu na ograniczon objto ksiki nie ma miejsca, a Czytelnik musi je przyj na wiar.
Aby przycisk Wymiary pulpitu dostarczy danej informacji, naley:

88

Delphi 2006 wiczenia praktyczne

1. W sekcji uses doda dwa moduy: SysUtils i Windows.


2. Klikn na przycisku Wymiary pulpitu, a nastpnie dwukrotnie

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;

Po dodaniu wszystkich procedur obsugi zdarze zainstalowanych


komponentw gotowy program mona skompilowa i uruchomi.
Efekt kocowy przedstawia rysunek 4.39.
Rysunek 4.39.
Kocowy efekt
dziaania
programu
KLWinForms

You might also like