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