Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie Wizualne WYKŁAD 1
Wojciech Pieprzyca
2
Organizacja 7 wykładów i 7 zajęć laboratoryjnych
Kolokwia na zajęciach 4 i 7. Na wykładzie kolokwia pisemne, na laboratorium krótkie zadania praktyczne - programy do samodzielnego (sic!) wykonania. Dla poprawnego zrozumienia wszystkich elementów przedmiotu „Programowanie Wizualne” WYSOCE wskazana jest znajomość podstaw programowania i programowania obiektowego.
3
Wstęp Borland Builder C++ jest narzędziem typu RAD (Rapid Application Development), które umożliwia szybkie tworzenie aplikacji w języku C++. Najbardziej widoczną zaletą środowisk typu RAD jest możliwość projektowania interfejsu użytkownika bezpośrednio w trybie graficznym poprzez rozmieszczanie komponentów na ekranie. Dzięki temu interfejs użytkownika można stworzyć nie pisząc ani jednej linijki kodu. Powyższa zaleta nie oznacza jednak, że znajomość języka C++ jest zbędna. Wręcz przeciwnie, po szybkim utworzeniu interfejsu użytkownika, cała logika działania aplikacji musi zostać zapisana w języku C++.
4
Środowisko IDE Wizualne środowisko programistyczne często określane jest terminem IDE (Integrated Development Environment co można przetłumaczyć dosłownie jako zintegrowane środowisko uruchomieniowe). Na wykładzie prezentowane będą środowiska IDE – Borland Builder C oraz Microsoft Visual C# Express. Na laboratoriach przykładowe programy tworzone będą w środowisku Borland Builder C++. Do prezentowanych zastosowań wystarczające będą powyższe narzędzia w wersjach darmowo udostępnianych przez producentów (tj. Borland Builder C++ w wersji Personal oraz Visual C# w wersji Express). Programy te dostępne są na mojej witrynie.
5
Środowisko IDE Okno środowiska Borland Builder C++ podzielone jest na 3 zasadnicze części: Paletę narzędzi oraz paletę komponentów, Inspektor obiektów, Formularz.
6
Środowisko IDE Paleta narzędzi wykorzystywana jest do wywoływania podstawowych operacji takich jak zapisywanie, otwieranie i kompilacja projektów. Paleta komponentów zawiera komponenty (obiekty wykonujące określone zadania), które można umieścić na formularzu. Przykładowe komponenty to np. pola edycyjne, pola wyboru, menu, itp. Paleta komponentów podzielona jest na zakładki, które zawierają różne grupy komponentów np. grupa komponentów ogólnych, komponenty bazodanowe, komponenty sieciowe, itd. Aby umieścić komponent na formularz wystarczy wybrać go na palecie komponentów, a następnie kliknąć na formularz.
7
Środowisko IDE Formularz jest wizualizacją interfejsu użytkownika danej aplikacji (okna programu). Zawiera ona wszystkie komponenty, które przeciągnęliśmy na formularz z palety komponentów. Inspektor obiektów – znajdują się w nim informacje na temat właściwości oraz zdarzeń dla poszczególnych komponentów. Każdy komponent ma odpowiadające danemu typowi obiektów właściwości np. nazwa, szerokość, długość, kolor, wpisany tekst, itp. Właściwości komponentu kontrolują jego wygląd i sposób zachowania. Właściwości komponentów (zakładka Properties) będą mogły być zmieniane przy użyciu inspektora obiektów lub z poziomu kodu.
8
Zdarzenia Zdarzenia występują w momencie interakcji użytkownika z komponentem. Dla przykładu zdarzeniem może być dwukrotne kliknięcie komponentu przycisk lub naciśnięcie na klawiaturze klawisza albo zmiana rozmiaru okna programu, itp. Tworzenie programów w środowiskach RAD opiera się w dużej mierze na obsłudze zdarzeń tzn. pisaniu funkcji, które będą wywoływane w momencie zajścia danego zdarzenia (np. po kliknięciu myszą na przycisku). W celu utworzenia funkcji obsługi zdarzenia danego komponentu, należy wybrać odpowiedni komponent, a następnie w inspektorze obiektów, w zakładce Events kliknąć dwukrotnie obok wybranego zdarzenia. Spowoduje to otwarcie nowego okna tzw. edytora kodu.
9
Biblioteka Visual Component Library
Biblioteka VCL została zaprojektowana przez firmę Borland, najpierw na potrzeby środowiska Delphi (środowisko programistyczne dla języka Pascal). Po odpowiednich przekształceniach i zmianach udało się ją zaadaptować do wykorzystania w środowisku Builder C++. Biblioteka VCL zawiera szereg komponentów, które umożliwiają tworzenie elementów interfejsu użytkownika, a także dostarczają inną funkcjonalność. Każdy komponent ma przyporządkowane właściwości oraz zdarzenia, które mogą być obsługiwane. Komponent to obiekt wykonujący w aplikacji określone zadanie.
10
Pierwszy program * Jak przystało na pierwszy program będzie on bardzo prosty i całe jego zadanie polegało będzie na wyświetleniu okna dialogowego z napisem „Witaj” po naciśnięciu przycisku znajdującego się na formularzu. Po otwarciu programu Borland Builder C++ powinniśmy zobaczyć pusty formularz. Jeżeli tak nie jest to należy wybrać z menu opcję File/New Application. Z palety komponentów, z zakładki Standard, przeciągamy na formularz komponent o nazwie Button (czyli przycisk).
11
Pierwszy program Klikamy na przycisku i w inspektorze obiektów ustalamy dwie właściwości komponentu Name oraz Caption. Name to nazwa komponentu, którą możemy posłużyć się w kodzie programu. Caption to napis pojawiający się na przycisku. Zmieniamy właściwość Name na b1 oraz Caption na OK. Na zakładce Events w Inspektorze obiektów klikamy dwukrotnie obok zdarzenia onClick (oznacza ono dwukrotne kliknięcie myszą). Automatycznie zostaniemy przeniesieni do edytora kodu, w którym utworzony został szkielet funkcji obsługi zdarzenia kliknięcia myszą na przycisku.
12
Pierwszy program void __fastcall TForm1::b1Click(TObject *Sender) { }
Automatycznie utworzona funkcja (metoda) obsługi zdarzenia początkowo składa się tylko z nagłówka i nawiasów ograniczających. Nagłówek funkcji informuje nas o tym, iż funkcja jest częścią klasy TForm1 i nosi nazwę b1Click. Jako argument funkcja ta przyjmuje wskaźnik, który wskazuje na nadawcę komunikatu o zdarzeniu tj. obiekt, który wygenerował zdarzenie obsługiwane przez daną funkcję.
13
Pierwszy program W funkcji obsługi zdarzenia dodajemy linijkę kodu, która odpowiedzialna jest za wyświetlanie okna dialogowego z napisem Witaj. ShowMessage(”Witaj”); Naciśnięcie klawisza F9 spowoduje uruchomienie programu. Po kliknięciu przycisku OK wyświetlone zostanie okno dialogowe z napisem ”Witaj”.
14
Projekt w Builder C++ * Każda tworzona aplikacja w systemie Borland Builder C++ widziana jest jako projekt. Projekt jest zestawem logicznie powiązanych plików niezbędnych do działania aplikacji. Aby bezpiecznie zapisywać i przenosić projekty pomiędzy komputerami konieczne jest zapisanie i skopiowanie wszystkich niezbędnych plików. Najbezpieczniejszą metodą jest stworzenie dla każdego projektu nowego folderu na dysku i używanie opcji Save All (zapisz wszystko) dostępnej z menu File lub poprzez ikonę
15
Projekt w Builder C++ Kompilacja i uruchomienie programu możliwe jest poprzez naciśnięcie klawisza F9. Aby uzyskać plik wykonywalny z programem (rozszerzenie *.exe) należy wybrać opcję Project/Build all projects. Plik wykonywalny zostanie zapisany w aktualnym katalogu roboczym projektu. Minimalny zestaw plików tworzony przy otwarciu nowego projektu składa się z 6 plików: Plik źródłowy projektu, Plik źródłowy formularza głównego, Plik nagłówkowy formularza głównego, Plik zasobów formularza głównego, Plik zasobów projektu, Plik ze skryptem projektu.
16
Projekt w Builder C++ Plik źródłowy projektu – zawiera definicję funkcji WinMain() oraz dodatkowych operacji związanych z uruchamianiem aplikacji. W pliku tym zwykle znajdują się instrukcje odpowiedzialne za utworzenie i pokazanie formularza głównego (pierwszego okna programu) np. Project1.cpp. Plik źródłowy i nagłówkowy formularza głównego – to pliki zawierające definicję i deklaracje klasy implementującej główny formularz aplikacji. Każdy formularz utworzony w ramach aplikacji ma swój plik źródłowy i nagłówkowy np. Unit1.cpp, Unit1.h. Plik zasobów formularza – plik binarny opisujący zawartość formularza głównego np. Project1.res.
17
Projekt w Builder C++ Przy tworzeniu projektu tworzony jest także skrypt projektu zawierający informacje o używanych parametrach kompilacji, nazwach plików źródłowych, wykorzystywanych bibliotekach, itp. Np. Project1.bpr. Etapy kompilacji projektu: Kompilator przetwarza pliki źródłowe i nagłówkowe i tłumaczy je na pliki binarne tzw. kod pośredni (pliki obj). Kompilator zasobów na podstawie źródłowych plików zasobów generuje pliki binarne zawierające opis wyglądu aplikacji (formularzy). Program łączący (linker) scala pliki zawierające kod pośredni z plikami opisu wyglądu aplikacji, zasobami i wykorzystywanymi bibliotekami z program finalny. W wyniku procesu kompilacji oprócz pliku exe powstają także inne pliki.
18
Projekt w Builder C++ Pliki powstałe w wyniku utworzenia i kompilacji projektu: *.cpp – pliki źródłowe w języku C++, *.dfm – definicje formularzy, ich właściwości oraz opis zawartych na nich komponentów, *.dsk – definicja środowiska pracy (czyli opcje programu Builder C++), w pliku tym zapamiętane są także inne dane np. informacje o położeniu i rozmiarze poszczególnych okien programu Builder C++ przed ostatnim zamknięciem projektu, itp. *.exe – plik wykonywalny programu, *.h – pliki nagłówkowe zawierające deklarację klas zdefiniowanych w plikach źródłowych. *.bpr – skrypt projektu, zawieraja informacje o używanych parametrach kompilacji, nazwach plików źródłowych, wykorzystywanych bibliotekach, itp.
19
Projekt w Builder C++ * *.obj – pliki przechowujące kod pośredni (object code) *.res – plik zasobów formularza głównego i aplikacji *.tds – plik zawiera tzw. tablice symboli programu uruchomieniowego. Zawartość ta jest wykorzystywana przy testowaniu aplikacji za pomocą debuggera. Do tego, aby możliwe było odtworzenie zapisanego projektu niezbędne są pliki z rozszerzeniem cpp, h, dfm, dsk i bpr. Pozostałe pliki tworzone są każdorazowo przy kompilacji programu więc np. przy kopiowaniu projektu można je pominąć (te pliki to pliki z rozszerzeniem obj, res, tds i exe).
20
Odwołania do komponentów
Zazwyczaj odwołujemy się do konkretnej właściwości lub metody danego komponentu: nazwaFormularza->nazwaKomponentu->wlasciwosc nazwaFormularza->nazwaKomponentu->metoda(arg) Np. aby odczytać zawartość pola edycyjnego użyjemy instrukcji: String nazwisko = mainForm->nazwiskoEdit->Text; Z kolei aby usunąć zawartość pola edycyjnego możemy użyć bezargumentowej metody Clear: mainForm->nazwiskoEdit->Clear();
21
Odwołania do komponentów
Dostęp do właściwości i metod komponentów realizowany jest poprzez operator ->. Jest tak ponieważ wszystkie komponenty biblioteki VCL tworzone są dynamicznie i dostęp do nich odbywa się poprzez wskaźnik. W chwili umieszczenia komponentu na formularzu, w kodzie programu dodawana jest odpowiednia deklaracja i tworzony jest wskaźnik na obiekt odpowiedniej klasy odpowiadającej dodanemu komponentowi.
22
Odwołania do komponentów *
Deklaracje komponentów dodawane są do plików nagłówkowych (rozszerzenie .h). Przejście do pliku nagłówkowego z głównego pliku źródłowego możliwe jest poprzez naciśnięcie kombinacji klawiszy Ctrl+F6. Występują tam deklaracje takie jak poniżej: TButton *Button1; TLabel *Label1; TEdit *Edit1;
23
Rodzaje właściwości Ogólnie właściwości możemy podzielić na:
- dostępne wyłącznie do odczytu (read-only properties). dostępnie wyłącznie do zapisu (write-only properties). - dostępne tylko w czasie wykonania programu (runtime-only properties). Właściwości dostępne tylko w czasie wykonania programu nie są widoczne w inspektorze obiektów w czasie projektowania aplikacji. Jedyny sposób odwołania się do nich możliwy jest poprzez kod programu.
24
Właściwości złożone Większość właściwości to pola typu prostego np. liczby, tekst, itp. Jednak niektóre właściwości mają charakter złożony np. tablicowy. Przykładem takiej właściwości jest Lines komponentu Memo przechowującego tekst. Właściwość Lines zawiera tablicę, w której zapisane są kolejne linie tekstu znajdujące się w ramach komponentu Memo. Możemy odwołać się do poszczególnych linii tekstu w tym komponencie podobnie jak do zwykłej tablicy: Memo->Lines->Strings[0] Memo->Lines->Strings[1] …
25
Właściwości złożone Część z właściwości nie przechowuje ani wartości typów prostych, ani złożonych, ale zawiera w sobie inne obiekty zdefiniowane w bibliotece VCL. Przykładem jest właściwość Font opisująca czcionkę używaną przez dany komponent. Czcionka zazwyczaj definiowana jest poprzez krój, wielkość, kolor oraz inne atrybuty. Każdy z tych atrybutów stanowi osobny obiekt biblioteki VCL. Właściwości tego typu można poznać po występującym przy nich w inspektorze obiektów znaku +, który służy do rozwinięcia listy wszystkich opcji (obiektów) możliwych do modyfikacji.
26
Właściwości złożone Kolejnym rodzaje właściwości jest właściwość typu zbiór. Jest to skończony zestaw wartości możliwych do przyjęcia przez obiekt. Przykładem zbioru jest pole Style właściwości Font. Zbiór ten składa się z elementów określających wygląd czcionki. Dostępne elementy to fsBold (pismo pogrubione), fsItalic (pismo pochylone), fsUnderline (pismo podkreślone), fsStrikeOut (pismo przekreślone). Zbiór może składać się z jednego lub wielu elementów. W szczególności może też nie zawierać żadnego elementu.
27
Właściwości złożone * Jeszcze innym złożonym rodzajem właściwości są pola wyliczeniowe. Pole wyliczeniowe to zestaw wzajemnie wykluczających się opcji tzn. że wybrana może być tylko jedna z nich. Wybór opcji dla pola wyliczeniowego jest realizowany poprzez listę wyboru z której wybiera się jedną opcję. Przykładem właściwości typu wyliczeniowego jest właściwość o nazwie Cursor, która wskazuje na rodzaj używanego w danej chwili kursora.
28
Zdarzenia Graficzne systemy operacyjne zazwyczaj sterowane są zdarzeniami. Oznacza to, że podstawą podejmowanych działań przez system są generowane zdarzenia np. kliknięcie myszą, naciśnięcie klawisza, zmiana rozmiaru okna programu, wpisanie tekstu, odebranie transmisji sieciowej, itp. Po zajściu zdarzenia Windows generuje komunikat przesyłany do poszczególnych elementów systemu i aplikacji. Poszczególne elementy aplikacji (komponenty) wychwytują komunikaty, które w jakiś sposób są z nimi związane i reagują na nie w określony sposób (sposób ten jest określony przez programistę w metodzie obsługi zdarzenia).
29
Dynamiczne tworzenie komponentów
Istnieje możliwość istnienia komponentu w programie bez jego jawnego umieszczenia na formularzu. Jest to możliwe poprzez dynamiczne utworzenie komponentu w czasie uruchomienia programu poprzez odpowiednie instrukcje zapisane w kodzie programu. Dla przykładu poniższe instrukcje tworzą komponent typu przycisk o nazwie okButton oraz ustalają jego podstawowe właściwości. TButton *okButton = new TButton(”OK”); okButton->Left = 20; okButton->Top = 100; okButton->Width = 75; okButton->Height = 25;
30
Łańcuchy tekstowe w bibliotece VCL
Klasy dotyczące łańcuchów tekstowych zawarte w bibliotece VCL ułatwiają manipulowanie ciągami znakowymi w porównaniu do funkcji domyślnie udostępnionych w języku C. Podstawową klasą operującą na łańcuchach tekstowych jest klasa AnsiString. Aliasem (zamiennikiem) nazwy tej klasy jest po prostu String. Deklaracja zmiennej i użycie operatora przypisania String txt = ”przykładowy ciąg znaków”; String l1 = 10; String l2 = 10.2; String znak = ‘a’;
31
Łańcuchy tekstowe w bibliotece VCL *
Klasa AnsiString ma przeciążony konstruktor oraz operator przypisania = dzięki czemu możemy do obiektów tej klasy przypisać również wartości typu liczbowego (integer,double) oraz znak (char), które są automatycznie konwertowane na typ String. W języku C ciąg znaków był deklarowany jako tablica znaków np. char txt[20], a zamiast operatora przypisania stosowaliśmy funkcję strcpy. Niektóre metody klasy AnsiString: c_str – zwraca wskaźnik (char *) na łańcuch tekstowy zawarty w danym obiekcie (bywa użyteczne jeżeli chcemy użyć tego łańcucha jako argumentu do innej metody, która przyjmuje jako argument typ wskaźnikowy char * a nie String).
32
Łańcuchy tekstowe w bibliotece VCL *
Delete – usuwa fragment tekstu z łańcucha Insert – wstawia tekst w określone miejsce łańcucha Length – zwraca długość tekstu LowerCase – zamienia duże litery na małe Pos – ustala pozycje (numer pierwszego znaku) podanego ciągu znaków do wyszukania SubString – zwraca ciąg znaków z łańcucha tekstowego o zadanej długości, rozpoczynający się na zadanej pozycji (np. 1,10 – od 1 znaku, 10 kolejnych znaków) ToDouble – zamienia łańcuch tekstowy na liczbę rzeczywistą typu Double ToInt – zamienia łańcuch tekstowy na liczbę całkowitą typu Integer Trim – usuwa znaki spacji z początku i końca tekstu UpperCase – zamienia małe litery na duże
33
Łańcuchy tekstowe w bibliotece VCL
Niektóre z powyższych metod nie operują bezpośrednio na tekście łańcucha na rzecz którego są wykonywane, ale zwracają nowy, odpowiednio zmieniony łańcuch tekstowy. Tak jest np. z metodą UpperCase(). String imie = ”Wojtek”; imie.UpperCase(); Wywołanie w powyższy sposób nie przyniesie żadnego rezultatu. Metoda UpperCase zwraca bowiem łańcuch z tekstem zamienionym na duże litery, ale nie zmienia tekstu w łańcuchu imie. Aby tak się stało należy dokonać jeszcze jednego przypisania tzn. imie=imie.UpperCase()
34
Łańcuchy tekstowe w bibliotece VCL *
Uwaga techniczna. Ze względu na to, że pierwotnie biblioteka VCL była projektowana dla języka Pascal, nie zachowuje ona w niektórych komponentach pewnych właściwości języka C. Na przykład w niektórych właściwościach tablicowych elementy są numerowane indeksem od 1, a nie klasycznie od 0, jak to ma miejsce w C. Może to czasami nastręczać kłopoty, osobom przyzwyczajonym do programowania w języku C. Odniesienie się do 1 znaku zmiennej nazwisko. String nazwisko = ”Kowalski”; ShowMessage(nazwisko[1]); //wyświetla pierwszy znak K ShowMessage(nazwisko[0]); //błąd, nie wyświetla niczego
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.