EDP C++ Builder

Transkrypt

EDP C++ Builder
Programowanie
komputerów
C++ Builder
Trzy filary:
• OOP – programowanie obiektowe
• RAD – szybkie tworzenie interfejsu GUI
• EDP – programowanie sterowane zdarzeniami
Programowanie w środowisku
Borland C++ Builder
C++ Builder: OOP
C++ Builder: EDP
VCL – biblioteka komponentów
• Gotowe komponenty
(przyciski, pola edycyjne pola wyboru, listy,
menu, paski narzędzi, okna dialogowe itd.)
• Stabilne działanie
• Znane użytkownikom
• Wyposażone w liczne właściwości, metody oraz
zdarzenia, ułatwiające tworzenie aplikacji
Aplikacja konsolowa:
C++ Builder: EDP
int a, b, c;
1 cout << "Podaj liczby"
2 cin >> a
cin >> b;
c = a + b;
cout << b;
Kolejność zdarzeń określona przez programistę
- użytkownik jest "odpytywany"
C++ Builder: EDP
uruchomienie
programu
Aplikacja "okienkowa" (z GUI):
oczekiwanie
na zdarzenia
2
1
3
4
Użytkownik wybiera kolejność
Program jest "rozproszony" – obsługa zdarzeń
filtracja
zdarzeń
typowe dział.
komponentów
ew. zmiana
wyglądu
"nietypowe" dział. komponentów,
zadania "dodatkowe"
zwolnienie
zasobów
obsługa zdarzeń
1
C++ Builder: EDP
C++ Builder: EDP
Rodzaje zdarzeń:
• Mysz:
Jakie zdarzenia musi obsługiwać program?
OnMouseDown, OnMouseUp, OnMouseMove
• Klawiatura:
OnKeyDown, OnKeyUp
• API/VCL:
OnCreate, OnShow, OnResize, OnEnter, OnExit,
OnCloseQuery, OnClose, OnPaint
Sekwencje zdarzeń
OnMouseMove-OnMouseDown-OnMouseUp-OnClick
OnKeyDown-OnKeyUp-OnKeyPress
OnKeyDown-OnKeyUp-OnClick
C++ Builder: RAD
Które zdarzenia nie są obsługiwane przez komponenty?
Nowe typy zmiennych
komponenty
Rozszerzenie standardu języka ANSI C++:
• bool – typ zmiennych logicznych
• AnsiString – typ do zapisu łańcuchów tekstowych,
zastępujący tablice znaków
zdarzenia
właściwości
Typ bool
Typ bool – typ tzw. zmiennych "boolowskich"
(tj. logicznych), przyjmujących wartości
• "true" (prawda) lub
• "false" (fałsz)
Zamiennie można też używać wartości 1 i 0
Typ bool
• Przypisanie wartości:
bool p, q, r;
p = (x>y) && (x!=z);
q = false;
// lub: q = 0;
r = true;
// lub: r = 1;
• Wykorzystanie w wyrażeniach
if (p) ...
if (!q) ...
// zamiast: if (p==true) ...
// zamiast: if (q==false) ...
2
Typ AnsiString
Typ AnsiString (lub w skrócie String) – umożliwia
wygodne manipulowanie łańcuchami znaków.
• Posiada szereg operatorów, a w tym przypisania (=),
dodawania (+) oraz relacji (<, ==, >)
• Posiada szereg metod, a w tym:
ToInt(), ToDouble() – zamiana łańcucha tekst. na
liczbę, w notacji całkowitej lub zmiennoprzecinkowej,
IsEmpty() – sprawdza, czy łańcuch jest pusty
Typ AnsiString
• Przypisanie wartości:
double x=3.15;
String a, b, c;
a = "Dowolny tekst";
b = x;
c = String() + "Wynik: " + x;
• Zamiana na liczbę:
double y;
y = b.ToDouble()
• Relacje
if (a==b && c.IsEmpty()) ...
Właściwości komponentów
Właściwości komponentów
Name
• Nazwa, pod jaką komponent jest widziany
w programie;
formalnie komponenty są deklarowane jako
wskaźniki będące elementami składowymi formularza
• Domyślnie: NazwaKlasy + numer,
np. Button1, Label2 itp.
• Można zmienić – obowiązują zwykłe zasady dla
identyfikatorów;
przydatne zwłaszcza, gdy komponentów jest więcej,
np. SpeedButton17 zmieniamy na BtnSaveFile
Caption
• Podpis – nieedytowalny tekst, widoczny na
komponencie;
Znak "&" powoduje, że następna litera jest
podkreślona i stanowi skrót klawiaturowy, np.:
&Start Æ Start (reaguje na [Alt] + s)
Text
• Tekst wpisany przez użytkownika – edytowalny
Właściwości komponentów
Właściwości komponentów
Visible
• Komponent widoczny (tak/nie)
Enabled
• Komponent dostępny (tak/nie)
Hint
• Treść podpowiedzi w dymku (AnsiString)
ShowHint
• Czy podpowiedź ma być wyświetlana (bool)
• Są to właściwości typu AnsiString
• Są to właściwości typu bool (logicznego):
3
Właściwości komponentów
Właściwości komponentów
Font
cechy czcionki, której używa komponent:
- Name – krój (np. „Bookman Old Style”)
- Size
– rozmiar w punktach
- Color
– kolor (np. clRed, clBlue itd.)
- Style
– pogrubienie (fsBold), kursywa (fsItalic)
Color
kolor tła
(można używać stałych clRed, clBlue, clGreen, ...)
Właściwości można modyfikować:
• w inspektorze obiektów
(właściwości na moment uruchomienia programu)
• programowo
Komponenty
Komponenty
Label - etykieta
• statyczny tekst, opisuje inne komponenty;
może aktywować wybrany komponent
Edit – pole edycyjne
• do wczytywania i wyświetlania danych
• właściwości:
- Caption – tekst wyświetlany przez etykietę
- FocusControl – komponent aktywowany p. etykietę
- Alignment – wyrównanie tekstu
- WordWrap – dzielenie tekstu na kilka linii
Edit1->Text = "";
Button1->Enabled = false;
Właściwości można odczytywać
int e = Button1->Enabled;
if (!Label2->Visible)
Labe1->Visible = true;
• właściwości:
- Text – tekst wpisany w polu edycyjnym
- ReadOnly – tylko do odczytu (wyśw. wyników)
• zdarzenia:
- OnChange – kiedy zmieni się tekst
Komponenty
Komponenty
Edit – jak korzystać z właściwości Text
• do wczytywania danych:
Button – przycisk
• inicjuje określone reakcje programu
double x;
int a;
x = Edit1->Text.ToDouble();
a = Edit2->Text.ToInt();
• do wyświetlania wyników:
Edit1->Text = x;
// int, float, double
Edit2->Text = "dowolny tekst";
Edit3->Text = String() + "suma:" + s;
• właściwości:
- Caption – tekst na przycisku (& -> podkreślenie)
- Default – przycisk domyślny
• zdarzenia:
- OnClick – kliknięcie lub Alt+litera lub [Enter]
4
Komponenty
Timer – czasomierz
• odmierza odstępy czasu
• właściwości:
- Interval – odstęp czasu między "tyknięciami" [ms]
- Enabled – "tyka" / "nie tyka"
• zdarzenia:
- OnTimer – po każdym upłynięciu interwału czasu
Projekt
Na projekt składa się 6 plików:
Project1.bpr
Unit1.h
Project1.res
Unit1.cpp
Project1.cpp
Unit1.dfm
Projekt
Projekt
Pliki modułu
• unit.dfm – "opis" formularza,
(komponenty i ich właściwości)
• unit.h – plik nagłówkowy modułu
(definicja klasy formularza)
• unit.cpp – kod źródłowy modułu
(funkcje obsługi zdarzeń)
Pliki projektu:
• project.bpr – opis projektu,
(wyszczególnienie el. składowych)
• project.res – plik zasobów
(m.in. obrazki, w tym ikona)
• project.cpp – plik z kodem źródłowym C++
(funkcja winmain, odpowiednik funkcji main)
Projekt
Projekt
Przetworzenie projektu w aplikację wymaga dwóch
czynności:
• Kompilacji
(tworzone są pliki pośrednie, .obj)
• Konsolidacji
(z plików pośrednich oraz dołączonych do projektu
bibliotek statycznych, .lib, tworzony jest plik
wykonywalny, .exe)
Przenoszenie projektu:
• W postaci źródłowej – konieczne jest przeniesienie
6 plików projektu, z zachowaniem struktury
folderów; pozostałe pliki (np. .obj) odtworzy
kompilator
• W postaci aplikacji – konieczne jest przeniesienie
wraz z plikiem .exe koniecznych bibliotek
dynamicznych (w tym m.in. vcl60.bpl i rtl60.bpl)
5
Projekt
Praca z projektami
Przenoszenie projektu:
• W postaci aplikacji – można też ustawić opcje
projektu tak, aby wszystkie biblioteki zostały
włączone do aplikacji:
Project / Options
- zakładka Linker , opcja Use dynamic RTL,
- zakładka Packages, opcja Build with runtime
packages
Bardzo użyteczne skróty:
• [F12] – przełączenie widoków:
formularz / kod źródłowy formularza
• [F11] – przełączenie widoków:
formularz / inspektor obiektów / kod źródłowy
• [Ctr]+[F12] – lista modułów
Praca z projektami
Zarządzanie projektami
Bardzo użyteczne skróty:
• [F9] – kompilacja i uruchomienie projektu
• [Ctr]+[F9] – tylko kompilacja projektu
Prawidłowe zarządzanie projektami daje gwarancję
zachowania projektów między zajęciami
(w przeciwnym wypadku pracę często trzeba zaczynać
na nowo, od zera)
Zarządzanie projektami
Zarządzanie projektami
Nowy projekt zapisujemy w oddzielnym folderze
Obowiązuje ścieżka:
--- Moje dokumenty
--- --- Programowanie
--- --- --- Nazwisko
--- --- --- --- Temat
Nowy projekt zapisujemy w oddzielnym folderze
• Należy wybrać polecenie File /Save all
(Plik / Zapisz wszystko)
• Znaleźć utworzony wcześniej lub utworzyć folder
na projekt
• Dwukrotnie kliknąć „Zapisz” – najpierw
zapisywany jest moduł (Unit1.cpp), następnie
projekt (Project1.bpr)
6
Zarządzanie projektami
• Teoretycznie, pliki projektu oraz modułu (bądź
modułów) mogą być zapisane w różnych folderach –
program nie protestuje.
• W praktyce, dopóki nie zrozumie się dokładnie
struktury projektu i reguł współdzielenia modułów,
zapisanie plików w różnych folderach powoduje, że
pracę trzeba zaczynać od nowa
Zarządzanie projektami
Przed uruchomieniem programu
• Wybieramy polecenie File /Save all (Plik / Zapisz
wszystko)
Zarządzanie projektami
Podczas działania programu
Uruchamiamy program
• Wybieramy polecenie Run / Run
(można skorzystać ze skrótu [F9] lub przycisku na
pasku narzędzi)
Jeżeli program się wysypie
• Nie należy włączać „pauza”
Podczas działania programu
Podczas działania programu
Jeżeli program się wysypie
• Potwierdzamy komunikat debuggera, ...
Jeżeli program się wysypie
• Potwierdzamy komunikat debuggera,
• Ponownie włączamy wykonanie programu, ...
7
Podczas działania programu
Zarządzanie projektami
Jeżeli program się wysypie
• Potwierdzamy komunikat debuggera,
• Ponownie włączamy wykonanie programu,
• Potwierdzamy komunikat o błędzie
Po zakończeniu zajęć
• Wybieramy polecenie File /Save all
(Plik / Zapisz wszystko)
• W folderze projektu kasujemy zbędne pliki:
- z tyldą (~),
- pliki pośrednie (.obj),
- plik debuggera (.tds) oraz
- aplikację (.exe)
• Kopiujemy, na dyskietkę lub pendrive’a,
cały folder z projektem
Zarządzanie projektami
Na kolejnych zajęciach
• Uruchamiamy środowisko
• Wybieramy polecenie File /Open project
(Plik / Otwórz projekt)
8