Borland C++ Builder_Cwiczenia.pdf
(
661 KB
)
Pobierz
Podstawy programowania RAD z u¿yciem narzêdzi Borland Delphi/C++ Builder
Jacek Matulewski
http://www.phys.uni.torun.pl/~jacek/
Podstawy programowania RAD
z użyciem narzędzi
Borland Delphi/C++ Builder
Ćwiczenia
Toruń, 21 marca 2003
Najnowsza wersja tego dokumentu znajduje się pod adresem
http://www.phys.uni.torun.pl/~jacek/dydaktyka/rad/rad1.pdf
Źrdła opisanych w tym dokumencie programw znajdują się pod adresem
http://www.phys.uni.torun.pl/~jacek/dydaktyka/rad/rad1.zip
I. Spis treści
I. Spis treści ........................................................................................................................................................................2
II. Podstawy programowania RAD ....................................................................................................................................3
1. Pojęcia podstawowe ...................................................................................................................................................3
2. Z czego składa się ápustyÑ projekt? ...........................................................................................................................3
3. Podstawy projektowania RAD ...................................................................................................................................3
4. TImage i TOpenDialog ..............................................................................................................................................3
7. Menu głwne, kontekstowe........................................................................................................................................3
5. Dodawanie form do projektu......................................................................................................................................3
6. Komponenty sterujące ................................................................................................................................................3
8. Pliki projektu: .............................................................................................................................................................4
9. Owner vs. Parent ........................................................................................................................................................4
10. Dynamiczne tworzenie obiektw VCL ....................................................................................................................6
III. Przykład wykorzystania komponentw VCL do szybkiego projektowania aplikacji ..................................................8
1. Notatnik zaprojektowany w oparciu o komponent TMemo .......................................................................................8
IV. Grafika w C++ Builder/Delphi...................................................................................................................................11
1. Kolory ......................................................................................................................................................................11
2. Płtno formy (Canvas) Î kreślenie linii, pira..........................................................................................................13
3. Dywan graficzny Î wykorzystanie tablicy
Canvas->Pixels
.............................................................................15
4. Negatyw (C++ Builder 3 lub nowszy)......................................................................................................................16
5. TShape......................................................................................................................................................................17
V. Multimedia Î TMediaPlayer........................................................................................................................................19
1. Odtwarzacz wideo (AVI) Î projektowanie RAD .....................................................................................................19
2. Odtwarzacz CD Audio Î funkcja z dynamicznym wywoływaniem obiektu ............................................................19
3. Odtwarzacz Wav/Mp3 Î prawie komponent ............................................................................................................20
VI. Klasy i komponenty w C++ Builder ..........................................................................................................................23
1. Klasa TSFolders .......................................................................................................................................................23
2. Klasa TStoper ...........................................................................................................................................................26
3. Komponenty TLink i TMail .....................................................................................................................................27
4. Komponenty TLink i TMail Î drobne modyfikacje .................................................................................................32
5. Zdarzenia komponentu TStoper (zadanie) ...............................................................................................................33
VII. Klasy i komponenty w Delphi ..................................................................................................................................34
1. Klasa TSFolders .......................................................................................................................................................34
2. Klasa TStoper ...........................................................................................................................................................36
3. Komponenty TLink i TMail .....................................................................................................................................38
4. Komponenty TLink i TMail Î drobne modyfikacje .................................................................................................42
5. Zdarzenia komponentu TStoper (zadanie) ...............................................................................................................43
VIII. Korzystanie z gotowych komponentw...................................................................................................................44
1. Skąd wziąć gotowe komponenty? ............................................................................................................................44
2. Instalowanie gotowych komponentw .....................................................................................................................44
IX. Gdzie szukać pomocy w sprawach C++ Buildera i Delphi? ......................................................................................45
Dodatek A: Tłumaczenie kodu pomiędzy Delphi i C++ Builderem ................................................................................46
2
II. Podstawy programowania RAD
1. Pojęcia podstawowe
RAD
= Rapid Application Development (błyskawiczne tworzenie aplikacji)
C++ Builder
Î zintegrowane środowisko programistyczne (edytor + kompilator + debugger) przeznaczone dla systemu
Microsoft Windows 9*/ME i NT/2000/XP oparte na języku C++
Delphi
Î j.w., ale w oparciu o Object Pascal
komponenty
Î obiekty (pochodne klasy TComponent) zarejestrowane w środowisku C++ Builder/Delphi i dostępne na
palecie komponentw w trakcie projektowania aplikacji
VCL
= Visual Component Library Î biblioteka komponentw dostarczanych przez Borland
Microsoft Visual Basic
Î konkurencja na rynku RAD.
2. Z czego składa się ápustyÑ projekt?
Funkcjonalność aplikacji stworzonej przez środowisko: Skompilować ápustyÑ projekt. Sprawdzić działanie aplikacji
(zmiana rozmiaru okna, przenoszenie, zamykanie, itp.)
Rodzaje form: BorderStyle, FormStyle, Caption, Arrow, itp.
3. Podstawy projektowania RAD
TLabel:
Dodać do projektu formy obiektu klasy TLabel i edytować jego własności (Caption, Caption z accel char np.
&Zamknij, Color, Font, Visible).
TButton:
Analogicznie umieścić na formie Button1 i edytować własności oraz metodę zdarzeniową związanej ze
zdarzeniem OnClick (zamknięcie aplikacji przez
Close()
i przez
Application->Terminate()
). Zmiana
własności Label1 podczas działania programu.
4. TImage i TOpenDialog
TImage:
Wrzucić na formę obiekt klasy TImage (zakładka VCL: Additional) i wczytać bitmapę. Dodać klawisz i w
metodzie zdarzeniowej obsłużyć czytanie obrazu z pliku funkcją
Image1->Picture->LoadFromFile()
.
TOpenDialog:
Poprawić projekt używając okna dialogowego do wyboru pliku (należy zadbać, aby pozwolić na
czytanie tylko z istniejącego pliku).
Zadanie:
zastąpić TImage komponentem TMemo i korzystając z TOpenDialog i TSaveDialog przygotować aplikację
analogiczną do Notatnika w Windows.
7. Menu głwne, kontekstowe
Edytor menu głwnego i menu kontekstowego. Wielopoziomowe, złożone menu. Do poprzedniej aplikacji dodać menu
głwne (Plik\Wczytaj..., Zapisz.... oraz Zamknij).
5. Dodawanie form do projektu
Dodać formę do projektu. Pojęcie
formy głwna
. Własność
TApplication->ShowMainForm
. Rżnica między
efektami metod
TForm->Show()
i
ShowModal()
.
6. Komponenty sterujące
Na Form2 z poprzedniego punktu umieść dwa suwaki klasy TScrollBar sterujące rozmiarem Form1 oraz
TForm2-
>Edit1
sterujący własnością
TForm1->Caption
. Określanie własności
TScrollBar->Min
, Max i korzystanie
z własności
Position
. Dołączenie
ProgressBar
odzwierciedlającego szerokość lub wysokość formy (
Form-
>OnResize
)
3
8. Pliki projektu:
C++ Builder
Delphi
Opis
*.mak lub *.bpr
*.dpr
Głwny plik projektu (rozszerzenie zależy od wersji Buildera)
*.dfo
Informacje o opcjach projektu (w C++ Builderze informacje te
umieszczone są w pliku projektu)
*.cpp i *.h
*.pas
Pliki z kodem C++; osobny plik o tej samej nazwie, co projekt i
po jednym dla każdej formy; ponadto użytkownik może pisać i
dodawać do projektu własne moduły
*.dfm
*.dfm
Pliki, w ktrych Builder przechowuje informacje o
zaprojektowanych przez użytkownika elementach formy (w obu
środowiskach format tych plikw jest identyczny)
*.ilc, *.ild, *.ilf, *.ils,
*.tds
Pliki tworzone przez kompilator dla przyspieszenia kompilacji Î
można je bez straty skasować
*.obj
*.dcu
Skompilowane formy i inne objekty tworzone przez
użytkownika w oddzielnych plikach; można je skasować jeżeli
posiadamy źrdła
*.res
*.res, *.dcr
Pliki zasobw (format plikw *.res jest identyczny w obu
środowiskach); plik *.dcr przechowuje zasoby (bitmapy,
kursowy), ktrych wymaga tworzony przez użytkownika
komponent Î np. ikonę jaka pojawi się na palecie.
*.~*
*.~*
Backupy edytora Î można je rwnież kasować
Warto przygotować sobie plik wsadowy (C++ Builder):
@echo off
del *.~*
del *.bak
del *.ilc
del *.ild
del *.ilf
del *.ils
del *.obj
del *.tds
del *.dat
del *.exe
9. Owner vs. Parent
Konwencja:
listingi zielone dotyczą C++ Buildera
,
a niebieskie Delphi
.
Komponent1
.
Owner
Î wskazuje na właściciela, tj. komponent odpowiedzialny za zwolnienie pamięci zajmowanej
przez
Komponent1
. Jest to zazwyczaj obiekt, w ktrego deklaracji znajduje się wskaźnik do
Komponent1
(np.
Form1). Usunięcie z pamięci właściciela spowoduje usunięcie także wszystkich obiektw, ktrego jest właścicielem.
Komponent1
.
Parent
Î wskazuje na rodzica, tj. obiekt wewnątrz ktrego znajduje się (czyli po prostu ánarysowany
jestÑ)
Komponent1
(mogą to być komponenty typu panel, grupa, forma i inne pochodne względem TWinControl).
Zmiana położenia rodzica spowoduje odpowiednią zmianę położenia dziecka.
Każdy komponent dziedziczący po TComponent zawiera listę wszystkich komponentw, ktrych jest właścicielem
Components (warto rwnież zwrcić uwagę na własność ComponentCount, ktra przechowuje informację o ilości
komponentw w tej liście), a komponent pochodny TWinControl posiada listę swoich dzieci Controls (i analogicznie
ControlCount).
Uwaga! Pewne zamieszanie wprowadza używanie terminu árodzicÑ przy opisie dziedziczenia klas. Ani Owner, ani
Parent nie ma z tym nic wsplnego.
4
Przykład dynamicznej zmiany własności Parent i wykorzystywania listy Components
Stwrzmy dwie formy wg wzoru:
Do przyciskw áCloseÑ i áFreeÑ na Form2 podłączmy metody wywołujące odpowiednio ukrycie formy i usunięcie
formy z pamięci.
Początkowo będą nas interesować dwa przyciski z wytłuszczonymi etykietami. Chcemy, aby kliknięcie formy, panelu i
groupboxa zmieniało właściciela tych przyciskw na kliknięte obiekty. W tym celu musimy ze zdarzeniem OnClick
każdego z tych obiektw związać metodę zawierającą polecenia typu (przykład dla Panel1Click):
Form1.Button1.Parent:=Panel1;
Form2.Button1.Parent:=Panel1;
Oczywiście w metodach odnoszących się do innych obiektw musi zmienić się wartość przypisana do własności
Parent. Po skompilowaniu możemy zobaczyć, że przyciski można przenosić nie tylko w obrębie formy, ale i pomiędzy
dwoma formami tej samej aplikacji. Przyciski zachowują swoją wielkość i relatywne położenie względem grnego
lewego rogu rodzica, więc jeżeli przycisk przenosimy np. z formy na mniejszy od niej panel może się zdarzyć, że
położenie przycisku spowoduje, że nie mieszcząc się w obrębie panelu nie będzie on w ogle widoczny.
Wykorzystując klawisz áFreeÑ można się przekonać, że przycisk áForm2.Button1Ñ zostanie usunięty wraz z Form2,
nawet jeżeli aktualnym rodzicem jest Form1. (Po usunięciu Form2 kliknięcie panelu, grupy lub Form2 spowoduje błąd,
gdyż nastąpi odwołanie do Form2.Button2, ktry już nie istnieje.)
Do klawisza áPodaj liczby dzieciÑ (osobno dla każdej z form) podłączmy metodę, ktra wyświetli na etykiecie formy
liczbę obiektw, ktrych każda z form jest właścicielem i rodzicem:
procedure TForm1.Button2Click(Sender: TObject);
var S :String;
begin
//Rodzic (Parent)
Str(Form1.ControlCount,S); Form1.Caption:='Parent:'+S;
Str(Form2.ControlCount,S); Form2.Caption:='Parent:'+S;
//Właściciel (Owner)
Str(Form1.ComponentCount,S); Form1.Caption:=Form1.Caption+', Owner:'+S;
Str(Form2.ComponentCount,S); Form2.Caption:=Form2.Caption+', Owner:'+S;
end;
Z kolei klawisz áKradnij dzieciÑ będzie służyć do zmiany rodzica komponentw, ktrych obecnym rodzicem jest
Form1:
procedure TForm2.Button4Click(Sender: TObject);
var i :Integer;
begin
for i:=0 to Form1.ControlCount-1 do Form1.Controls[0].Parent:=Form2;
//Ustawienie w tablicy Controls zmienia sie po kazdej
5
Plik z chomika:
fakiszon
Inne pliki z tego folderu:
Borland C++ Builder 6_Book.pdf
(12189 KB)
Borland C++ Builder_Cwiczenia.pdf
(661 KB)
Kurs_C++_Od_Zera_Do_Hackera_1.0_PL.rar
(41981 KB)
Matematyka Dyskretna krajka.pdf
(2087 KB)
spis.txt
(4 KB)
Inne foldery tego chomika:
Zgłoś jeśli
naruszono regulamin