Programowanie komputerów Programowanie w środowisku Borland C++ Builder C++ Builder Trzy filary: OOP programowanie obiektowe RAD szybkie tworzenie interfejsu GUI EDP programowanie sterowane zdarzeniami 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: int a, b, c; 1 2 cout << "Podaj liczby" cin >> a cin >> b; c = a + b; cout << b; Kolejność zdarzeń określona przez programistę -użytkownik jest "odpytywany" C++ Builder: EDP Aplikacja "okienkowa" (z GUI): 2 C++ Builder: EDP uruchomienie programu oczekiwanie na zdarzenia 1 3 4 filtracja zdarzeń typowe dział. komponentów ew. zmiana wyglądu Użytkownik wybiera kolejność Program jest "rozproszony" obsługa zdarzeń zwolnienie zasobów "nietypowe" dział. komponentów, zadania "dodatkowe" obsługa zdarzeń
C++ Builder: EDP C++ Builder: EDP Rodzaje zdarzeń: Mysz: 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 Jakie zdarzenia musi obsługiwać program? Które zdarzenia nie są obsługiwane przez komponenty? C++ Builder: RAD 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 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 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)... // zamiast: if (p==true)... if (!q)... // zamiast: if (q==false)...
Typ AnsiString 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 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())... 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 Są to właściwości typu AnsiString 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 bool (logicznego):
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 Edit1->Text = ""; Button1->Enabled = false; Właściwości można odczytywać int e = Button1->Enabled; if (!Label2->Visible) Labe1->Visible = true; 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 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: 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; Button przycisk inicjuje określone reakcje programu właściwości: - Caption tekst na przycisku (& -> podkreślenie) - Default przycisk domyślny zdarzenia: - OnClick kliknięcie lub Alt+litera lub [Enter]
Komponenty Timer czasomierz odmierza odstępy czasu Na projekt składa się 6 plików: Project1.bpr Unit1.h 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 Project1.res Project1.cpp Unit1.cpp Unit1.dfm 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) 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)
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 Praca z projektami 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 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) 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)
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 Przed uruchomieniem programu Wybieramy polecenie File /Save all (Plik / Zapisz wszystko) Uruchamiamy program Wybieramy polecenie Run / Run (można skorzystać ze skrótu [F9] lub przycisku na pasku narzędzi) Podczas działania programu Jeżeli program się wysypie Nie należy włączać pauza Podczas działania programu Jeżeli program się wysypie Potwierdzamy komunikat debuggera,... Podczas działania programu Jeżeli program się wysypie Potwierdzamy komunikat debuggera, Ponownie włączamy wykonanie programu,...
Podczas działania programu 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 Na kolejnych zajęciach Uruchamiamy środowisko Wybieramy polecenie File /Open project (Plik / Otwórz projekt)