Zasady Programowania (Projektowanie) – C++
Transkrypt
Zasady Programowania (Projektowanie) – C++
Zasady Programowania (Projektowanie) – C++ - część 6 1/9 Programowanie Wizualno Obiektowe (3) Zasady Programowania (Projektowanie) C++ – część 6 Temat: Programowanie Wizualno Obiektowe. Komponenty podstawowe , aplikacje wielookienkowe, menu z przyciskami szybkiego dostępu, okna dialogowe. Zadanie: Należy napisać aplikację, która będzie umożliwiała tworzenie spisu osób (imię i nazwisko). W aplikacji wykorzystać menu główne, menu przycisków szybkiego dostępu, pola edycyjne, etykiety, oraz komponent TMemo. Wyjście z programu zrealizować poprzez okno dialogowe. Dodatkowo: Zapisywanie danych do pliku i odczytywanie danych z pliku zrealizować korzystając ze standardowych okien dialogowych do otwierania i zapisywania plików. 1. Otwieramy nową aplikację File>NewApplication 2. Zapisujemy projekt przy pomocy File>Save All w katalogu gdzie będzie kompilowany nasz projekt 3. Tworzymy interfejs Rysunek 1. Interfejs programu i spis komponentów Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 2/9 Programowanie Wizualno Obiektowe (3) Dodajemy odpowiednie komponenty w kolejności 1 pole edycyjne Memo (paleta Standard) o nazwie (własność Name): ● memOsoby 2 etykiety Label (paleta Standard) 2 pola edycyjne (paleta Standard) o nazwach ● edtImie ● edtNazwisko 1 komponent Button (paleta Standard) o nazwie: ● btnDodaj 1 komponent MainMenu (paleta Standard) 1 komponent Toolbar (paleta Win32) 1 komponent ImageList (paleta Win32) 1 komponent OpenDialog (paleta Dialogs) 1 komponent SaveDialog (paleta Dialogs) 4. Ustawienie własności formularza W celu wyświetlania nazwy programu należy wpisać ją w pole Caption Formularza. Przykładowo może być to nazwa 'Program Osoby v.1'. 5. Projektowanie menu głównego. Po kliknięciu na komponent MainMenu otworzy się tzw. Menu Designer służący do zaprojektowania głównego menu tekstowego. Z każdą opcją można skojarzyć odpowiednią kombinacje klawiszy która ją wywołuje. Skróty klawiszowe można dodać do każdego elementu menu zmieniając jego własność ShortCut->Skrót. Należy zaprojektować menu główne tak, aby miało następujące funkcje - Plik - Otwórz Plik (skrót Ctrl+L) - Zapisz do Pliku (skrót Ctrl+S) - Koniec (skrót Ctrl+Q) Rysunek 2. Projektowanie głównego menu Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 3/9 Programowanie Wizualno Obiektowe (3) 6. Wczytywanie danych osób Piszemy odpowiednie procedury do wczytywania danych osób i wypisywania ich przy pomocy komponentu memOsoby. Wczytywanie danych osób można zrealizować poprzez wciśnięcie przycisku btnDodaj czyli poprzez obsługę zdarzenia OnClick tego przycisku. Dodatkowo wykorzystuje się metodę Lines->Add(tekst) która dodaje nową linijkę z tekstem do zawartości komponentu memOsoby. Metoda realizująca dodawanie osób: void __fastcall TForm1::btnDodajClick(TObject *Sender) { this->memOsoby->Lines->Add(this->edtImie->Text+" "+this->edtNazwisko->Text); } //--------------------------------------------------------------------------- 7. Projektowanie menu przycisków szybkiego dostępu. Menu przycisków szybkiego dostępu zwykle znajduje się pod głównym menu i zawiera przyciski do najważniejszych opcji menu głównego oraz programu. Menu przycisków szybkiego dostępu projektuje się wykorzystując komponenty ImageList (paleta Win32), oraz Toolbar (paleta Win32). Dodawanie przycisków szybkiego dostępu wykonuje się w następujący sposób: Kliknąć na komponent ImageList. Powinno pokazać się okienko do ustawiania własności obrazków, które później pokażą się na przyciskach szybkiego dostępu. Zostało to przedstawione na rysunku 3. Rysunek 3. Okno do ustawiania własności listy obrazków Każdy z rysunków, które indeksowane są od 0, można dodać wciskając Add i wybierając odpowiedni rysunek z katalogu: C:/Program Files->Common Files->Borland Shared->Images->Buttons UWAGA: Nie zawsze katalog znajduje się na dysku C, może też mieć inną nazwę. Katalog ten jest tworzony w momencie instalacji oprogramowania firmy Borland. Z tego powodu mogą wystąpić różnice jeśli wykorzystywany jest inny kompilator. Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 4/9 Programowanie Wizualno Obiektowe (3) Jeśli podczas wybrania rysunku dzieli się on na dwa rysunki należy jeden z nich skasować (szary rysunek pokazujący się podczas dezaktywacji przycisku). Wybrać jeden rysunek odpowiednio do każdej z funkcji wywoływanej z paska skrótów. W przypadku opisywanego programu mogą być to trzy funkcje: otwieranie pliku, zapisywanie do pliku, wyjście z programu. Kolejne przyciski można dodać klikając prawym przyciskiem myszy na komponent ToolBar, po otworzeniu menu pomocniczego, przy pomocy komendy New Button, oraz ewentualnie przerwę pomiędzy grupami przycisków przy pomocy komendy New Separator (utworzyć 3 przyciski). Chcąc powiązać przyciski z rysunkami należy we własnościach komponentu ToolBar ustawić własność Images na nazwę komponentu z listą obrazków ImageList np. ImageList1. 8. Wykorzystanie standardowych okien dialogowych (Dialogs) Okna dialogowe pozwalają na komunikacje z użytkownikiem i albo czekają na jego reakcję jak wybór, lub potwierdzenie albo przekazują mu informacje np. o programie, o wykonaniu zadania. Ponieważ są oddzielnymi formularzami, dodaje się je podobnie jak formularze. Należą one jednak do wyspecjalizowanych klas formularzy. W aplikacji zostanie wykorzystane standardowe okno dialogowe, przy pomocy którego będzie możliwe zamknięcie aplikacji dopiero po uzyskaniu potwierdzenia od użytkownika. Nie zamykając projektu dodajemy do niego okno dialogowe (nowy formularz) wybierając opcje File->New->Other->Dialogs i wybierając jedno z dostępnych standardowych okien dialogowych Standard Dialog. Rysunek 4. Standardowe okno dialogowe do zakończenia pracy z programem. Następnie należy w pliku związanym z tym oknem dialogowym (np. Unit2.h) sprawdzić, w linii zdefiniowanych zmiennych jak nazywa się obiekt odpowiadający za okno dialogowe TOKBottomDlg *OKBottomDlg; //--------------------------------------------------------------------__fastcall TOKBottomDlg::TOKBottomDlg(TComponent* AOwner) : Tform(AOwner) Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 5/9 Programowanie Wizualno Obiektowe (3) Chcąc umożliwić wywoływanie okienka dialogowego z programu głównego, oraz pobierać z niego informacje, należy dołączyć plik z nim związany przy pomocy dyrektywy #include na początku programu związanego z formularzem w którym to okno dialogowe będzie wywoływane. #include "Unit2.h" Otwarcie okienka dialogowego wykonuje się poprzez wybranie metody (analogicznie do przełączania pomiędzy formularzami): OKBottomDlg->Show() - możliwe jest przełączanie pomiędzy oknami programu OKBottomDlg->ShowModal() -przełączanie pomiędzy oknami programu jest zablokowane Informacje o tym, który przycisk okna dialogowego został naciśnięty można uzyskać sprawdzając własność okienka dialogowego ModalResult. Każdy z przycisków ma przyporządkowaną wartość o standardowej nazwie: Przycisk ‘OK’ - OKBottomDlg->ModalResult==mrOk Przycisk ‘Cancel’ - OKBottomDlg->ModalResult==mrCancel Zrealizować zamykanie programu poprzez obsłużenie zdarzenia OnClick elementu ‘Koniec’ głównego menu aplikacji oraz przycisku szybkiego dostępu w menu z przyciskami szybkiego dostępu w okienku głównym. Wywołane zostanie okno dialogowe w trybie modalnym (ShowModal), oczekujące na naciśnięcie któregoś przycisku. Okno dialogowe będzie zwracało wartość modalną ModalResult informującą, który przycisk został wciśnięty. Można zrealizować to w postaci następującej procedury void __fastcall TForm1::Wyjscie1Click(TObject *Sender) { OKBottomDlg->ShowModal(); if (OKBottomDlg->ModalResult==mrOk){ this->Close(); }; } //--------------------------------------------------------------------------- UWAGA: Należy zwrócić uwagę na wykorzystanie identyfikatora ' this->', w tym przypadku ponieważ OKBottomDlg jest oddzielnym formularzem, nie jest on elementem (obiektem) należącycym do głównego formularza aplikacji. Identyfikator 'this->', odnosi się do aktualnego formularza i zakres jego wykorzystania jest tylko 'wewnątrz' danego fomularza i kodu związanego z danym formularzem (programowanie obiektowe). Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 6/9 Programowanie Wizualno Obiektowe (3) Napisaną aplikację zmodyfikować poprzez dodanie następujących elementów 1. Wpisywanie danych z pliku tekstowego do pola Memo z wykorzystaniem okna dialogowego, wypisywanie informacji o pliku. 2. Wpisywanie danych do pliku tekstowego z pola Memo z wykorzystaniem okna dialogowego, wypisywanie informacji o pliku 3. Dodanie licznika osób wpisanych przez użytkownika 4. Czyszczenie pola Memo i zerowanie licznika osób Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 7/9 Programowanie Wizualno Obiektowe (3) 9.1 Wczytywanie pliku tekstowego do pola memOsoby Aby zrealizować tą opcję, należy skorzystać ze standardowego okna dialogowego służącego do otwierania plików OpenDialog. We własnościach komponentu OpenDialog określić pliki, które mogą być wyświetlane wybierając własność Filter i definiując filtry do wyboru odpowiednich plików wykorzystując tzw. edytor filtrów FilterEditor i modyfikując pola: Filter Name – nazwa odpowiedniego filtru np. ‘plik tekstowy’, Filter – możliwe do otwierania rozszerzenia np. ‘*.txt’. Rysunek 5. Dodawanie filtrów do okna dialogowego Wczytywanie pliku tekstowego z wykorzystaniem okienka dialogowego jest wykonywane poprzez obsługę zdarzenia OnClick odpowiedniego elementu głównego menu. Informacja o otwartym pliku będzie wyświetlania na etykiecie lblNazwa. Otwarcie okna dialogowego do wyboru otwieranego pliku OpenDialog wykonuje się poprzez wywołanie metody tego okna Execute(). Powoduje to otwarcie okna dialogowego w trybie modalnym (bez możliwości przełączania pomiędzy oknami programu). Po wybraniu odpowiedniego pliku, jego nazwa przechowywana jest w zmiennej OpenDialog.FileName. Wpisanie zawartości pliku testowego wykonuje metoda LoadFromFile(nazwa_pliku) klasy TLines. Obiektem tej klasy jest własność Lines klasy TMemo. Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 8/9 Programowanie Wizualno Obiektowe (3) Komponent Memo realizuje prostą kontrolkę edycji wielowierszowej (patrz ”Zasady Programowania (Projektowanie) - C++ - część 5”). Procedura do wczytania danych do pola Memo z pliku którego nazwa została wybrana przy pomocy okna dialogowego. void __fastcall TForm1::Otworz1Click(TObject *Sender) { if (this->OpenDialog1->Execute()==true){ this->MemOsoby->Lines->LoadFromFile(this->OpenDialog1->FileName); } } //----------------------------------------------------------------------- W przypadku okien dialogowych do wyboru plików zmodyfikować należy dodatkowe pola, automatycznie ustawiające rozszerzenie i miejsce wybieranego pliku InitialDir FilterIndex DefaultExt – Określa katalog w którym wybierane są pliki. – Określa która opcja z listy filtrów jest wybrana (licznik od 1). – Określa rozszerzenie pliku które jest automatycznie ustawiane (jeśli znajduje się na liście filtrów rozszerzeń), np. txt. 9.2 Zapisywanie informacji z pola memOsoby do pliku tekstowego Aby zrealizować tą opcję, należy skorzystać ze standardowego okna dialogowego służącego do zapisywania plików SaveDialog. Właściwości tego komponentu zmienia się analogiczne jak właściwości komponentu OpenDialog. Procedura do wczytania danych z pola Memo do pliku którego nazwa została wybrana przy pomocy okna dialogowego. void __fastcall TForm1::Zapisz1Click(TObject *Sender) { if (this->SaveDialog1->Execute()==true){ this->MemOsoby->Lines->SaveToFile(this->SaveDialog1->FileName); } } //----------------------------------------------------------------------- Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn Zasady Programowania (Projektowanie) – C++ - część 6 9/9 Programowanie Wizualno Obiektowe (3) 10 Licznik osób Kolejnym elementem dodanym do aplikacji będzie licznik osób i wyświetlenie ilości wpisanych osób. W tym celu można skorzystać z komponentu Label (paleta Standard), dodając go do aplikacji i i odpowiednio nazywając (własność Name – LblIloscOsob). Następnie w aplikacji należy zadeklarować tzw. pole publiczne (zmienną typu integer). Pola publiczne są pojęciem z programowania obiektowego i są to elementy klas. W najprostszym przybliżeniu odpowiadają one zmiennym które są elementami struktur (rekordów). W celu zadeklarowania odpowiedniego pola należy przejść do kodu pliku nagłówkowego formularza 'Unit1.h'. Następnie znaleźć linijkę odpowiadającą polom publicznym: public: // User declarations Po tej linijce należy zadeklarować zmienną typu całkowitego, która będzie przechowywała ilość wpisanych osób. public: // User declarations int iloscOsob; W kolejnym kroku należy zainicjować licznik osób (wpisać do niego wartość 0), co powinno zostać wykonane w momencie inicjowania aplikacji (zdarzenie onCreate Formularza). Procedura inicjacyjna może być następująca. void __fastcall TForm1::FormCreate(TObject *Sender) { this->iloscOsob=0; } //--------------------------------------------------------------------------- Następnie, należy dodać zmodyfikować procedurę dodawania osób, tak aby dodatkowo modyfikowany był licznik osób. void __fastcall TForm1::Button1Click(TObject *Sender) { this->memOsoby->Lines->Add(this->EdtImie->Text+this->EdtNazwisko->Text); // modyfikacje this->iloscOsob++; this->LblIloscOsob->Caption=IntToStr(this->iloscOsob); } Przygotował: mgr inż. Jakub Filip Możaryn 2007-03-05 e-mail: [email protected], WWW: http://grafit.mchtr.pw.edu.pl/~mozaryn