background image

Rozdział 4.

Środowisko zintegrowane (IDE)

Pierwszym krokiem w poznawaniu nowego środowiska programistycznego jest zapozna-
nie się z ogólną filozofią działania tego środowiska, ze strukturą menu oraz znaczeniem
poszczególnych opcji. Jeżeli spotykasz się z Object Pascalem po raz pierwszy, masz
utrudnione zadanie: musisz poznać nowy program (Delphi IDE) oraz jednocześnie na-
uczyć się nowego języka. Może to być czasem bardzo trudne. Ze swojej strony uczynię
wszystko, żeby nauka IDE była dla Ciebie przyjemnością. Będzie to przede wszystkim
nauka na przykładach, co uczyni ją, mam nadzieję, interesującą i efektywną.

Delphi IDE

Jeżeli masz już doświadczenie z Delphi, możesz uznać ten rozdział za mało interesują-
cy. Jeżeli tak jest, przejrzyj go przynajmniej pobieżnie. Może znajdziesz w nim coś,
czego akurat nie wiedziałeś, szczególnie jeśli chodzi o nowości wprowadzone dopiero
w wersji 4.

Na Delphi IDE składają się z następujące elementy:

υ 

Menu główne i paski narzędzi

υ 

Paleta komponentów

υ 

Projektant Formularzy

υ 

Edytor Kodu

υ 

Inspektor Obiektów

υ 

Eksplorator Kodu

υ 

Menedżer Projektów

background image

130

Część I

130

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.1.
Środowisko
zintegrowane
Delphi 4

Omówienie tych wszystkich części składowych zajmie mi kilka następnych rozdziałów.
W tym rozdziale omówię projekty i sposoby ich używania przy pisaniu aplikacji Delphi.
Następnie zajmiemy się paskami narzędzi i Paletą Komponentów. Szczegółowe omó-
wienie formularzy zostawiam na koniec.

Czytając ten rozdział będziesz jednocześnie pisał przykładowe programy ilustrujące po-
szczególne zagadnienia. Przyjrzysz się także bliżej Inspektorowi Obiektów. Będzie to
rozgrzewka do rozdziału 6. „Praca z Projektantem Formularzy i Projektantem Menu”,
w którym poznasz Projektanta Formularzy od podszewki. Pod koniec bieżącego rozdziału
dowiesz się, co to są okna dokowalne IDE. Pozwalają one dostosować IDE do własnych
potrzeb i stylu pracy.

Projekty

Jak już wiesz, cała masa rzeczy dzieje się w tle podczas pisania aplikacji w Delphi. Jest

tego dużo więcej, niż mogłeś przypuszczać wnioskując z dotychczasowej lektury. Znajo-

mość szczegółów nie jest konieczna, jeżeli chodzi o tworzenie aplikacji, jednak dobrze

jest mieć ogólne pojęcie o tych wszystkich ukrytych mechanizmach.

Projekt  jest to zestaw plików wzajemnie ze sobą powiązanych, które po
kompilacji składają się na program wykonywalny albo bibliotekę DLL.

Oprócz pojedynczych projektów, Delphi umożliwia tworzenie tzw. grup pro-

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

131

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

131

jektów. Grupa projektów jest to zestaw powiązanych projektów Delphi.

Grupa projektów służy do zarządzania projektami Delphi, które składają się na określony
produkt software’owy (pakiet). Grupy projektów omówię bardziej szczegółowo w roz-
dziale 9. „Projekty, Edytor Kodu i Eksplorator Kodu”. Na razie trzeba Ci wiedzieć, że
Delphi przy każdym uruchomieniu tworzy nową (bez nazwy) grupę projektów (jeżeli
nie włączyłeś opcji zachowywania obszaru roboczego przy wyjściu z Delphi). Każdy
nowy projekt automatycznie włączony będzie do tej grupy. Jeżeli chcesz, możesz tę
grupę projektów zapisać na dysk.

Pliki używane w projektach

Delphi zarządza projektami używając do tego kilku plików pomocniczych. Żeby zoba-
czyć, co się dzieje w czasie tworzenia nowego pliku wykonywalnego, stwórzmy prostą
aplikację:

 

1. 

Utwórz na dysku nowy katalog, gdzie będą zapisywane wszystkie pliki projektu
(nadaj mu dowolnie wybraną nazwę).

 

2. 

Wybierz z menu 

File | Close All

  żeby się upewnić,  że nie ma żadnych

otwartych plików ani projektów. Następnie wybierz 

File | New Application

,

aby utworzyć nową aplikację.

 

3. 

Wybierz opcję 

File | Save All

. Otworzy się okienko z pytaniem o nazwę

pliku źródłowego modułu. W polu „Zapisz w” wskaż utworzony przed chwilą
katalog.

 

4. 

W polu „Nazwa pliku” wpisz 

MojModul

. i naciśnij przycisk „Zapisz”.

 

5. 

Teraz musisz podać nazwę projektu. W polu „Nazwa pliku” wpisz 

Test

 i po-

nownie naciśnij przycisk „Zapisz”.

 

6. 

Wybierz z menu 

Project | Build Test

. Delphi skompiluje program (zajmie

to kilka sekund).

 

7. 

Wybierz 

File | Close All

.

 

8. 

Uruchom teraz Eksploratora Windows i wyszukaj katalog z plikami projektu.
Znajdziesz ich tam kilka.

W katalogu tym powinno być około ośmiu plików (dokładna ich liczba zależy od usta-
wień IDE). Pozwól, że najpierw powiem, co się dokładnie dzieje w czasie kompilacji
projektu. Potem objaśnię, jakie znaczenie mają poszczególne pliki.

Pliki z rozszerzeniem rozpoczynającym się od znaku tyldy (

∼) są kopiami

zapasowymi. Delphi może utworzyć kilka kopii zapasowych zależnie od
liczby plików źródłowych w projekcie i od ustawień poszczególnych opcji

background image

132

Część I

132

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

projektu. Opcje projektu opisane są w rozdziale 9.

Przy tworzeniu nowego projektu Delphi zakłada minimum 4 pliki (jeżeli jest to typowa
aplikacja GUI):

υ 

Plik źródłowy projektu

υ 

Moduł formularza głównego

υ 

Plik zasobów formularza głównego

υ 

Plik zasobów projektu

Plik źródłowy projektu zawiera kod, który jest wykonywany przy uruchamianiu aplikacji.
Plik ten można wyświetlić wybierając opcję 

Project | View Source

 z menu głównego.

Moduł formularza głównego zawiera deklarację i definicję klasy formularza głównego.
Dla każdego stworzonego przez Ciebie formularza Delphi utworzy dodatkowy plik modułu.
Plik. Plik zasobów formularza głównego oraz plik zasobów projektu są to pliki binarne
zawierające opis formularza głównego i ikony aplikacji.

Po wydaniu polecenia kompilacji projektu, Delphi kompiluje plik źródłowy projektu,
moduł formularza głównego i wszystkie pozostałe moduły włączone do projektu. Proces
ten można podzielić na kilka etapów. W pierwszym etapie kompilator Object Pascala
kompiluje moduły do plików binarnych 

.OBJ

. Następnie kompilator zasobów kompiluje

wszystkie zasoby, m. in. ikonę programu i pliki formularzy, do postaci binarnych pli-
ków zasobów. W następnym etapie wkracza do akcji konsolidator („linker”). Łączy on
pliki binarne utworzone przez kompilator z potrzebnymi bibliotekami i generuje osta-
teczny plik wykonywalny, który może być uruchamiany przez użytkownika komputera.

Tabela 4.1 zawiera listę typów plików używanych przez Delphi wraz z opisem roli, jaką
każdy z nich odgrywa w procesie budowania aplikacji.

Oprócz powyższych, istnieją w Delphi także inne typy plików. Na przykład,
rozszerzenie 

.bpg

 oznacza grupę projektów, 

.dpk

  używane jest do ozna-

czenia pliku źródłowego pakietu, natomiast 

.bpl

 oznacza skompilowany

pakiet. Pakiety omówione są szerzej w rozdziale 8. „Tworzenie aplikacji”,
natomiast grupy projektów omówione są w rozdziale 9.

Wszystkie te typy plików można podzielić na dwie kategorie: pliki, które zawierają da-
ne wejściowe dla aplikacji oraz pliki, które tworzone są przez Delphi podczas różnych
etapów kompilacji. Gdybyś chciał przenieść pliki źródłowe aplikacji na inny komputer,
wystarczyłoby jedynie przenieść pliki zawierające dane wejściowe. Są one z reguły ob-
jętościowo mniejsze od tych drugich, więc ich archiwizacja na przykład na dysku nie
zajęłaby wiele miejsca.

Niezbędne są tylko pliki 

.pas

.dfm 

.dpr

. Wszystkie pozostałe zostaną odtworzone

podczas ponownej kompilacji. Oprócz tego, jeżeli chcesz zachować ustawienia obszaru
roboczego, musisz również zabezpieczyć plik 

.dsk

.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

133

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

133

Tabela 4.1. Typy plików używanych w Delphi

Rozszerzenie

Opis

.pas

Plik źródłowy modułu. Zawiera jego kod źródłowy (każdy moduł ma swój plik
źródłowy)

.dfm

Plik formularza. Jest to właściwie zakamuflowany binarny plik zasobów
(

.res

). Zawiera opis formularza i umieszczonych na nim komponentów.

Każdy formularz posiada swój własny plik 

.dfm

.dsk

Plik obszaru roboczego projektu. Zawiera on informacje na temat wyglądu
obszaru roboczego podczas ostatniego zachowywania lub zamykania projektu.
Zapisywane są w nim rozmiary i umiejscowienie wszystkich okien, dzięki
czemu projekt po ponownym otwarciu wygląda dokładnie tak, jak w momencie
zamykania. Plik ten jest tworzony tylko wtedy, gdy opcja zachowywania
obszaru roboczego jest włączona

.dof

Plik opcji projektu. Zawiera ustawienia wszystkich opcji z okna dialogowego

Project Options

.exe

Wynikowy program wykonywalny

.cfg

Plik konfiguracyjny projektu. Zawiera głównie ustawienia kompilatora
i konsolidatora

.dcu

Binarne pliki wynikowe kompilatora (skompilowane moduły)

.dpr

Plik źródłowy projektu

.res

Skompilowany binarny plik zasobów

Oprócz plików źródłowych, o których wspomniałem wcześniej, istnieją
także skrypty zasobów (mają one rozszerzenie 

.rc

). Są to pliki tekstowe

używane do definiowania takich zasobów jak bitmapy, ikony lub kursory.
Jeżeli używasz takich plików, zachowuj je razem z innymi plikami danych
wejściowych. Skrypty zasobów są raczej rzadko używane w Delphi.

Rysunek 4.2 obrazuje przebieg kompilacji i łączenia plików źródłowych do postaci fi-
nalnego programu wykonywalnego.

Jeżeli masz mało miejsca na dysku twardym, możesz skasować część pli-
ków z projektów, nad którymi akurat nie pracujesz. Można na przykład
usunąć pliki 

.dcu

. Delphi może je w każdej chwili odtworzyć.

Nie kasuj żadnych plików z katalogów, w których zainstalowałeś Delphi,
poza katalogiem 

EXAMPLES

. Pamiętaj o zdrowej zasadzie: Jeżeli masz jakieś

wątpliwości – nie kasuj.

background image

134

Część I

134

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.2.
Proces kompilacji
i łączenia

Pliki źródłowe modułów

Jak już wcześniej wspomniałem, każda aplikacja Delphi (z interfejsem graficznym) posiada

kilka plików źródłowych, nazywanych modułami. Za każdym razem, kiedy tworzysz

nowy formularz, Delphi wykonuje następujące kroki:

υ 

Tworzy plik formularza (

.dfm

)

υ 

Tworzy nową klasę – potomek klasy 

TForm

υ 

Tworzy plik źródłowy (

.pas

) zawierający definicję tej klasy

υ 

Dodaje informacje o nowym formularzu do pliku źródłowego projektu

Delphi nadaje nowo utworzonemu formularzowi domyślną nazwę 

Form1

, a plikowi źró-

dłowemu odpowiadającego mu modułu nadaje nazwę 

Unit1.pas

. Następny formularz

utworzony w projekcie będzie miał nazwę 

Form2

, itd. Dla każdego nowo utworzonego

formularza Delphi tworzy nową parę plików: 

.pas

 i 

.dfm

.

Zaraz po utworzeniu nowego projektu dobrze jest zapisać go na dysk na-
dając mu jakąś znaczącą nazwę. To samo odnosi się do każdego nowo
utworzonego formularza. Ułatwia to późniejszą ich lokalizację
i identyfikację. Sprawę ułatwia dodatkowo fakt, że moduły mogą mieć dłu-
gie nazwy.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

135

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

135

Pisząc tę książkę często staję przed następującym problemem: aby ułatwić
zrozumienie pewnych zagadnień, często muszę przytaczać odpowiednie
przykłady. W przykładach tych muszę czasami używać technik czy metod
jeszcze nie omawianych. Nie mogę jednak omówić tych metod nie dając
przedtem kilku odpowiednich przykładów. I koło się zamyka. Zamierzam
więc teraz zboczyć trochę z tematu i omówić menu główne, paski narzędzi i
paletę komponentów. To odejście od głównego wątku ma jednak swój cel.

Menu główne i paski narzędzi

Menu główne zawiera wszystkie opcje niezbędne do pracy. Ponieważ jednak progra-

mowanie w Delphi jest wysoce „wizualne", nie ma potrzeby używania menu tak często,

jak w innych środowiskach programistycznych. Jeżeli mimo to preferujesz używanie

menu głównego, znajdziesz tam wszystko, co potrzebne. Nie będę teraz  szczegółowo

omawiał wszystkich dostępnych opcji. Zetkniesz się z każdą z nich podczas lektury kilku

następnych rozdziałów.

Paski narzędzi zawierają bardzo wygodne skróty do często powtarzanych poleceń. Ła-

twiej odnaleźć przycisk na pasku niż jakąś głęboko ukrytą opcję w menu, nie mówiąc

już o tym, że wymaga to mniej ruchów myszą. Paski narzędzi Delphi pokazane są na

rysunku 4.3 (Paleta Komponentów została usunięta dla zwiększenia przejrzystości).

Rysunek 4.3.
Paski narzędzi

Mnie często zdarza się zapominać o istnieniu tych pasków mimo, że są one naprawdę

użyteczne. Stare przysłowie mówi: „Rób tak, jak mówię, a nie tak, jak robię”. Jeżeli teraz

poświęcisz trochę czasu na naukę korzystania z pasków, pozwolą Ci one zaoszczędzić

mnóstwo czasu w przyszłości. Kupiłeś przecież Delphi między innymi po to, żeby pisać

aplikacje Windows naprawdę szybko.

Paski narzędzi można dostosować do swoich upodobań. Można je umieścić w dowolnym

miejscu w oknie głównym Delphi, podobnie jak menu główne i Paletę Komponentów.

Można bardzo łatwo dodawać, usuwać i zmieniać kolejność przycisków na pasku na-

rzędzi. W tym celu należy umieścić kursor na pasku i nacisnąć lewy klawisz myszy.

Z menu  kontekstowego  należy wybrać opcję 

Customize

 (dostosuj). Po wybraniu tej

opcji otworzy się okno dialogowe.

background image

136

Część I

136

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.4.
Dostosowywanie
pasków narzędzi

 Okno dialogowe 

Customize

 posiada trzy karty:

υ 

Na pierwszej karcie, 

Toolbars

, widać listę dostępnych pasków narzędzi z za-

znaczonymi wyświetlonymi paskami. Można je dodawać i usuwać z listy,
a także przywrócić ich domyślne ustawienia.

υ 

Druga karta – 

Commands –

 zawiera wszystkie dostępne przyciski. Żeby umie-

ścić przycisk na pasku narzędzi, wystarczy przeciągnąć go na odpowiednie
miejsce. Żeby zaś usunąć przycisk z paska, należy go chwycić i upuścić poza
obszarem paska. Na rysunku 4.4 widać umieszczanie przycisku na pasku narzędzi.
Jeżeli za mocno sobie namieszasz w tych wszystkich paskach, wystarczy na
karcie 

Toolbars

 użyć przycisku 

Reset

. Paski narzędzi powrócą wtedy do swej

domyślnej postaci.

υ 

Na trzeciej karcie – 

Options

 – można włączać i konfigurować podpowiedzi

pojawiające się po umieszczeniu kursora nad przyciskiem.

IDE istnieje po to, żeby ułatwiać Ci życie, więc skonfiguruj je sobie stosownie do potrzeb.

Używanie Palety Komponentów

Paleta Komponentów służy do wybierania komponentów albo innych kontrolek (na

przykład kontrolek ActiveX)w celu umieszczenia ich na formularzu. Paleta ta składa się

z wielu kart. Kliknięcie na odpowiedniej zakładce powoduje otwarcie odpowiadającej

jej karty.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

137

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

137

Proces umieszczania komponentu na formularzu składa się z dwóch kroków. Pierw-
szym krokiem jest wybranie odpowiedniego komponentu, drugim zaś jest umieszczenie
tego komponentu na formularzu (przy pomocy myszy).

W podstawowym zakresie używałeś Palety Komponentów już wcześniej. Niżej opiszę
jej bardziej zaawansowane możliwości.

Umieszczanie wielu kopii danego komponentu
na formularzu

Do tej pory umieszczałeś na formularzu komponenty wybierając je z Palety, a następnie
przenosząc je w miejsce umieszczenia. Wiele komponentów tego samego typu można
umieszczać na formularzu bez konieczności każdorazowego wybierania go z palety.
Aby to zrobić, należy podczas wybierania komponentu na palecie nacisnąć klawisz
Shift (po wybraniu komponentu można puścić ten klawisz).

Przycisk wybranego komponentu na palecie będzie wciśnięty i będzie miał niebieską
ramkę. Kliknij teraz na formularzu. Pokaże się na nim wybrany komponent. Zwróć
uwagę,  że przycisk na formularzu jest nadal wciśnięty. Możesz teraz pojedynczymi
kliknięciami myszy dodawać nowe komponenty. Żeby wyłączyć tę funkcję, trzeba nacisnąć
na palecie komponentów przycisk ze strzałką (narzędzie wybierania komponentów).
Przycisk komponentu zostanie zwolniony.

Przekonaj się sam, jak to działa. Wykonaj następujące czynności:

 

1. 

Utwórz nowy projekt.

 

2. 

Naciśnij i przytrzymaj klawisz Shift. Jednocześnie kliknij na komponencie 

Label

na Palecie Komponentów.

 

3. 

Trzykrotnie kliknij na formularzu, zmieniając za każdym razem położenie kursora.
Przy każdym kliknięciu na formularzu umieszczona zostaje nowa etykieta.

 

4. 

Kliknij na przycisku ze strzałką, aby zakończyć ten proces i powrócić do trybu
projektowania formularza.

Najszybciej rozmieszcza się komponenty na formularzu stosując właśnie tę
technikę. Zawsze potem będzie je można poustawiać i dopasować.

Często zdarza się zapomnieć o naciśnięciu przycisku za strzałką po zakoń-
czeniu rozmieszczania komponentów. Jeżeli przypadkowo umieścisz na
formularzu więcej komponentów niż zamierzałeś, zawsze możesz skasować
te niepotrzebne.

background image

138

Część I

138

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Umieszczanie komponentów na środku formularza

Kolejną sztuczką wykorzystywaną przy projektowaniu formularza jest podwójne klik-
nięcie na komponencie w Palecie. Komponent ten zostanie wtedy automatycznie
umieszczony na środku formularza. Można go będzie oczywiście przesunąć na odpo-
wiednie miejsce.

Jeżeli kilkakrotnie klikniesz podwójnie na danym komponencie  w Palecie,
w centrum formularza umieszczonych zostanie kilka jego kopii, jeden na
drugim, Będą one wszystkie miały domyślny rozmiar, więc czasami mo-
żesz sobie nie zdawać sprawy, że pod widocznym komponentem kryją się
następne. Jeżeli zdarzy Ci się taka sytuacja, po prostu skasuj niepotrzebne
kopie.

Menu kontekstowe palety komponentów

Jeżeli umieścisz kursor na palecie komponentów i naciśniesz prawy klawisz myszy,
otworzy się menu kontekstowe Palety Komponentów (patrz rysunek 4.5).

Rysunek 4.5.
Menu kontekstowe
palety komponentów

Opcja 

Show Hints

 włącza i wyłącza podpowiedzi pojawiające się po zatrzymaniu kursora

nad poszczególnymi komponentami w Palecie. Powinna ona być  włączona, chyba że
naprawdę przeszkadzają Ci te podpowiedzi. Opcja 

Hide

 ukrywa Paletę Komponentów

(powoduje, że staje się ona niewidoczna). Żeby pokazać ponownie Paletę Komponentów,
należy wybrać opcję 

Component Palette

 z menu kontekstowego pasków narzędzi.

Wybranie opcji 

Help

 z menu kontekstowego Palety Komponentów wyświetla na ekra-

nie pomoc Delphi na temat tej palety. Opcja 

Properties

 (właściwości) wywołuje okno

dialogowe, w którym można zmieniać ustawienia Palety. Można tam dodawać i usuwać
poszczególne karty palety komponentów, można także zmieniać uporządkowanie kom-
ponentów na poszczególnych kartach. Szczegółowo zajmiemy się tymi ustawieniami
w rozdziale 11. „Narzędzia i opcje Delphi”, którego tematem będą m. in. poszczególne
ustawienia środowiska.

Poruszanie się po Palecie Komponentów

Jeżeli paleta komponentów jest tak skonfigurowana, że nie widać na ekranie wszystkich
jej zakładek, można dostać się do tych niewidocznych przy pomocy przycisków prze-

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

139

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

139

wijania umiejscowionych w prawym górnym rogu palety. Tak samo jest w przypadku
poszczególnych kart – jeżeli komponenty nie mieszczą się na ekranie, kliknięcie na
przyciskach przewijania (są to małe trójkąty widoczne blisko krawędzi palety) powoduje
przewinięcie karty i wyświetlenie komponentów dotychczas niewidocznych. Rysunek 4.6
pokazuje paletę komponentów z widocznymi dwoma typami przycisków przewijania.

Rysunek 4.6.
Przyciski
przewijania palety
komponentów

Korzystanie z Palety Komponentów nie jest wcale skomplikowane, a jej opanowanie
jest niezbędne przy programowaniu w Delphi. Teraz, kiedy mamy już za sobą ten krótki
przegląd głównego okna Delphi, możemy wrócić do głównego tematu tego rozdziału.

Aplikacja składająca się
z wielu formularzy

Żeby zilustrować, w jaki sposób właściwie Delphi używa modułów, stwórzmy aplikację
posiadającą więcej niż jeden formularz. Aplikacja ta będzie wyświetlać dodatkowy
formularz po naciśnięciu przycisku na formularzu głównym:

 

1. 

Utwórz nowy projekt wybierając opcję 

File | New Application

 z głównego

menu.

 

2. 

Zmień właściwość 

Name

 formularza głównego na 

MainForm

, a właściwość 

Caption

tego formularza na 

Program testowy wielu formularzy

.

 

3. 

Zachowaj projekt. Zachowaj moduł jako 

Main

, a projekt jako 

Multiple

.

 

4. 

Umieść przycisk na formularzu. Właściwość 

Name

 tego przycisku ustaw na

ShowForm2

, a właściwość 

Caption

 na 

Pokaż drugi

.

 

5. 

Wybierz z głównego menu 

File | New Form

 (albo naciśnij przycisk 

New Form

 na

pasku narzędzi). Nowo utworzony formularz posiada nazwę 

Form1

 i umieszczony

jest dokładnie na formularzu głównym. Zmienimy jego rozmiar tak, żeby był
trochę mniejszy od formularza głównego i znajdował się mniej więcej w jego
środku.

 

6. 

Ustaw rozmiar nowego formularza tak, żeby zajmował on mniej więcej połowę
obszaru formularza głównego i ustaw go na jego środku.

background image

140

Część I

140

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

 

7. 

Zmień  właściwość 

Name

 nowego formularza na 

SecondForm

, a właściwość

Caption

 zmień na 

Drugi formularz

.

 

8. 

Wybierz 

File | Save

 z menu głównego (albo kliknij przycisk 

Save File

 na

pasku narzędzi) i zachowaj ten nowy formularz pod nazwą 

SecondForm

.

 

9. 

Umieść na formularzu 

SecondForm

 komponent 

Label

. Ustaw właściwość 

Caption

tej etykiety na 

To jest Drugi formularz

. Rozmiar i kolor etykiety ustaw według

własnego uznania. Wyśrodkuj tę etykietę na formularzu. Formularz powinien
teraz wyglądać mniej więcej jak na rysunku 4.7.

Rysunek 4.7.
Wygląd drugiego
formularza

 

10. 

Kliknij na głównym formularzu. Wysunie się on na pierwszy plan przykrywając
drugi formularz. Kliknij podwójnie na przycisku 

Pokaż drugi

. Otworzy się

Edytor Kodu z kursorem umieszczonym w procedurze obsługi zdarzenia 

OnClick

tego przycisku.

 

11. 

Zmodyfikuj procedurę 

TMainForm.ShowForm2Click

 tak, żeby wyglądała ona

następująco:

procedure TMainForm.ShowForm2Click(Sender: TObject);
begin
  SecondForm.ShowModal;
end;

 

12. 

Uruchom program.

Po uruchomieniu programu na ekranie zostanie wyświetlony komunikat: 

Form 'FormG-

lowny' references form 'DrugiFormularz' declared in unit 'Drugi' which is

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

141

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

141

not in your USES list. Do you wish to add it?

 Kliknij „Tak”. Delphi doda moduł

Second

 do listy 

uses

 modułu 

Main

. Uruchom program ponownie, tym razem powinien

uruchomić się bez problemu. Jeżeli klikniesz teraz na przycisku 

Pokaż drugi

, drugi

formularz zostanie wyświetlony na ekranie. Można go będzie zamknąć klikając na ikonie
systemowej umieszczonej w prawym górnym rogu formularza.

Dodawanie modułów

Zamiast pozostawiać Delphi obowiązek dodawania odpowiednich modułów do listy

uses

, lepiej robić to samemu. Można wpisać wprost w Edytorze Kodu nazwę modułu

do listy 

uses

, albo można użyć opcji 

File | Use Unit

 z głównego menu. W tym dru-

gim przypadku zostanie wyświetlone okno dialogowe 

Use Unit

 (pokazane na rysunku

4.8). Okno to pokazuje listę dostępnych modułów. Aby dodać moduł do listy 

uses

, na-

leży wybrać go z listy (kliknąć na jego nazwie) i kliknąć OK. Delphi doda nazwę tego
modułu do listy 

uses

 bieżącego formularza. Zwróć uwagę, że lista dostępnych modu-

łów zawiera tylko te, które istnieją w bieżącym projekcie i nie zostały jeszcze dodane
do listy 

uses

. Modułów, które wcześniej zostały wpisane na listę 

uses

, nie ma w oknie

Use Unit

.

Rysunek 4.8.
Okno dialogowe
Use Unit

Jak widzisz, Delphi jest bardzo pomocne w zarządzaniu modułami. Później, kiedy
Twoje potrzeby w tym względzie staną się znacznie większe, będziesz musiał robić
własnoręcznie trochę więcej, ale na etapie, na którym jesteś obecnie, Delphi robi prawie
wszystko za Ciebie.

Spójrzmy teraz na dostępne opcje dotyczące kompilacji dostępne w czasie pisania pro-
gramów.

Kompilowanie, budowanie i łączenie

Po każdym naciśnięciu przycisku 

Run

, Delphi kompiluje i łączy Twoją aplikację. Nie

musi jednak kompilować wszystkich modułów w projekcie. Kompiluje tylko te, które
zmieniły się od czasu ostatniej kompilacji. Oszczędza to sporo czasu, gdyż nie jest on
niepotrzebnie tracony na kompilowanie w kółko tego samego. Określanie, czy dany
moduł zmienił się od ostatniej kompilacji, czy nie, odbywa się całkowicie automatycznie.

background image

142

Część I

142

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Z reguły w czasie pisania programu wprowadzasz jakieś poprawki i chcesz na bieżąco
sprawdzać ich efekt. Naciskasz wtedy przycisk 

Run

 i program jest kompilowany, łączo-

ny i wykonywany. Czasami jednak nie chcesz uruchamiać programu. Na przykład,
chcesz tylko sprawdzić, czy w kodzie źródłowym nie ma błędów składniowych.

Oprócz opcji 

Run

 Delphi posiada jeszcze trzy dodatkowe opcje, które pozwalają Ci

kontrolować proces kompilacji i łączenia. Jeżeli wybierzesz z menu głównego opcję

Project

, otworzy się podmenu zawierające trzy wyżej wspomniane opcje: 

Compile

(kompiluj), 

Build

 (odbuduj) i 

Syntax Check

 (sprawdź składnię). Opcje te są uzupełnione

nazwą bieżącego projektu – przykładowo, zaraz po uruchomieniu Delphi opcje te będą
brzmieć: 

Compile Project1

Build Project1

 i 

Syntax Check Project1

. Są tam także

opcje 

Compile All Projects

 (kompiluj wszystkie projekty) i 

Build All Projects

(odbuduj wszystkie projekty), jednak omówię je dopiero w rozdziale 9 przy okazji
omawiania grup projektów.

Rozważmy te opcje po kolei od najprostszej do najbardziej skomplikowanej (z punktu
widzenia kompilatora).

υ 

Opcja 

Syntax Check

 jest bardzo wygodna. Po jej wybraniu następuje kompilacja

projektu i wypisanie wszystkich błędów i ostrzeżeń. Jest to najszybszy sposób
na sprawdzenie, czy w kodzie nie występują  błędy składniowe. Delphi tylko
kompiluje projekt – nie przeprowadza łączenia – opcja ta działa dzięki temu
bardzo szybko.

υ 

Opcja 

Compile

 kompiluje te moduły, których zawartość zmieniła się od czasu

ostatniej kompilacji (tak jak robi to 

Syntax Check

), a także przeprowadza łą-

czenie całego projektu – dlatego trwa to trochę dłużej niż sprawdzenie składni.
Opcji 

Compile

 używa się, żeby mieć pewność, że cały projekt prawidłowo się

skompiluje i skonsoliduje (nie następuje tu uruchamianie programu).

Skrót klawiaturowy opcji 

Compile

 to 

Ctrl+F9

.

υ 

Opcja 

Build

 wykonuje się najdłużej. Uruchomienie jej powoduje kompilację

każdego modułu źródłowego w projekcie, niezależnie od tego, czy jego zawartość
zmieniła się od czasu ostatniej kompilacji, czy też nie. Po skompilowaniu cało-
ści, przeprowadzane jest łączenie całego projektu.

Do tej pory pozwalałeś Delphi dodawać moduły do swojego projektu. W miarę jak będziesz
stawał się coraz bardziej zaawansowanym użytkownikiem Delphi, będziesz pewnie
edytować własnoręcznie pliki źródłowe, np. żeby dodać jakieś dyrektywy kompilatora.
Może nawet będziesz ingerować w główny plik źródłowy projektu. Może się wówczas
zdarzyć (wszyscy w końcu popełniamy błędy), że za którymś razem projekt nie będzie
chciał się skompilować. Przeprowadzenie odbudowywania aplikacji sprawi, że wszystkie
pliki zostaną uaktualnione, co może ułatwić zlokalizowanie problemu. Czasami samo
wykonanie tej czynności naprawia błędy zgłaszane przez kompilator i konsolidator.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

143

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

143

Za każdym razem, kiedy kompilator będzie zgłaszał jakieś nieoczekiwane
błędy, spróbuj najpierw uruchomić opcję 

Build

. Wystarczy czasami, że ja-

kiś plik zostanie uaktualniony, i problem znika. Jeżeli jednak ta operacja
nie pomaga, jedynym wyjściem jest wówczas analiza kodu i „ręczne” loka-
lizowanie błędu.

Delphi umożliwia obserwację na bieżąco postępów kompilacji w specjalnym oknie (jego
wyświetlanie można włączyć poprzez 

Tools | Environment Options

 – karta 

Preferences

– opcja 

Show compiler progress

). Okno statusu kompilacji wyświetla nazwę każdego

aktualnie kompilowanego modułu. Jeżeli podczas kompilacji wystąpiły jakieś  błędy,
widoczny będzie komunikat 

There are errors

 wraz z podaną liczbą błędów i ostrzeżeń.

Na rysunku 4.9 pokazane jest okno statusu kompilacji po wykryciu błędów. Delphi
kompiluje projekty tak szybko, że okno to nie jest właściwie potrzebne. Włączenie tego
okna powoduje tylko wydłużenie czasu kompilacji ze względu na konieczność wyświetlania
informacji na ekranie.

Rysunek 4.9.
Okno statusu
kompilacji

Bez względu na wybraną metodę kompilacji (

Compile

Build

 czy 

Syntax Check

), jeżeli

zostały wykryte jakieś błędy, otworzy się Edytor Kodu wraz z oknem 

Message

, w którym

wyświetlona będzie lista błędów i ostrzeżeń. Linia kodu zawierająca pierwszy błąd będzie
podświetlona.

Kompilacja innych rodzajów programów w
Object Pascalu

Cała siła Delphi leży w jego wizualnym środowisku programowania. Jest to środowisko
ściśle i nierozdzielnie związane z biblioteką VCL. W Delphi pisze się głównie programy
oparte właśnie na VCL. Oprócz tego jednak za pomocą Delphi można tworzyć także inne
typy programów.

Biblioteka dołączana dynamicznie (ang. dynamic link library – DLL) jest
plikiem zawierającym kod binarny, który może być wywoływany (urucha-

background image

144

Część I

144

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

miany) z poziomu aplikacji lub innej biblioteki DLL.

Najprawdopodobniej tym „innym” typem programu, który mógłbyś chcieć napisać, by-
łaby właśnie biblioteka DLL. Nazwa ta brzmi bardzo tajemniczo, ale w istocie rzeczy
nie jest to zagadnienie bardzo skomplikowane: jest to po prostu skompilowany kod, który
można wywoływać z poziomu innego programu. Po stworzeniu biblioteki DLL, wy-
wołanie funkcji w niej zawartej niczym się nie różni od zwykłego wywołania funkcji.
Tak to wygląda w uproszczeniu. Biblioteki DLL omówione są ze szczegółami w rozdziale
19. „Tworzenie i używanie bibliotek DLL”

Innym typem aplikacji, które można tworzyć w Delphi, są aplikacje konsoli Win32.

Aplikacja konsoli jest 32-bitowym programem uruchamianym w oknie
MS-DOS systemu Windows 95 albo Windows NT.

Aplikacjami konsoli są zwykle niewielkie programy narzędziowe, serwery (np. TCP/IP
albo mail) itp. Każdy program, który nie wymaga graficznego interfejsu użytkownika,
jest dobrym kandydatem na aplikację konsoli.

Więcej o formularzach Delphi

Muszę w tym miejscu przerwać na chwilę omawianie IDE i zająć się formularzami.
Widziałeś już do tej pory kilka formularzy w akcji, a w rozdziale 6 poznasz dokładnie
Projektanta Formularzy. Zanim jednak do tego dotrzesz, chcę Ci przekazać trochę do-
datkowych informacji na ten temat.

Formularze okna głównego

Formularze są głównym elementem składowym aplikacji Delphi. Każda aplikacja GUI
posiada przynajmniej jeden formularz, który jest jednocześnie oknem głównym tej apli-
kacji. Formularz okna głównego (zwany po prostu „formularzem głównym”) może być
po prostu pusty, może zawierać jakieś kontrolki, lub może na nim być wyświetlona mapa
bitowa. Typowe okno główne programu w Windows posiada menu. Może oprócz tego
posiadać takie elementy jak pasek narzędzi czy pasek statusu. W oknie głównym spotyka
się najróżniejsze elementy, zgodnie z charakterem i potrzebami danej aplikacji.

Formularze okien dialogowych

Innym rodzajem formularzy są okna dialogowe. Użytkownik nie widzi żadnej różnicy
między formularzem Delphi wyświetlonym w charakterze okna dialogowego i praw-
dziwym oknem dialogowym (Przez „prawdziwe okno dialogowe” rozumiem tutaj okno

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

145

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

145

utworzone w tradycyjny sposób za pomocą edytora zasobów i skryptu zasobów. Tak
właśnie okna dialogowe są tworzone w innych środowiskach programowania. Delphi
nie używa tradycyjnych okien dialogowych, nie będziesz musiał prawdopodobnie mieć
do czynienia z oknami dialogowymi na tym poziomie). Okna dialogowe posiadają kilka
cech, które odróżniają je od zwykłych okien:

υ 

Okna dialogowe mają stałe wymiary. Nie można zmieniać ich rozmiaru. Mają
one do spełnienia  ściśle określoną funkcję, więc zmienianie ich rozmiaru nie
jest potrzebne, a czasem nawet jest szkodliwe.

υ 

Okna dialogowe prawie zawsze posiadają przycisk OK. Niektóre posiadają
przycisk 

Close

 (lub 

Zamknij

), który spełnia tę samą funkcję. Najprostsze okna

dialogowe (np. typu 

About

), posiadają tylko przycisk OK.

υ 

Okna dialogowe mogą także posiadać przycisk 

Cancel

 (lub 

Anuluj

) i Help (lub

Pomoc

).

υ 

Na pasku tytułowym okna dialogowego jest zwykle tylko jeden systemowy
przycisk (Zamknij). Nie posiadają one przycisków Minimalizuj i Maksymalizuj.

υ 

Niektóre okna dialogowe zawierają kilka kart z zakładkami. Po kliknięciu na
danej zakładce otwiera się skojarzona z nią karta.

υ 

W większości okien dialogowych do przemieszczania się pomiędzy kontrolkami
można używać klawisza 

Tab

.

Jak zwykle, od każdej reguły są jakieś wyjątki. Przeważająca większość okien dialogowych
ma podobny charakter, ale zdarzają się też bardzo specyficzne okna służące do specy-
ficznych celów.

Tradycyjne okna dialogowe

W programach dla Windows pisanych w Borland Pascalu albo z użyciem bibliotek ta-
kich jak OWL, okna dialogowe tworzyło się za pomocą edytora okien dialogowych.
Edytory okien dialogowych w większości przypadków są narzędziami wizualnymi
działającymi podobnie jak Projektant Formularzy Delphi. Po zakończeniu projektowania
okna dialogowego, reprezentacja graficzna okna była konwertowana na definicję tego
okna w pliku skryptowym zasobów. Jako przykład okna dialogowego może posłużyć
okno przedstawione na rysunku 4.10.

Plik skryptowy zasobów jest to plik tekstowy kompilowany przez kompi-
lator zasobów do postaci binarnego pliku zasobów.

Na rysunku 4.10 widać typowe okno dialogowe 

About

. Zawiera ono nazwę programu

i informację o prawach autorskich. Plik skryptowy dla tego okna przedstawiony jest na
listingu 4.1

background image

146

Część I

146

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.10.
Typowe okno
dialogowe About

Listing 4.1. Skrypt okna dialogowego

  1: 

IDD_ABOUT DIALOG 58,53,194,119

  2: 

STYLE DS._MODALFRAME or WS_POPUP |

  3: 

  WS_VISIBLE or WS_CAPTION or WS_SYSMENU

  4: 

CAPTION 'O programie'

  5: 

FONT 8, 'MS Sans Serif'

  6: 

{

  7: 

DEFPUSHBUTTON 'OK.', IDOK, 72, 96, 50, 14

  8: 

CTEXT 'AudioVideo Player', -1, 48, 22, 128, 8

  9: 

CTEXT 'Copyright © 1996 by NewSoftware', -1, 32, 47, 136, 8

 10: 

CTEXT 'March 15, 1996', -1, 24, 59, 146, 8

 11: 

CONTROL '', 99, 'button', BS_GROUPBOX |

 12: 

  WS_CHILD or WS_VISIBLE or WS_GROUP, 12, 4, 176, 70

 13: 

}

Skrypt zasobów zawiera informacje potrzebne do utworzenia okna dialogowego w czasie
wykonywania programu. Jest tam podana liczba i typ kontrolek, ich rozmiar, rozmiesz-
czenie, atrybuty itd.

Niektórzy programiści w ogóle nie używają edytora dialogów. Wolą za to ręcznie pisać
skrypty w edytorze tekstowym. Nie można co prawda im tego zabronić, ale trzeba
powiedzieć, że wydajność takiego sposobu pracy jest dużo mniejsza w porównaniu z pro-
jektowaniem graficznym.

Zazwyczaj wszystkie zdefiniowane okna dialogowe aplikacji zawarte są w pojedyn-
czym pliku skryptowym z rozszerzeniem 

.rc

. Na określonym etapie tworzenia aplikacji

skrypty te są kompilowane do plików binarnych z rozszerzeniem 

.res

, które później są

przez linker włączane do programu wykonywalnego. W czasie wykonywania programu
okno to jest wyświetlane jako modalne lub nie w zależności od jego przeznaczenia.
Kiedy okno jest wywoływane, Windows ładuje do pamięci odpowiedni zasób z pliku
wykonywalnego, generuje okno i wyświetla je na ekranie.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

147

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

147

Okna dialogowe Delphi

W Delphi, okna dialogowe są po prostu formularzami. Tworzy się je tak samo jak okno
główne lub każde inne. Aby uniemożliwić użytkownikowi zmianę rozmiarów okna, je-
go właściwość 

BorderStyle

 ustawia się na 

bsDialog

 albo 

bsSingle

. Jeżeli ustawi się tę

właściwość na 

bsDialog

, okno dialogowe będzie posiadało tylko jeden przycisk syste-

mowy (

Close

) na pasku tytułowym, co jest cechą charakteryzującą tradycyjne okna

dialogowe. Oprócz tego nie trzeba robić nic więcej, żeby formularz zachowywał się jak
okno dialogowe. Wszystkie formularze Delphi mają wbudowany mechanizm prze-
mieszczania się pomiędzy kontrolkami za pomocą klawisza Tab. Kolejność, w jakiej
określone komponenty są zaznaczane, można określić w ich właściwości 

TabOrder

.

Modalne okno dialogowe musi być zamknięte dla umożliwienia dalszego
korzystania z aplikacji. Okno główne aplikacji jest nieaktywne, dopóki
otwarte jest modalne okno dialogowe. Większość okien dialogowych sta-
nowią okna modalne.

Niemodalne okno dialogowe pozwala użytkownikowi korzystać z aplikacji w
czasie, gdy jest ono wyświetlone na ekranie. Przykładem takiego okna jest
okno dialogowe 

Find

 (lub 

Znajdź

) występujące np. w edytorach tekstu.

Każde okno dialogowe Delphi (właściwiej: każdy formularz) jest albo modalne, albo
nie, w zależności od tego, w jaki sposób zostało wyświetlone. Aby wyświetlić modalne
okno dialogowe, wywołuje się metodę 

ShowModal

 obiektu 

TForm

. Do wyświetlenia nie-

modalnego okna dialogowego służy metoda 

Show

.

Tworzenie formularza okna dialogowego

Dodajmy teraz okno dialogowe 

About

 („O programie”) do aplikacji składającej się z dwóch

formularzy, nad którą pracowaliśmy wcześniej. Jeżeli nie masz tego projektu otwartego,
wybierz z menu opcję 

File | Open Project

 albo kliknij na przycisku 

Open Project

na pasku narzędzi i otwórz ten projekt (zachowałeś go wcześniej pod nazwą 

Multiple

).

Delphi przechowuje listę ostatnio otwieranych plików i projektów. Jest ona do-
stępna po wybraniu opcji 

File | Reopen

. Lista ta jest podzielona na dwie

części. Górna część zawiera ostatnio otwierane projekty, natomiast dolna –
ostatnio otwierane pojedyncze pliki. Żeby otworzyć ostatnio używany pro-
jekt, wystarczy kliknąć na odpowiedniej pozycji listy.

Najpierw dodaj przycisk na formularzu głównym, którego kliknięcie spowoduje wy-
świetlenie okna „O programie”:

 

1. 

Wyświetl główny formularz. Na palecie komponentów wybierz 

Button

 i umieść

go na formularzu.

background image

148

Część I

148

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

 

2. 

Wyrównaj dwa znajdujące się obecnie na formularzu przyciski.

 

3. 

Zmień  właściwość 

Name

 nowego przycisku na 

AboutButton

, a właściwość

Caption

 zmień na 

O programie

.

 

4. 

Kliknij podwójnie na przycisku 

AboutButton

. Otworzy się Edytor Kodu.

W miejscu, gdzie umieszczony jest kursor, wpisz:

AboutBox.ShowModal;

Nie stworzyłeś na razie jeszcze faktycznie tego formularza, ale gdy to zrobisz, nazwiesz
go 

AboutBox

.

Zbuduj teraz to okno dialogowe wykonując następujące kroki:

 

1. 

Utwórz nowy formularz (kliknij przycisk 

New Form

 na pasku narzędzi). Zmień

wielkość tego okienka do rozmiaru typowego okna „O programie” (mniej więcej
na wielkość formularza 

SecondForm

 stworzonego wcześniej).

 

2. 

Zmień właściwość 

Name

 tego formularza na 

AboutBox

 i jego właściwość 

Caption

na 

O programie

.

 

3. 

Znajdź w Inspektorze Obiektów właściwość 

BorderStyle

 (powyżej właściwości

Caption

) i zmień ją na 

bsDialog

.

 

4. 

Umieść na formularzu 3 etykiety. Ustaw je i zmień umieszczony w nich tekst
tak, żeby okno 

O programie

 przypominało to przedstawione na rysunku 4.11

(możesz oczywiście wpisać dowolny tekst). Nazwy etykiet możesz pozostawić
domyślne. Nie będą one do niczego potrzebne, więc nie muszą być opisowe.

Rysunek 4.11.
Formularz
„O programie”
z umieszczonymi
etykietami

 Następnie umieść na formularzu ikonę:

 

1. 

Kliknij zakładkę 

Additional

 na palecie komponentów i wybierz z niej kom-

ponent 

Image

. Umieść go na formularzu po lewej stronie napisów.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

149

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

149

Znak Copyright (©) ma w większości czcionek kod ASCII wynoszący 169.
Aby wprowadzić ten symbol z klawiatury, na klawiaturze numerycznej
wpisz liczbę 0169 trzymając jednocześnie naciśnięty klawisz 

Alt

 (upewnij

się wcześniej, że 

NumLock

 jest włączony). Kiedy zwolnisz klawisz 

Alt

, na

ekranie powinien pojawić się symbol ©. W ten sposób można wprowadzać
kody ASCII wszystkich znaków (trzeba zawsze wpisywać wszystkie cztery
znaki – razem z wiodącymi zerami). Na przykład,  żeby wpisać literę A,
trzeba nacisnąć klawisz 

Alt

, wpisać z klawiatury numerycznej liczbę 0065

i zwolnić klawisz 

Alt

.

 

2. 

Zmień  właściwość 

AutoSize

 dopiero co umieszczonego komponentu 

Image

 na

True

.

 

3. 

Znajdź właściwość 

Picture

 i kliknij na przycisku z trzema kropkami. Otworzy

się okno dialogowe 

Picture Editor

.

 

4. 

Kliknij przycisk 

Load

. Otworzy się okno dialogowe 

File Open

. Znajdź folder

Borland\Shared Files\Images\Icons 

i wybierz jakąś ikonę z listy. Ikona,

którą wybrałeś, zostanie wyświetlona w oknie 

Picture Editor

. Kliknij OK,

aby zamknąć okno 

Picture Editor

. Wybrana ikona zostanie wyświetlona na

formularzu. Zauważ, że rozmiar komponentu 

Image

 dostosował się automatycznie

do wyświetlanej na nim ikony.

 

5. 

Ustaw ikonę w odpowiednim miejscu na formularzu.

W oknie dialogowym „O programie” potrzebny jest także przycisk OK.:

 

1. 

Kliknij zakładkę 

Additional

 na palecie komponentów. Wybierz z tej karty

komponent 

BitBtn

 i umieść go na środku na dole formularza.

 

2. 

Właściwość 

Kind

 komponentu 

BitBtn

 ustaw na 

bkOK

. Zauważ, że na przycisku

pojawił się zielony „ptaszek”, a jego właściwość 

Caption

 zmieniła się na OK.

To już wszystko, co trzeba zrobić z tym przyciskiem. Komponent 

BitBtn

 zawiera

już kod zamykający formularz przy naciśnięciu przycisku OK.

Teraz pozostała już tylko kosmetyka, jeżeli chodzi o okno 

O programie

:

 

1. 

Zlokalizuj komponent 

Bevel

 na karcie 

Additional

 palety komponentów

i kliknij na nim.

 

2. 

Umieść go na formularzu, lecz nie poprzez kliknięcie, ale obrysowując myszą

kształt obejmujący umieszczone wcześniej napisy. Po zakończeniu rysowania

ukaże się na formularzu komponent 

Bevel

.  Możesz go teraz dokładnie ustawić

i dopasować w miarę potrzeby.

 

3. 

Właściwość 

Shape

 komponentu 

Bevel

 ustaw na 

bsFrame

. Masz teraz trójwy-

miarową ramkę obejmującą napisy.

Formularz powinien teraz wyglądać mniej więcej tak, jak na rysunku 4.12. Zachowaj
bieżący moduł (

File | Save

) pod nazwą 

About

.

background image

150

Część I

150

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.12.
Ukończony
formularz
„O programie”

Czy można już uruchomić ten program? Jeszcze nie. Trzeba dodać moduł 

OProgramie

do listy 

uses

 formularza głównego. Wykonaj w tym celu następujące czynności:

 

1. 

Przełącz się do Edytora Kodu (naciśnij 

F12

) i wybierz zakładkę 

Main

.

 

2. 

Wybierz z menu 

File | Use Unit

.

 

3. 

Wybierz z listy moduł 

About

 i kliknij OK.

Teraz program jest już gotowy. Naciśnij przycisk 

Run

. W oknie głównym aplikacji kliknij

przycisk 

O programie

. Winieta programu zostanie wyświetlona. Zauważ, że wyświetlone

okno dialogowe jest modalne (nie można przełączyć się do okna głównego aplikacji,

dopóki okno to jest wyświetlone). Nie można też zmienić jego rozmiaru. Zachowuje się

więc tak, jak przystało na okno dialogowe Windows.

Często używane klasy okien dialogowych (

TOpenDialog

TSaveDialog

,

TFontDialog

 itp.) nie są zwykłymi formularzami Delphi. Bazują one na

oknach dialogowych będących częścią Windows (zawartych w pliku

COMDLG32.DLL

). Klasy VCL reprezentujące te właśnie okna dialogowe są

„oprawą” dla okien systemowych, oferując użytkownikowi dużo większą
wygodę obsługi.

Delphi zawiera kilka predefiniowanych formularzy, które można wykorzy-
stywać jako bazę do szybkiego projektowania swoich własnych okien dia-
logowych. Będą one omówione w rozdziale 8.

Okna drugorzędne a okna dialogowe

Okno drugorzędne jest to okno wywołane z poziomu okna głównego. Czy można więc

określić, kiedy formularz jest oknem drugorzędnym, a kiedy oknem dialogowym? Otóż

w Delphi nie ma właściwie pomiędzy nimi żadnej różnicy. Wszystkie okna są po prostu

formularzami i nie ma większego sensu klasyfikować je na okna drugorzędne i okna

dialogowe.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

151

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

151

W tradycyjnych środowiskach programowania, trzeba było oddzielnie tworzyć okna
dialogowe i oddzielnie okna drugorzędne. Delphi uwalnia programistę od tego ograni-
czenia i umożliwia traktowanie wszystkich okien jednakowo.

Model aplikacji wielodokumentowej

Jak dotąd, budowaliśmy jedynie aplikacje jednodokumentowe (SDI – Single Document
Interface
). Aplikacja SDI ma pojedyncze okno główne i w razie potrzeby wyświetla
okna dialogowe. Nie wyświetla żadnych okien - potomków, nazywanych dokumentami.

Niektóre aplikacje tworzone są według modelu wielodokumentowego.
Aplikacje MDI (ang. Multiple Document Interface) składają się z okna
głównego (rodzica MDI) i okien podporządkowanych (dokumentów MDI).

Przykładami aplikacji MDI są Word, Excel, Edytor konfiguracji systemu (

sysedit

) czy

Menedżer Programów Windows 3.1.

Jedną z najważniejszych cech charakterystycznych aplikacji MDI jest to, że
okna-dokumenty zależne są od okna głównego. Można przesuwać je jedynie w obrębie
okna głównego. Aplikacje MDI mają prawie zawsze w menu głównym opcję Window.
Opcja ta posiada z kolei prawie zawsze podopcje 

Kaskada

 i 

Sąsiadująco

. Kiedy okno

podporządkowane jest zminimalizowane, jego ikona widoczna jest w obrębie okna –
rodzica. Kiedy natomiast okno aplikacji SDI jest zminimalizowane, jego ikona jest na
Pulpicie lub na Pasku Zadań.

Aby utworzyć aplikację MDI w Delphi, trzeba właściwość 

FormStyle

 formularza

głównego ustawić na 

fsMDIform

. Każde z okien podporządkowanych MDI musi swoją

właściwość 

FormStyle

 mieć ustawioną na 

fsMDIchild

. Oprócz tego ograniczenia nie

ma właściwie żadnych innych.

Najważniejsze właściwości formularzy

Klasa 

TForm

 posiada bardzo dużo różnych właściwości. Niektóre z nich są mało znane

i bardzo rzadko używane, inne są używane powszechnie. Omówię tutaj tylko te najpo-
pularniejsze. Nie będę omawiał właściwości o oczywistym znaczeniu, jak 

Caption

Color

,

Left

Top

Width

 i 

Height

, jeżeli nie będą posiadały jakiegoś specjalnego znaczenia,

o którym powinieneś wiedzieć.

Właściwości ustawiane
w czasie projektowania aplikacji

Właściwości wymienione w tym podrozdziale mogą być ustawiane zarówno w czasie
projektowania aplikacji poprzez Inspektor Obiektów, jak również w czasie jej wykony-

background image

152

Część I

152

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

wania z poziomu kodu. Prawie wszystkie z nich mogą być także odczytywane w czasie
działania programu.

ActiveControl 

 właściwość ta oznacza wyróżnienie danego komponentu w momencie

aktywacji formularza. Na przykład, chcesz żeby dane pole edycji było aktywne w mo-
mencie wyświetlenia okna dialogowego. W czasie projektowania formularza dostępna
jest list umieszczonych na nim komponentów, z których jeden można ustawić jako ak-
tywny.

AutoScroll, HorzScrollBar i VertScrollBar 

– te trzy właściwości odpowiadają za paski

przewijania formularza. Jeżeli właściwość 

AutoScroll

 ma wartość 

True

 (ustawienie

domyślne) i formularz jest za mały,  żeby pomieścić wszystkie umieszczone na nim
komponenty, automatycznie pojawiają się na jego dolnej i prawej krawędzi paski przewija-
nia. Właściwości 

HorzScrollBar

 i 

VertScrollBar

 mają zestaw własnych właściwości,

które określają ich działanie.

BorderIcons  

– właściwość ta określa, które z systemowych przycisków mają się poja-

wić na pasku tytułowym formularza podczas działania programu. Do wyboru są: menu
systemowe, przycisk minimalizacji, przycisk maksymalizacji i przycisk pomocy.

BorderStyle 

– za pomocą tej właściwości ustawia się typ ramki, którą będzie posiadał

formularz podczas wykonywania programu. Wartość domyślna to 

bsSizeable

 co ozna-

cza, że rozmiar i położenie formularza będą mogły być zmieniane przez użytkownika
programu. Style ramki, w których zmiana rozmiarów okna nie będzie możliwa, to

bsDialog

 i 

bsNone

.

ClientWidth i ClientHeight 

– zamiast określać szerokość i wysokość całego formularza,

można ustawić wymiary jego obszaru klienckiego (obszaru wewnątrz ramki i poniżej
paska tytułowego i paska menu). Przypisanie wartości tym właściwościom powoduje,
że wymiary całego okna dopasowują się automatycznie.

Constrains 

– właściwość ta używana jest do określania minimalnej i maksymalnej sze-

rokości i wysokości formularza. Poszczególne wartości ustala się wpisując je wprost do
właściwości 

MaxHeight

MaxWidth

MinHeight

 i 

MinWidth

.

DefaultMonitor 

– właściwość ta używana jest do określenia, na którym monitorze ma

być wyświetlony dany formularz (w środowisku z więcej niż jednym monitorem – np.
Windows 98).

DockSite 

– właściwość ta stanowi o tym, czy w danym formularzu można dokować

komponenty. Miejsca dokowania i dokowalne komponenty omówione są w rozdziale 13.

Font 

– właściwość ta określa, jakich czcionek używa dany formularz. Ważne jest to, że

właściwość tę dziedziczą wszystkie komponenty umieszczane na formularzu. Oznacza
to także, że można zmienić czcionkę wszystkich komponentów na formularzu zmienia-
jąc jedynie właściwość 

Font

 formularza. Jeżeli „ręcznie” zmieni się  właściwość 

Font

któregoś z komponentów na formularzu, nie będzie się ona już zmieniać wraz ze zmianą
czcionki formularza.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

153

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

153

FormStyle 

– właściwość ta zwykle ustawiona jest na 

fsNormal

. Jeżeli wymagane jest,

aby dany formularz pozostawał zawsze na wierzchu, należy ustawić tę właściwość na

fsStayOnTop

. Formularze MDI muszą mieć  właściwość 

FormStyle

 ustawioną na

fsMDIForm

, a formularze podporządkowane MDI – 

fsMDIChild

. Aplikacje MDI były

omówione w rozdziale „Model aplikacji wielodokumentowej”.

HelpContext i HelpFile 

– właściwość 

HelpContext

 używana jest do ustawiania identyfi-

katora pomocy kontekstowej dla danego formularza. Jeżeli pomoc kontekstowa jest
włączona, po naciśnięciu klawisza F1 uaktywni się System Pomocy Windows. Identyfi-
kator jest potrzebny do określenia, która strona pliku pomocy ma być wyświetlona.
Właściwość 

HelpFile

 zawiera nazwę pliku pomocy użytego po naciśnięciu klawisza F1.

Icon 

– właściwość ta ustawia ikonę wyświetloną na pasku tytułowym formularza w czasie

wykonywania programu oraz na pasku zadań, w czasie gdy program jest zminimalizowany.
Czasem jednak właściwość ta jest ignorowana, np. gdy 

FormStyle

 ustawiony jest na

fsDialog

.

KeyPreview 

– gdy właściwość  ta  ma  wartość 

True

, będzie generowane zdarzenie for-

mularza 

OnKeyPress

 i 

OnKeyDown

, gdy użytkownik naciśnie jakiś klawisz w którymkolwiek

komponencie na formularzu. Normalnie, formularze nie otrzymują informacji o zdarze-
niach pochodzących z klawiatury, kiedy jakiś komponent na formularzu jest aktywny.

Position 

– właściwość ta określa początkowy rozmiar i pozycję formularza na ekranie.

Można wybrać jedną z trzech wartości: 

poDesigned

poDefault

 i 

poScreenCenter

:

υ 

ustawienie 

poDesigned

 oznacza, że formularz będzie dokładnie tak ustawiony,

jak podczas jego projektowania.

υ 

poDefault

 umożliwia systemowi Windows ustawienie rozmiaru i pozycji

formularza według specjalnego algorytmu (Z-ordering) – nowe okno jest wy-
świetlane trochę poniżej i na prawo względem ostatnio wyświetlonego.

υ 

wartość 

poScreenCenter

 oznacza wyświetlanie formularza na środku ekranu.

Visible 

– właściwość ta określa, czy formularz jest widoczny na ekranie. W czasie dzia-

łania programu można za pomocą tej właściwości ukrywać albo wyświetlać formularz i
sprawdzać aktualny stan.

WindowState 

– można użyć tej właściwości do odczytania aktualnego stanu formularza

(czy jest zmaksymalizowany, zminimalizowany czy normalny). Właściwość ta określa
także sposób, w jaki formularz ma być wyświetlony po jego utworzeniu. Dostępne
wartości to 

wsMinimized

wsMaximized

 i 

wsNormal

.

Właściwości ustawiane w czasie działania programu

Do niektórych właściwości można się odwoływać jedynie z poziomu kodu. Poniżej
przedstawione są te najczęściej używane.

background image

154

Część I

154

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

ActiveMDIChild 

– jest to właściwość tylko do odczytu. Zawiera wskaźnik do aktywnego

okna podporządkowanego MDI. Jeżeli akurat nie istnieje takie okno, lub aplikacja jest
typu SDI, wskaźnik ten ma wartość nil.

Canvas  

to obszar roboczy formularza (powierzchnia, na której można rysować bitmapy,

linie, kształty czy tekst). Zwykle do wypisania tekstu używa się komponentu 

Label

, do

wyświetlania grafiki – komponentu 

Image

, a do rysowania różnych figur – komponentu

Shape

, ale czasem trzeba coś narysować bezpośrednio na formularzu w czasie działania

programu. Do tego służy właśnie właściwość 

Canvas

. Właściwość ta może być także

użyta do zapisania zawartości graficznej formularza na dysk. Zagadnienie to jest szerzej
omówione w rozdziale 12, „Programowanie grafiki i multimediów”.

ClientRect 

zawiera współrzędne górnej, lewej, prawej i dolnej krawędzi obszaru klienc-

kiego formularza. Jest to informacja użyteczna w wielu sytuacjach. Na przykład, aby
umieścić bitmapę na środku formularza, trzeba odczytać szerokość i wysokość jego obszaru
klienckiego.

Handle 

zawiera uchwyt okna (

HWND

) danego formularza. Jest to użyteczne przy wywołaniach

funkcji Windows API.

ModalResult 

określa, w jaki sposób zostało zamknięte modalne okno dialogowe. Jeżeli

posiada ono przycisk 

OK

 i 

Cancel

 (ew. 

Anuluj

), można właściwości tej przypisać war-

tość 

mrOK

, żeby zasymulować naciśnięcie klawisza OK i 

mrCancel

, żeby zasymulować

naciśnięcie klawisza 

Cancel

. Można także użyć tej właściwości do sprawdzenia, w jaki spo-

sób okno dialogowe zostało zamknięte. Inne możliwe wartości to 

mrYes

mrNo

 i 

mrAbort

.

Owner 

zawiera wskaźnik do właściciela danego formularza. Właściciel formularza jest

to obiekt odpowiedzialny za usunięcie tego formularza, gdy nie jest on już potrzebny.
Z kolei rodzic danego komponentu jest to okno (formularz albo inny komponent), który
zawiera dany komponent. W przypadku okna głównego, obiekt typu aplikacja jest za-
równo właścicielem i rodzicem okna. W przypadku komponentów, ich właścicielem jest
formularz, na którym są umieszczone, zaś rodzicem może być inny komponent (np. 

Panel

).

Parent 

zawiera wskaźnik do rodzica danego formularza. Różnica między właścicielem a

rodzicem wyjaśniona jest wyżej.

Metody formularzy

Formularze są także komponentami i jako takie, posiadają wspólne z innymi kompo-
nentami metody, np. 

Show

ShowModal

 i 

Invalidate

. Istnieją jednak metody, które

odnoszą się tylko do formularzy. Omówię tu tylko te najczęściej spotykane.

BringToFront 

– metoda ta powoduje przesunięcie danego formularza na wierzch (ponad

inne, przykrywające go).

Close 

i

 CloseQuery 

– metoda 

Close

 wywołuje metodę 

CloseQuery

 aby się upewnić, że

można zamknąć formularz i zamyka go. Funkcja 

CloseQuery

 z kolei wywołuje metodę

obsługi zdarzenia 

OnCloseQuery

. Jeżeli zmienna typu 

Boolean

 przekazana do niej ma

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

155

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

155

wartość 

False

, formularz nie jest zamykany, w przeciwnym przypadku jest. Metodę ob-

sługi zdarzenia 

OnCloseQuery

 można wykorzystać np. do wyświetlenia komunikatu dla

użytkownika informującego o konieczności zamknięcia wszystkich plików lub do
sprawdzenia własnego warunku zamknięcia formularza.

Print 

– metoda ta służy do drukowania zawartości formularza (ściślej mówiąc obszaru

klienckiego – bez paska tytułowego, menu i ramek) na drukarce.

ScrollInView 

– metoda ta przewija zawartość formularza tak, żeby określony komponent

stał się widoczny.

SetFocus 

– metoda ta powoduje aktywację formularza i przesunięcie go na wierzch. Je-

żeli na formularzu jest jakiś komponent wskazany we właściwości 

ActiveControl

formularza, jest on aktywowany.

Show 

ShowModal 

– metody te służą do wyświetlenia formularza na ekranie. Metoda

Show

 wyświetla formularz jako niemodalny (inne formularze mogą być aktywowane

w czasie, gdy dany formularz jest wyświetlony), natomiast 

ShowModal

 wyświetla for-

mularz jako modalny (modalne okno dialogowe trzeba zamknąć,  żeby możliwa była
dalsza praca z aplikacją).

Metody MDI

Istnieją specjalne metody przeznaczone do operowania na formularzach MDI. Metoda

ArrangeIcons

 porządkuje ikony zminimalizowanych okien podporządkowanych MDI

w oknie-rodzicu. Metoda 

Cascade

 wyświetla kaskadowo wszystkie nie zminimalizowa-

ne okna podporządkowane MDI. Metoda 

Tile

 wyświetla te okna sąsiadująco. Metoda

Next

 aktywuje (umieszcza na wierzchu) następne na liście okno podporządkowane

MDI, metoda 

Previous

 robi to samo z oknem poprzednim na liście. Metody MDI mają

zastosowanie wyłącznie do okien-rodziców.

Zdarzenia formularzy

Formularze mogą odpowiadać na szeroki wachlarz zdarzeń, z których niektóre najczę-
ściej używane opisane są poniżej.

OnActivate 

– zdarzenie to zachodzi, gdy formularz jest pierwszy raz aktywowany. Formu-

larz może być aktywowany w wyniku jego utworzenia  lub kiedy użytkownik przełącza się
pomiędzy formularzami. Obiekt typu 

Application

 także posiada zdarzenie 

OnActivate

,

które generowane jest, gdy użytkownik przełączy się na tę aplikację z innej.

OnClose 

OnCloseQuery 

– kiedy aplikacja jest zamykana, generowane jest zdarzenie

OnClose

. Zdarzenie to generuje z kolei zdarzenie 

OnCloseQuery

. Jeżeli 

OnCloseQuery

zwraca wartość 

False

, formularz nie jest zamykany.

OnCreate 

– zachodzi w momencie utworzenia formularza w czasie działania programu.

Dla każdego formularza (obiektu klasy tego formularza) zdarzenie to może zajść tylko

background image

156

Część I

156

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

jeden raz. Zdarzenia tego używa się do przeprowadzenia wszelkich czynności, które są
niezbędne do prawidłowego działania formularza.

OnDestroy 

– zdarzenie to jest przeciwne do 

OnCreate

. (wywoływane jest przy niszczeniu

formularza). Używa się go do zwalniania wszelkiej przydzielonej dynamicznie pamięci
lub innych końcowych czynności.

OnDragDrop 

– zdarzenie to generowanie jest, gdy na danym formularzu upuszczany jest ja-

kiś obiekt. Zdarzenie to ma znaczenie przy włączonej obsłudze drag and drop formularza.

OnMouseDown

OnMouseMove 

OnMouseUp 

– zdarzenia te generowane są przy klikaniu

lub poruszaniu myszą w obszarze formularza.

OnPaint 

– zdarzenie to generowane jest, gdy zachodzi potrzeba odświeżenia formularza

na ekranie. Zazwyczaj wszystkie komponenty same troszczą się o prawidłowe wyświe-
tlanie, jednak czasem trzeba przerysować jakieś elementy graficzne bezpośrednio
umieszczone na formularzu.

OnResize 

– zdarzenie to generowane jest po każdej zmianie rozmiarów formularza. Mo-

że czasami przydać się do korekty położenia komponentów na formularzu lub do jego
przerysowania.

OnShow 

– zdarzenie to zachodzi na moment przed wyświetleniem formularza na ekranie.

Inspektor Obiektów

Inspektor Obiektów jest integralną częścią Delphi IDE. Współpracuje on z Projektan-
tem Formularzy. Projektant formularzy zostanie omówiony szczegółowo w rozdziale 6,
lecz przedtem chciałbym wspomnieć właśnie o Inspektorze Obiektów.

Służy on do nadawania wartości na etapie projektowania aplikacji poszczególnym wła-
ściwościom komponentów. Inspektor Obiektów składa się z trzech głównych elementów:

υ 

Listy wyboru komponentu

υ 

Karty właściwości

υ 

Karty zdarzeń

Przy tworzeniu formularza generowanych jest wiele zdarzeń, tak jak przy
jego niszczeniu. Kolejność zdarzeń przy tworzeniu formularza jest nastę-
pująca:

 

1. 

Wywołanie konstruktora formularza

 

2. 

Zdarzenie 

OnCreate

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

157

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

157

 

3. 

Metoda 

AfterConstruction

 

4. 

Zdarzenie 

OnShow

 

5. 

Zdarzenie 

OnActivate

Kiedy formularz jest niszczony, występują następujące zdarzenia:

 

1. 

Zdarzenie 

OnCloseQuery

 

2. 

Zdarzenie 

OnClose

 

3. 

Metoda 

BeforeDestruction

 

4. 

Zdarzenie 

OnDestroy

 

5. 

Wywołanie destruktora formularza

W większości przypadków wyżej wymieniona kolejność nie jest taka istot-
na. Niekiedy jednak może być bardzo ważna. Znajomość tej kolejności mo-
że Ci w tych przypadkach bardzo pomóc.

Do tej pory zdążyłeś już zapewne dość dobrze zapoznać się z Inspektorem Obiektów.
Podsumuję zatem, co już wiesz i dodam kilka informacji, z którymi się prawdopodobnie
jeszcze nie zetknąłeś.

Lista wyboru komponentu

Najprościej jest wybrać komponent, którego właściwości mają być wyświetlone w In-
spektorze Obiektów, klikając go na formularzu. Alternatywnym sposobem jest skorzy-
stanie z listy wyboru komponentu. Znajduje się ona w górnej części Inspektora Obiektów.

Zwykle komponent wybiera się klikając na formularzu. Jednak gdy poszu-
kiwany komponent jest przykryty innym komponentem, lub jest poza wi-
docznym obszarem formularza, korzystanie z listy wyboru komponentu
staje się uzasadnione.

W polu wybranego elementu listy wyboru wyświetlana jest nazwa obiektu i klasa, do

jakiej należy. Na przykład, komponent o nazwie 

Memo

 wyświetlony byłby następująco:

Memo: TMemo

Na rozwijanej liście nazwa klasy obiektu nie jest wyświetlana, jest ona widoczna tylko

w polu wybranego elementu. Aby wybrać komponent z listy, należy kliknąć przycisk

umieszczony po prawej stronie pola wybranego elementu, co spowoduje rozwinięcie się

listy. Teraz wystarczy już kliknąć na nazwie odpowiedniego komponentu.

background image

158

Część I

158

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Lista wyboru komponentu zawiera tylko komponenty umieszczone na bie-
żącym formularzu włącznie z nazwą tego formularza. Nieaktywne formula-
rze i umieszczone na nich komponenty nie są umieszczone na liście.

Jeżeli wybierze się jakiś komponent z listy, na formularzu automatycznie pojawia się

jako zaznaczony. Karty 

Properties

 i 

Events

 są uaktualniane stosownie do wybranego

komponentu (formularz także jest komponentem). Na rysunku 4.13 przedstawiony jest

Inspektor Obiektów z wyświetloną listą wyboru komponentu.

Rysunek 4.13.
Lista wyboru
komponentu

Karta Properties

Karta 

Properties

 zawiera wszystkie właściwości zaznaczonego komponentu ustawiane

w czasie projektowania aplikacji. Karta ta podzielona jest na dwie kolumny. W lewej
kolumnie są nazwy właściwości, w prawej zaś wartości tych właściwości.

Jeżeli wszystkie właściwości nie mieszczą się w oknie Inspektora Obiektów, pojawiają

się na nim paski przewijania.

Wygląd Inspektora Obiektów z wyświetlonymi właściwościami komponentu 

Memo

przedstawiony jest na rysunku 4.14.

Jeżeli zaznaczyłeś kilka komponentów na formularzu, w Inspektorze
Obiektów wyświetlone są tylko właściwości wspólne dla nich wszystkich.
Można to wykorzystać do jednoczesnej zmiany właściwości dla kilku kom-
ponentów. Na przykład,  żeby zmienić szerokość kilku komponentów na
raz, trzeba zaznaczyć te komponentu i w Inspektorze Obiektów zmodyfi-
kować odpowiednio właściwość 

Width

.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

159

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

159

Rysunek 4.14.
Inspektor Obiektów
z wyświetlonymi
właściwościami
komponentu Memo

Właściwości mogą mieć wartości typu całkowitego, wyliczeniowego, zbiorowego, in-

nych obiektów, łańcuchowego i innych typów (właściwości omówione są szczegółowo

w następnym rozdziale). Inspektor Obiektów umożliwia wprowadzanie poszczególnych

wartości stosownie do ich typu. Delphi posiada kilka wbudowanych edytorów właściwości.

Na przykład, właściwość 

Top

 może posiadać wartości typu 

Integer

. Ponieważ jest to

typ podstawowy, edytor właściwości tego typu jest bardzo prosty. Umożliwia on wpi-

sywanie odpowiednich wartości wprost do kolumny wartości w Inspektorze Obiektów.

W większości przypadków edytor właściwości dokonuje sprawdzenia
podanych wartości typu całkowitego. Na przykład, właściwość 

Width

 nie

może być ujemna. Jeżeli wprowadzisz mimo to liczbę ujemną, Delphi
ustawi tę wartość na najmniejszą możliwą (zwykle 0). Jeżeli natomiast do
właściwości typu całkowitego wpiszesz łańcuch, pojawi się komunikat o
błędzie. Jednym z zadań edytorów właściwości jest właśnie sprawdzanie
wprowadzanych wartości.

W wielu przypadkach edytor właściwości zawiera listę dostępnych wartości, z których
można wybierać. Po kliknięciu w polu wartości pokazuje się przycisk opuszczanej listy
z dostępnymi wartościami.

Podwójne kliknięcie w polu wartości spowoduje cykliczne przechodzenie
poprzez kolejne elementy listy dozwolonych wartości. Na przykład,  żeby
szybko zmienić wartość typu 

Boolean

, wystarczy podwójnie kliknąć na tej

wartości (lista możliwych opcji zawiera w tym przypadku tylko dwa ele-
menty – 

True

 i 

False

).

W Inspektorze Obiektów przed nazwami niektórych właściwości widać znak +. Ozna-
cza to, że dana właściwość jest klasą albo zbiorem. Nazwa tej właściwości jest węzłem,

background image

160

Część I

160

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

który można rozwijać, aby dostać się do poszczególnych pod-właściwości. W celu roz-
winięcia węzła trzeba kliknąć podwójnie na jego nazwie albo z menu kontekstowego
wybrać opcję 

Expand

. Aby zwinąć otwarty węzeł, należy ponownie podwójnie kliknąć

na jego nazwie albo z menu kontekstowego wybrać opcję 

Collapse

.

Jako przykład właściwości, której wartości tworzą zbiór (

set

), weźmy właściwość

BorderIcons

 formularza. Zaznacz formularz, następnie w Inspektorze Obiektów kliknij

podwójnie na właściwości 

BorderIcons

. Rozwinie się ona w listę czterech elementów

zbioru. Można teraz włączać lub wyłączać każdy z tych elementów.

W przypadku właściwości będących obiektami (realizacjami klas VCL) właściwości
można edytować na dwa sposoby. Pierwszym jest kliknięcie w kolumnie wartości a na-
stępnie kliknięcie na przycisku oznaczonym znakiem wielokropka (… – ang. ellipsis).
Na przykład, kliknij właściwość 

Font

, a następnie kliknij na przycisku z wielokropkiem.

Otworzy się odpowiedni edytor do tej właściwości (okno dialogowe wyboru czcionki).

Drugim sposobem na edycję tej właściwości jest rozwinięcie jej węzła. Wyświetlone
zostaną właściwości tej właściwości (tak – właściwości też mogą posiadać swoje wła-
ściwości) i można je edytować jak każde inne. Zlokalizuj ponownie właściwość 

Font

formularza i kliknij podwójnie na niej. Węzeł rozwinie się ukazując takie właściwości
jak 

Height

Color

Name

 itd.

Niektóre właściwości można edytować jedynie klikając przycisk z wielokropkiem.
Wcześniej używałeś komponentu 

Image

 jako ikony dla programu 

Multiple

. Właściwość

Picture

 komponentu 

Image

 można było edytować jedynie wywołując edytor właściwości.

W tym przypadku jest to Image Editor.

Ogólnie mówiąc, Inspektor Obiektów troszczy się o to, żeby zawsze uruchomić odpowiedni
dla danej właściwości edytor, Ty nie musisz się tym przejmować. W trakcie poznawania
nowych komponentów będziesz po prostu spotykać się z różnymi edytorami właściwości.

Karta Events

Na karcie tej wyświetlone są wszystkie zdarzenia, które obsługiwane są przez dany
komponent. Używanie tej karty jest bardzo proste. Aby utworzyć procedurę obsługi
określonego zdarzenia, należy po prostu kliknąć podwójnie w prawej kolumnie karty
obok tego zdarzenia. Delphi tworzy automatycznie szkielet procedury wraz ze wszystkimi
odpowiednimi parametrami. Otwierany jest Edytor Kodu z kursorem umieszczonym
wewnątrz nowo utworzonej procedury. Wystarczy teraz po prostu wpisać odpowiedni
kod. Nazwa funkcji generowana jest na bazie właściwości 

Name

 komponentu i nazwy

obsługiwanego zdarzenia. Na przykład, procedura obsługi zdarzenia 

OnClick

 przycisku

o nazwie 

OkBtn

 będzie nazywać się 

OKBtnClick

.

Możesz pozwolić Delphi wygenerować nazwę procedury obsługi zdarzenia, albo możesz
tę nazwę podać samemu. Aby zrobić to drugie, należy wpisać nazwę procedury w polu
edycji po prawej stronie nazwy zdarzenia i nacisnąć 

Enter

. Wyświetla się wówczas

Edytor Kodu z odpowiednio nazwaną procedurą.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

161

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

161

W czasie kompilowania, uruchamiania czy zachowywania modułu na dys-
ku, Delphi usunie automatycznie z kodu źródłowego wszystkie „puste”
procedury obsługi zdarzenia. Powiedzmy, że utworzyłeś procedurę obsługi
zdarzenia 

OnCreate

, ale nie wpisałeś do niej żadnego kodu. Przy pierwszym

uruchomieniu, kompilacji modułu czy zachowaniu go na dysku procedura ta
zostanie usunięta. Jest to bardzo przydatna cecha Delphi, jednak niewtajem-
niczony użytkownik może być nieprzyjemnie zaskoczony. Jeżeli nie chcesz,
żeby Delphi usunął daną procedurę, wystarczy wpisać do niej pojedynczą li-
nię komentarza.

Po utworzeniu procedury obsługującej dane zdarzenie, można użyć jej wielokrotnie
w różnych komponentach posiadających to samo zdarzenie. Czasami na przykład kilka
przycisków umieszczonych na formularzu może mieć taką samą obsługę zdarzenia

OnClick

. Idąc krok dalej – można utworzyć opcję w menu głównym, opcję w menu

kontekstowym i przycisk na pasku narzędzi, które wywołują wspólną procedurę obsługi
zdarzenia 

OnClick

. Gdy nabierzesz doświadczenia w programowaniu w Delphi, docenisz

te możliwości powtórnego wykorzystania kodu. Na karcie zdarzeń Inspektora Obiektów
pola w prawej kolumnie posiadają przyciski opuszczania listy, na której umieszczone są
zgodne z danym zdarzeniem procedury obsługi.

Dokowalne okna IDE

Nowością w Delphi 4 są okna dokowalne.

Okno dokowalne jest to okno, które może być przeciągnięte przy pomocy
myszy z jego aktualnego położenia i zadokowane w jednym z punktów do-
kowania.

Miejsce dokowania jest to lokalizacja w IDE, w którym może być zado-
kowane (zaczepione) okno dokowalne. IDE posiada kilka takich miejsc do-
kowania.

Prawie każde okno w Delphi jest dokowalne. Dokowalne jest okno Menedżera Projektów,
Eksploratora Kodu, Inspektora Obiektów, okno podglądu zmiennych, okno komunikatów
i wiele innych.

Największą zaletą okien dokowalnych jest to, że umożliwiają one dostosowanie środo-
wiska do wymagań i preferencji użytkownika, co czyni pracę przyjemniejszą i bardziej
efektywną.

background image

162

Część I

162

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Miejsca dokowania

Okna dokowalne można rozmieszczać po całym ekranie w dowolnym jego miejscu.
Efektem takiego działania byłoby jednak całe mnóstwo pojedynczych okien rozrzuconych
po całym obszarze roboczym. Poruszanie się w tym gąszczu byłoby bardzo trudne. Aby
okna dokowalne miały w ogóle sens, potrzebne jest określone miejsce do ich zaczepienia.
W Delphi IDE miejscem takim jest najczęściej Edytor Kodu.

Edytor Kodu posiada trzy miejsca dokowania. Pierwsze z nich leży po lewej stronie –
zaraz po uruchomieniu Delphi zadokowany jest w nim Eksplorator Kodu. Drugie miejsce
dokowania znajduje się przy dolnej krawędzi Edytora Kodu – w domyślnej konfiguracji
Delphi umieszczone jest tam okno komunikatów (nie jest ono widoczne, dopóki nie w nim
nic do wyświetlenia). Trzecie miejsce dokowania w Edytorze Kodu znajduje się wzdłuż
lewej krawędzi jego okna. Te trzy miejsca dokowania w zupełności wystarczają do pełnego
skonfigurowania IDE do swoich wymagań.

Oprócz tego jest jeszcze jedno miejsce dokowania, o którym chcę wspomnieć. Jeżeli
masz otwarte okno narzędzi (np. Menedżera Projektów), możesz zadokować w tym
oknie inne okno narzędzi. Umożliwia to zgrupowanie dwóch albo więcej okien Delphi
w jednym oknie narzędziowym. Na przykład w jednym „pływającym” oknie narzę-
dziowym mogą zostać umieszczone: Eksplorator Kodu i Menedżer Projektów. Okno takie
posiada pięć miejsc dokowania: krawędź lewa, prawa, górna, dolna i środek.

Po zadokowaniu okna w środku okna narzędzi, okno narzędzi staje się oknem wielo-
stronicowym (posiada zakładki poszczególnych kart). Na każdej z zakładek wypisany
jest tytuł odpowiadającego okna. Może wykład ten nie jest zbyt jasny, najlepiej więc
będzie przećwiczyć to na przykładzie.

Eksperymentowanie z oknami dokowalnymi

Zaczniemy od najbardziej podstawowych operacji dokowania, przechodząc później do
przykładów bardziej skomplikowanych.

Oto pierwsze ćwiczenie:

 

1. 

Utwórz nową aplikację i przełącz się do Edytora Kodu. Zwróć uwagę, że Eks-
plorator Kodu jest zadokowany po lewej stronie Edytora Kodu.

 

2. 

Kliknij na uchwycie w górnej części Eksploratora Kodu i przesuń go w prawo.
Widoczny będzie przesuwający się wraz z kursorem myszy szary prostokąt.
Prostokąt ten wyobraża umiejscowienie Eksploratora Kodu, gdyby zakończyć
w tym miejscu przesuwanie.

 

3. 

Przeciągnij okno Eksploratora Kodu na środek Edytora Kodu i puść klawisz my-
szy. Eksplorator Kodu zamienił się w samodzielne, pływające okno narzędziowe.

 

4. 

Kliknij na pasku tytułowym Eksploratora Kodu i przeciągnij go z powrotem na
lewą stronę Edytora Kodu. Kiedy kursor myszy wraz z szarym prostokątem

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

163

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

163

osiągnie lewą krawędź okna Edytora Kodu, szary prostokąt wyobrażający prze-
suwane okno Eksploratora Kodu „wskoczy” w odpowiednie miejsce Edytora
Kodu. Puść klawisz myszy i Eksplorator Kodu zostanie zadokowany.

 

5. 

Przeciągnij jeszcze raz Eksplorator Kodu do dolnej krawędzi okna Edytora
Kodu i zadokuj go w miejscu dokowania znajdującym się wzdłuż dolnej kra-
wędzi Edytora Kodu. Rozmiar Eksploratora Kodu dopasuje się automatycznie.
Uchwyt Eksploratora Kodu ma teraz orientację pionową i znajduje się po lewej
jego stronie.

 

6. 

Przeciągnij Eksplorator Kodu do punktu wyjściowego (do miejsca dokowania
na lewej krawędzi Edytora Kodu). Edytor Kodu i Eksplorator Kodu powinny
teraz wyglądać tak, jak na początku ćwiczenia.

Ćwiczenie to było bardzo proste, ale ilustruje ono ogólną ideę dokowania. Następne będzie
trochę bardziej interesujące. Wykonaj następujące czynności:

 

1. 

Przeciągnij Eksplorator Kodu z punktu dokowania na prawą stronę Edytora
Kodu i upuść go tam.

 

2. 

Zmień rozmiar okna Eksploratora Kodu tak, żeby było ono mniej więcej kwa-
dratowe.

 

3. 

Wybierz z menu 

View | Project Manager

. Ukaże się na ekranie Menedżer

Projektów.

 

4. 

Przeciągnij okno Menedżera Projektów na okno Eksploratora Kodu. Kiedy szary
prostokąt przesuwany wraz z myszą umiejscowi się na środku okna Eksplora-
tora Kodu, puść klawisz myszy. Okno narzędziowe powinno teraz wyglądać
tak, jak na rysunku 4.15. Zwróć uwagę, że okno to posiada teraz dwie karty:
Eksploratora Kodu i Menedżera Projektów.

 

5. 

Przeciągnij to okno narzędziowe na lewą stronę Edytora Kodu i zadokuj je
tam. Masz teraz łatwy i szybki dostęp zarówno do Eksploratora Kodu, jak i do
Menedżera Projektów.

Rysunek 4.15.
Eksplorator Kodu
i Menedżer
Projektów
zadokowane razem
w oknie
narzędziowym

background image

164

Część I

164

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Zróbmy teraz jeszcze jedno ćwiczenie. W czasie poprawiania błędów w programie często
potrzeba mieć widoczne okno podglądu zmiennych – 

Watch List

 (znajdowanie i po-

prawianie błędów w programach omówione jest szczegółowo w rozdziale 10). Pokażę
Ci jak zrobić, żeby okno podglądu zmiennych było cały czas pod ręką:

 

1. 

Kliknij prawym klawiszem myszy na Edytorze Kodu i z menu kontekstowego
wybierz opcję 

Message View

. W dolnym miejscu dokowania Edytora Kodu

ukaże się okno komunikatów.

 

2. 

Wybierz z menu głównego 

View | Debug Windows | Watches

. Lista podglądu

zmiennych otworzy się jako nowe okno narzędziowe.

 

3. 

Przeciągnij okno 

Watch List

 na okno komunikatów i zadokuj je w jego środku.

W dolnym miejscu dokowania Edytora Kodu będą teraz umieszczone dwie
karty: 

Messages

 i 

Watch List

.

Możesz teraz zaglądać do listy podglądu zmiennych, kiedy tylko chcesz klikając na za-
kładkę 

Watch List

. Karta 

Messages

 zostanie wyświetlona automatycznie wtedy, gdy

pojawią się na niej komunikaty do wyświetlenia. Rysunek 4.16 przedstawia wygląd IDE
po przeprowadzeniu ostatniego ćwiczenia.

Wyłączanie dokowania

Możliwość dokowania jest bardzo przydatna i wygodna. Czasami jednak, gdy chcesz
umieścić na ekranie jakieś okno nie dokując go, trudno znaleźć odpowiednie miejsce
– gdzie się nie ruszyć, zawsze jest jakieś czekające miejsce dokowania. Na szczęście
dokowalność okna narzędziowego można wyłączyć.

Każde dokowalne okno narzędziowe ma w swoim menu kontekstowym opcję 

Dockable

.

Jeżeli opcja ta jest zaznaczona, okno jest dokowalne. Jeżeli nie jest, okno nie jest dokowalne
i można je swobodnie umieszczać w całym obrębie IDE.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

165

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

165

Rysunek 4.16.
Cztery okna
narzędziowe
zadokowane
w Edytorze Kodu

Przykładowy program MDI

Żeby utrwalić przyswojoną w tym rozdziale wiedzę na temat projektów i formularzy,
stwórzmy przykładową aplikację MDI. Będzie to przeglądarka plików graficznych. Jak
na ten etap nauki będzie to dość rozbudowana aplikacja, potrzebny więc będzie ogólny
plan działania. Oto on:

 

1. 

Utworzenie formularza głównego MDI, posiadającego menu.

 

2. 

Napisanie kodu obsługującego opcje 

Plik | Otwórz

 i 

Plik | Zapisz

.

 

3. 

Napisanie kodu obsługującego opcje 

Uporządkuj Sąsiadująco

Uporządkuj

Kaskadowo

 i 

Uporządkuj Wszystkie

 z menu 

Okno

.

 

4. 

Utworzenie formularzy podporządkowanych MDI.

 

5. 

Utworzenie formularza „O Programie”.

 

6. 

Zakończenie pracy połączone z podziwianiem jej efektów.

Bierzmy się więc do roboty.

background image

166

Część I

166

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Utworzenie formularza głównego

Pierwszym krokiem jest utworzenie formularza głównego. Okno główne aplikacji MDI

musi mieć  właściwość 

FormStyle

 ustawioną na 

fsMDIForm

. Następnie trzeba będzie

utworzyć menu i okna dialogowe 

Otwórz

 i 

Zapisz

. Wykonaj następujące czynności:

 

1. 

Uruchom Delphi i wybierz opcję 

File | New Application

 z menu głównego.

 

2. 

Zmień właściwość 

Name

 formularza na 

MainForm

.

 

3. 

Zmień właściwość 

Caption

 na 

Przeglądarka plików graficznych

.

 

4. 

Ustaw właściwość 

Height

 na 450, a 

Width

 na 575 (albo inne wartości odpo-

wiednie dla ustawionego aktualnie trybu graficznego).

 

5. 

Zmień właściwość 

FormStyle

 na 

fsMDIForm

.

W porządku, główny szkielet formularza głównego jest już gotowy. Teraz dodaj do nie-

go menu główne. Ponieważ nie omawiałem jeszcze Projektanta Menu, ułatwimy sobie

sprawę wykorzystując do utworzenia menu predefiniowany szablon:

 

1. 

Kliknij na zakładce 

Standard

 na Palecie Komponentów i kliknij na komponencie

MainMenu

.

 

2. 

Kliknij na formularzu, aby umieścić na nim menu główne. Można je umieścić

w dowolnym miejscu formularza, ponieważ komponent menu w czasie działania

programu nie będzie widoczny.

 

3. 

Zmień właściwość 

Name

 menu na 

MainMenu

.

 

4. 

Kliknij podwójnie na umieszczonym na formularzu komponencie 

MainMenu

.

Otworzy się Projektant Menu (szczegółowe omówienie Projektanta Menu

znajdziesz w rozdziale 6).

 

5. 

Umieść kursor na Projektancie Menu i kliknij prawy klawisz myszy. Z menu

kontekstowego wybierz opcję 

Insert from Template

. Otworzy się okno dialo-

gowe 

Insert Template

. Rysunek 4.17 pokazuje to okno dialogowe na tle

Projektanta Menu.

Rysunek 4.17.
Okno dialogowe
Insert Template na
tle Projektanta menu

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

167

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

167

 

6. 

Wybierz opcję 

MDI Frame Menu

 i kliknij OK.

 

7. 

Zamknij Projektanta Menu klikając ikonę systemową umieszczoną w prawym
górnym rogu okna.

Teraz powinieneś być z powrotem na formularzu głównym. Zwróć uwagę, że teraz posiada
on menu główne. Możesz klikać poszczególne opcje menu głównego,  żeby zobaczyć
rozwijane listy poszczególnych podopcji. Nie wybieraj ich na razie – zrobisz to za
chwileczkę. Sporo jest tam tych opcji, prawda? Nie będziesz potrzebował ich wszystkich
– zostaw po prostu nie używane tak, jak są.

Przygotuj teraz okna dialogowe 

Otwórz

 i 

Zapisz

:

 

1. 

Kliknij na zakładce 

Dialogs

 na Palecie Komponentów. Wybierz komponent

OpenPictureDialog

 i umieść go na formularzu. Tak samo jak menu główne,

można go umieścić w dowolnym miejscu formularza.

 

2. 

Zmień właściwość 

Name

 tego okna dialogowego na 

OpenPictureDialog

.

 

3. 

Właściwość 

Title

 zmień na 

Otwórz rysunek

.

 

4. 

Umieść na formularzu komponent 

SavePictureDialog

.

 

5. 

Zmień  właściwość 

Name

 nowo umieszczonego komponentu na 

SavePicture-

Dialog

, a jego właściwość 

Title

 na 

Zapisz Rysunek

.

Formularz główny powinien wyglądać, jak na rysunku 4.18.

Rysunek 4.18.
Aktualny wygląd
formularza
głównego

background image

168

Część I

168

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Napisanie kodu obsługującego opcje
File | Open i File | Save as…

Następnym etapem tworzenia naszej aplikacji jest wpisanie kodu obsługującego opcje

File|Open

 i 

File|Save As

. Delphi jak zwykle ułatwia bardzo to zadanie. Nie utworzyliśmy

jeszcze okien podporządkowanych MDI, ale wiemy wystarczająco dużo, żeby napisać
procedury obsługi wyżej wymienionych opcji. Pamiętaj tylko o tym, że kompilacja apli-
kacji nie będzie możliwa przed utworzeniem okien podporządkowanych MDI. Wykonaj, co
następuje:

 

1. 

Na głównym formularzu aplikacji wybierz opcję 

File|Open

. Procedura obsługi

tej opcji zostanie utworzona automatycznie, w Edytorze Kodu wystarczy tylko
w miejscu umieszczenia kursora wpisać odpowiedni kod.

 

2. 

Uzupełnij procedurę 

TMainForm.Open1Click

 tak, żeby wyglądała następująco:

procedure TMainForm.Open1Click(Sender: TObject);
var
  Child : TChild;
begin
  if OpenPictureDialog.Execute then begin
    Child := TChild.Create(Self);
    with Child.Image.Picture do begin
      LoadFromFile(OpenPictureDialog.FileName);
      Child.ClientWidth := Width;
      Child.ClientHeight := Height;
    end;
    Child.Caption := ExtractFileName(OpenPictureDialog.FileName);
    Child.Show;
  end;
end;

W procedurze tej najpierw wywoływane jest okno dialogowe 

Otwórz Plik

, w którym

pobierana jest od użytkownika nazwa pliku z rysunkiem. Jeżeli użytkownik naciśnie
przycisk 

Anuluj

, okno jest zamykane i żadna akcja nie jest podejmowana. Jeżeli nato-

miast użytkownik naciśnie klawisz OK, utworzony zostaje nowy obiekt klasy 

TChild

(okno podporządkowane MDI). Następnie plik z rysunkiem jest ładowany do komponentu

Image

 w oknie podporządkowanym MDI i rozmiar tego okna zostaje automatycznie do-

pasowany do rozmiaru rysunku. Na końcu do właściwości 

Caption

 zostaje wpisana na-

zwa pliku zawierającego rysunek i rysunek zostaje wyświetlony.

W metodzie 

Open1Click

 

użyta jest funkcja 

ExtractFileName

, która od-

dziela ścieżkę dostępu od nazwy pliku i zwraca tę ostatnią. Związane tema-
tycznie funkcje to 

ExtractFilePath

ExtractFileDir

Extract-

FileDrive

 

ExtractFileExt

.

 

3. 

Naciśnij F12, żeby przełączyć się z powrotem do formularza. Wybierz teraz
opcję 

File|Save as.

 W Edytorze Kodu wyświetlona zostaje procedura obsługi

tej opcji.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

169

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

169

Pamiętasz, gdy w poprzednim rozdziale pisałem o wywołaniu funkcji 

Free

przy likwidacji obiektów przydzielanych dynamicznie? Wygląda na to, że
łamię tę zasadę w przytoczonej wyżej procedurze. W rzeczywistości jednak
zadanie odzyskiwania pamięci alokowanej dla okien podporządkowanych
MDI wykonuje biblioteka VCL. Zwróć uwagę, że parametrem konstruktora
klasy 

TChild

 jest 

Self

. Mówi to VCL, że właścicielem okna podporządko-

wanego MDI jest okno główne MDI. Kiedy okno główne jest zamykane,
następuje automatyczna likwidacja wszystkich okien podporządkowanych.

 

4. 

Zmodyfikuj tę procedurę, aby wyglądała jak poniżej:

procedure TMainForm.SaveAs1Click(Sender: TObject);
begin
  if SavePictureDialog.Execute then
    with ActiveMDIChild as TChild do
      Image.Picture.SaveToFile(SavePictureDialog.FileName);
end;

Procedura ta jest krótka i prosta. Najpierw wyświetlone zostaje okno dialogowe 

Zapisz

Plik

. Jeżeli użytkownik naciśnie OK, rysunek zostaje zapisany na dysku pod nazwą

określoną w metodzie 

SaveToFile

 klasy 

TPicture

.

W powyższej procedurze widać w akcji operator 

as

. Właściwość 

Ac-

tiveMDIChild

 zwraca wskaźnik na obiekt klasy 

TForm

. To, czego po-

trzeba w tej sytuacji to wskaźnik na obiekt klasy 

TChild

, aby mieć dostęp

do jego właściwości 

Image

. Operator 

as

 konwertuje zmienną 

ActiveMDI-

Child

 na wskaźnik do 

TChild

. Jeżeli z jakichś powodów konwersja nie

jest możliwa, następujący po tym wyrażeniu kod nie jest wykonywany.

Zanim będziemy kontynuować, warto zapisać aktualny stan projektu na dysku. Wybierz
z menu głównego opcję 

File | Save All

. Zapisz 

Unit1

 (domyślna nazwa nadawana

nowemu modułowi) jako 

PctViewU

, a projekt jako 

PictView

.

Napisanie kodu obsługującego opcje menu Window

Teraz można wpisać kod obsługujący opcje menu 

Window

. Jest on bardzo prosty:

 

1. 

Przełącz się z powrotem do formularza naciskając klawisz 

F12

. Wybierz opcję

Window | Tile

.

 

2. 

Do procedury obsługującej tę opcję trzeba wpisać tylko jedną linię kodu:

procedure TMainForm.Tile1Click(Sender: TObject);
begin
  Tile;
end;

background image

170

Część I

170

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

 

3. 

Przełącz się do formularza i powtórz to samo dla opcji 

Window | Cascade

.

Gotowa procedura powinna wyglądać następująco:

procedure TMainForm.Cascade1Click(Sender: TObject);
begin
  Cascade;
end;

 

4. 

Powtórz powyższe czynności dla opcji 

Window | Arrange All

. Kod, który

trzeba wpisać do procedury to pojedyncza instrukcja:

ArrangeIcons;

Formularz główny jest już gotowy. Teraz przejdziemy do tworzenia okien podporząd-
kowanych MDI.

Utworzenie okna podporządkowanego MDI

Utworzenie takiego okna jest zaskakująco proste. Nie trzeba właściwie w tym celu
wpisywać żadnego kodu. Wystarczy wykonać następujące kroki:

 

1. 

Utwórz nowy formularz używając przycisku 

New Form

 na pasku narzędzi lub

opcji 

File | New Form

 z menu głównego.

 

2. 

Ustaw właściwość 

Name

 nowego formularza na 

Child

. Właściwość 

Caption

można zostawić bez zmian, ponieważ ustawiana będzie w czasie wykonywania
programu.

 

3. 

Zmień właściwość 

FormStyle

 na 

fsMDIChild

. Jest to wymagane, żeby okno to

było traktowane jak okno podporządkowane MDI.

To wszystko, jeżeli chodzi o sam formularz. Umieść teraz na nim komponent 

Image

.

Jego zadaniem będzie wyświetlenie grafiki z pliku wybranego przez użytkownika.

 

1. 

Kliknij na zakładce 

Additional

 palety komponentów. Następnie kliknij na

komponencie 

Image

 i umieść go gdziekolwiek na formularzu.

 

2. 

Zmień właściwość 

Name

 komponentu 

Image

 na 

Image

.

 

3. 

Zmień właściwość 

Stretch

 na 

True

.

 

4. 

Zmień  właściwość 

Align

 na 

alClient

. Rozmiar komponentu 

Image

 zostanie

dopasowany do obszaru klienckiego formularza.

 

5. 

Wybierz z menu głównego opcję 

File | Save

 i zapisz moduł formularza na

dysku jako 

MDIChild

.

 

6. 

Przełącz się do Edytora Kodu (naciśnij F12). Kliknij na zakładce 

PctViewU

.

Wybierz z menu głównego opcję 

File | Use Unit

, wybierz moduł 

MDIChildU

i kliknij OK.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

171

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

171

Formularz nie wygląda na razie zbyt interesująco, powinien wyglądać mniej więcej jak

na rysunku 4.19.

Rysunek 4.19.
Formularz okna
podporządkowanego
MDI z komponentem
Image

Pozostało jeszcze utworzyć okno „O Programie”, ale pewnie niecierpliwisz się już, żeby

uruchomić program i zobaczyć, jak działa. Kliknij więc na przycisku 

Run

. Po krótkiej

chwili program powinien się uruchomić. Możesz wybrać opcję 

File|Open

 i otworzyć

plik z rozszerzeniem 

.bmp

.wmf

 albo 

.ico

.

Zwróć uwagę, że okno podporządkowane MDI dopasowuje swój rozmiar do rozmiaru

wyświetlanej grafiki. Otwórz kilka obrazów i wypróbuj opcje 

Cascade

  i 

Tile

 z menu

Window

. Jeżeli chcesz, możesz zapisywać grafiki pod inną nazwą korzystając z opcji 

File

| Save As

.

Utworzenie okna „O Programie”

Myślę, że potrafisz już wystarczająco dużo, żeby utworzyć formularz O Programie sa-

memu. Zaprojektuj go tak, żeby wyglądał mniej więcej jak na rysunku 4.20. Jeśli nie

dasz sobie z czymś rady, możesz wrócić do rozdziału, w którym opisane było tworzenie

formularza „O Programie” dla aplikacji Multiple.

Po utworzeniu formularza trzeba wykonać następujące czynności,  żeby można było

wywoływać to okno poleceniem menu:

 

1. 

Zmień właściwość 

Name

 formularza na 

AboutBox

.

 

2. 

Zapisz moduł jako 

PVAboutU

.

Delphi w pełni obsługuje długie nazwy plików. Ze względu na wymogi publi-
kacji elektronicznej stosuję w tej książce konwencję „8-kropka-3”, ale Ty
możesz oczywiście stosować długie nazwy.

background image

172

Część I

172

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.20.
Okno
„O Programie”

 

3. 

Przełącz się do karty 

PctViewU

 w Edytorze Kodu (naciskając 

F12

). Wybierz

opcję 

File | Use Unit

 z menu głównego i włącz do listy 

uses

 bieżącego modułu

moduł 

PVAboutU

.

 

4. 

Naciśnij 

F12

,  żeby przełączyć się z powrotem do głównego formularza. Wy-

bierz z menu głównego opcję 

Help | About

. Wyświetlony zostanie Edytor

Kodu z kursorem ustawionym w procedurze 

OnClick

.

 

5. 

Wpisz poniższą linię:

AboutBox.ShowModal;

Na razie, to byłoby już wszystko. Naciśnij ikonę 

Run

 i wypróbuj opcję 

About

 z menu

Help

. Na rysunku 4.21 przedstawiony jest działający program z wyświetlonymi kilkoma

oknami podporządkowanymi MDI.

Rysunek 4.21.
Przeglądarka plików
graficznych
w działaniu

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

173

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

173

Końcowe poprawki

Mimo, że program jest w pełni funkcjonalny, nie jest jeszcze dopracowany w najdrob-
niejszych szczegółach. Chociaż, jak na półgodzinne programowanie, nie jest wcale tak
źle. Jest jeszcze kilka problemów, które mogą wystąpić w czasie użytkowania programu.
Jeżeli spróbujesz otworzyć plik, który nie zawiera grafiki, wystąpi wyjątek. Wyjątki
i sposoby postępowania z nimi omówię w rozdziale 14. „Zaawansowane techniki pro-
gramowania”. Oprócz tego w menu jest dużo niepotrzebnych opcji, których można by się
pozbyć. Pokażę Ci, jak to zrobić, w rozdziale 6 podczas omawiania Projektanta menu.

Z dwoma problemami powinieneś jednak już sobie poradzić, są dość proste. Po pierw-

sze, po uruchomieniu aplikacji otwierane jest puste okno podporządkowane MDI. Jest

to spowodowane tym, że Delphi automatycznie tworzy wszystkie zaprojektowane wcześniej

formularze zaraz po uruchomieniu programu. W przypadku okna podporządkowanego

MDI oznacza to, że jest ono wyświetlane, kiedy okno główne staje się widoczne na

ekranie. W tym programie okna podporządkowane tworzone są przez użytkownika

w razie potrzeby, nie jest więc konieczne, żeby Delphi tworzyło je automatycznie.

Na szczęście, usunięcie okna podporządkowanego MDI z listy okien tworzonych auto-

matycznie jest bardzo proste. Wykonaj następujące czynności:

 

1. 

Wybierz z menu głównego opcję 

Project | Options

. Wyświetlone zostanie

okno dialogowe opcji projektu.

 

2. 

Jeżeli nie jest aktualnie wyświetlona karta 

Forms

, kliknij jej zakładkę. Zostanie

wyświetlona lista formularzy tworzonych automatycznie.

 

3. 

Kliknij na formularzu podporządkowanym MDI i naciśnij przycisk >. Spowoduje

to usunięcie tego formularza z listy formularzy tworzonych automatycznie,

i dodanie go do listy dostępnych formularzy.

Teraz uruchom program ponownie. Tym razem puste okno podporządkowane MDI nie

jest wyświetlane.

W Twojej aplikacji jest jeszcze jedna pułapka, o której muszę wspomnieć. Kiedy naci-

śnie się przycisk zamknięcia okna podporządkowanego MDI, okno to zamiast się za-

mknąć, zostaje zminimalizowane. Możesz wierzyć lub nie, takie zachowanie się okien

jest uznawane przez Microsoft jako standardowe.

Jeżeli usuniesz jakiś formularz z listy formularzy tworzonych automatycz-
nie, musisz „ręcznie” utworzyć ten formularz przed jego użyciem. Jeżeli
nie utworzysz formularza, wskaźnik na niego pozostanie nieokreślony – nie
zostanie mu przypisana żadna konkretna wartość (pamiętaj o tym, że
wskaźniki tworzone są automatycznie w Delphi). Próba użycia takiego
wskaźnika będzie skutkować naruszeniem dostępu lub błędnym działaniem
programu.

background image

174

Część I

174

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

Rysunek 4.22.
Okno dialogowe
Project Options

Zachowanie standardowe czy nie, jest na pewno dziwne. Trzeba ten błąd naprawić, tak

aby okno zamykało się po naciśnięciu przycisku zamknięcia (tak, jak spodziewa się tego

każdy normalny człowiek). Aby to zrobić, wykonaj co następuje:

 

1. 

Otwórz okno podporządkowane MDI w Projektancie Formularzy. Upewnij się,

że wybrany jest sam formularz, a nie umieszczony na nim komponent 

Image

(jeżeli trzeba, wybierz formularz z listy wyboru komponentu).

 

2. 

Kliknij podwójnie w prawej kolumnie karty 

Events

 Inspektora Obiektów, obok

zdarzenia 

OnClose

. Zmodyfikuj procedurę 

TChild.FormClose

 tak, aby wyglą-

dała następująco:

Procedure TChild.FormClose(Sender: TObject; var Action:
TCloseAction);
begin
  Action := caFree;
end;

Wpisanie wartość 

caFree

 do zmiennej 

Action

 mówi VCL, żeby zamknęła okno

podporządkowane MDI i zwolniła przydzieloną mu pamięć. Teraz okna te po-
winny zachowywać się tak, jak trzeba.

 

3. 

Uruchom program i sprawdź jego działanie.

Podsumowanie

W Delphi IDE można się czasami pogubić, dopóki nie nabierze się trochę doświadczenia.

W tym rozdziale sporo się nauczyłeś na temat różnych elementów IDE. Następnie zapozna-

łeś się z używaniem projektów do tworzenia programów wykonywalnych. Dowiedziałeś się

także więcej o formularzach, oknach dialogowych i oknach podporządkowanych MDI.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

175

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

175

Poznałeś dobrze Inspektora Obiektów i jego użycie przy zmianie wartości właściwości

poszczególnych komponentów, poznałeś także okna dokowalne. Na koniec stworzyłeś

program, który wykonuje coś pożytecznego i ciekawego.

Warsztat

Warsztat składa się z pytań kontrolnych oraz ćwiczeń utrwalających i pogłębiających

zdobytą wiedzę. W razie trudności lub wątpliwości, odpowiedzi do tych pytań zamiesz-

czone są w Dodatku A. „Quiz – odpowiedzi”.

Pytania i odpowiedzi

υ 

Paski narzędzi Delphi nie zawierają przycisków poleceń, których używam

najczęściej. Czy mogę modyfikować paski narzędzi?

Oczywiście. Paski narzędzi są w pełni konfigurowalne. Można swobodnie doda-

wać i usuwać poszczególne ikony.

υ 

Umieściłem na formularzu kilka komponentów 

Label

 i próbowałem wybrać

je wszystkie poprzez przeciąganie wskaźnika myszy. Zamiast tego dostałem

kolejny duży komponent 

Label

. Co zrobiłem nie tak?

Zapomniałeś wyłączyć opcji wielokrotnego umieszczania komponentów. Wyłą-

cza się ją poprzez kliknięcie na narzędziu wyboru komponentu (ikona ze strzałką).

υ 

Usiłuję umieścić jedno z okien IDE poza obszarem Edytora Kodu. Za każdym

razem jednak okno to zostaje zadokowane  w Edytorze Kodu. Jak mogę temu

zapobiec?

Przyciśnij prawy klawisz myszy w obszarze okna i menu kontekstowym wyłącz

opcję 

Dockable

.

υ 

Kiedy przez przypadek wpiszę jakąś literę do właściwości 

Top

 mojego formu-

larza, zostaje wyświetlony komunikat o błędzie. Zdaję sobie sprawę,  że

powinienem wpisywać tam cyfry a nie litery, ale skąd właściwie biorą się takie

komunikaty?

Inspektor Obiektów wie, jakie wartości są prawidłowe dla poszczególnych wła-

ściwości. Litera nie jest prawidłową wartością dla właściwości typu 

Integer

,

więc wyświetlany jest komunikat o błędzie. W niektórych przypadkach za kontrolę

wprowadzanych danych odpowiedzialne są odpowiednie edytory właściwości.

υ 

Co muszę zrobić, żeby moja aplikacja była aplikacją MDI?

Główny formularz powinien mieć właściwość 

FormStyle

 ustawioną na 

fsMDIForm

,

a wszystkie okna podporządkowane MDI powinny mieć tę właściwość ustawioną

na 

fsMDIChild

.

background image

176

Część I

176

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

υ 

Jaka jest różnica między oknem dialogowym i zwykłym oknem aplikacji?

Właściwie nie ma żadnej różnicy. Formularz okna dialogowego może mieć stałe

wymiary, zamiast być skalowalne, przyciski 

OK

Anuluj

 i 

Pomoc

 i może nie mieć

ikon minimalizacji i maksymalizacji. Poza tym okno dialogowe jest jak każdy

inny formularz.

υ 

Czy mogę sprawdzić, czy w module, nad którym aktualnie pracuję nie ma

błędów, bez uruchamiania aplikacji?

Tak. Trzeba wybrać opcję 

Project | Syntax Check

 z menu głównego. Delphi

skompiluje wszystkie moduły, które zostały zmienione od czasu ostatniej

kompilacji i wypisze komunikaty o wszystkich wykrytych błędach.

Quiz

 

1. 

Jak wywołuje się okno dialogowe 

Customize

 (Dostosuj) głównego okna Delphi?

 

2. 

Jeżeli otwarte jest okno 

Customize

, w jaki sposób dodaje się przyciski do paska

narzędzi?

 

3. 

Jak usuwa się przyciski z paska narzędzi?

 

4. 

Jaki jest najprostszy sposób umieszczania na formularzu wielu takich samych

komponentów?

 

5. 

Jaki jest najprostszy sposób umieszczenia komponentu dokładnie na środku

formularza?

 

6. 

Wymień typy plików niezbędnych do zbudowania aplikacji w Delphi.

 

7. 

Jakiej metody VCL używa się do wyświetlenia formularza niemodalnego?

 

8. 

Jakiej metody VCL używa się do wyświetlenia formularza modalnego?

 

9. 

Jak można dołączyć do zdarzenia procedurę obsługi, która została już wcze-

śniej zdefiniowana?

 

10. 

Jak, używając Inspektora Obiektów, uaktywnić wartości właściwości typu

zbiorowego?

Ćwiczenia

 

1. 

Usuń z paska narzędzi 

View

 przyciski 

Pause

Step Over

 i 

Trace Into

. Dodaj

zamiast nich przyciski 

Compile

Build

 i 

Syntax Check

.

 

2. 

Przywróć paskowi narzędzi jest domyślne ustawienia.

 

3. 

Poświęć trochę czasu na przyjrzenie się wszystkim komponentom umieszczonym

na Palecie Komponentów. Umieść te szczególnie interesujące na formularzu

i poeksperymentuj z nimi.

background image

Rozdzia³ 4. 

 Środowisko zintegrowane (IDE)

177

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc

177

 

4. 

Utwórz na dysku twardym nowy katalog. Utwórz w Delphi nową aplikację.
Dodaj do projektu 3 nowe formularze (jeśli chcesz, mogą być puste). Zapisz
projekt do nowo utworzonego katalogu i uruchom program. Zamknij program.
Sprawdź teraz, jakie pliki znajdują się w katalogu aplikacji. Porównaj pliki,
które tam są z typami plików z tabeli 4.1.

 

5. 

Uruchom program „Przeglądarka plików graficznych”, który utworzyłeś wcze-
śniej. Otwórz kilka plików graficznych. Przeciągaj okna podporządkowane
MDI w obrębie okna głównego. Spróbuj wyciągnąć któreś z nich poza obszar
okna głównego. Co się dzieje?

 

6. 

Poeksperymentuj z dokowaniem różnych okien IDE w Edytorze Kodu.

 

7. 

Utwórz nową aplikację. Umieść na formularzu kilka różnych komponentów.
Kliknij na każdym z komponentów obserwując jednocześnie uważnie Inspektor
Obiektów.

 

8. 

Utwórz nowy, pusty formularz. Kliknij podwójnie w Inspektorze Obiektów
w prawej kolumnie obok właściwości 

Color

,  żeby wywołać okno dialogowe

wyboru koloru. Wybierz jakiś kolor i kliknij OK.

background image

178

Część I

178

C:\WINDOWS\Pulpit\Szymon\Delphi 4 dla każdego\04.doc