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