Programowanie Wizualno Obiektowe

Transkrypt

Programowanie Wizualno Obiektowe
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
1
Programowanie Wizualno Obiektowe
Zajęcia 3, część 1 (dokończenie zajęć 2)
Temat 2:
Wykorzystanie komponentów podstawowych (panele, TComboBox,
TRadioGroup, TStringGrid) i obsługa ich własności podstawowych,
projektowanie menu i menu z przyciskami skrótów (TMainMenu, TToolbox),
wykorzystanie okien dialogowych (Standard Dialogs), programowanie akcji
(TActionList). Obsługa kilku formularzy (TForm). Projektowanie prostej
bazy danych.
Zadanie:
Należy napisac apliację, która będzie umożliwiała tworzenie i przeglądanie
zbioru rekordów o czasopismach (określone przez nazwę, typ oraz ich
dostepność). Aplikacja ma się składac z kilku okien otwieranych z głównego
menu. Wyjście z programu zrealizowac poprzez okno dialogowe. Aplikacja ma
się składac z następujących formularzy.
-
Okno z menu głównym i paskiem statusu do wyświetlania
informacji o ilosci wpisanych elementów. (Obsługa programu)
-
Okno do wpisywania
(Wprowadzanie danych)
-
Okno do wypisywania informacji o wszystkich wpisanych
rekordach. (Przeglądanie danych)
danych
do
kolejnych
Rysunek 3.1. Postać interfejsu użytkownika dla programu 3_1
rekordów.
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
2
1.
Utworzenie aplikacji
Otwieramy nowa aplikację File>NewApplication
Zapisujemy projekt przy pomocy File>Save All w katalogu gdzie będzie kompilowany nasz
projekt
3.
Projektowanie okna z głównym menu
Rysunek 3.2. Postać głónego okna programu 3_1
3.1.
Dodajemy odpowiednie komponenty w kolejności
• 1 komponent TMainMenu (paleta Standard).
• 1 komponent TToolbar (paleta Win32)
• 1 komponent TImageList (paleta Win32)
• 1 komponent TStatusBar (paleta Win32)
3.2.
Należy zaprojektować menu główne (kliknięcie na komponent TMainMenu) tak aby miało
następujące funkcje (skróty klawiszowe należy dodać do każdego elementu menu zmieniając
jego własność ShortCut>Skrót ):
- Plik
- Otwórz Plik (skrót Ctrl+L)
- Zapisz do Pliku (skrót Ctrl+S)
- Dodawanie elementów (sktót Ctrl+A)
- Koniec (skrót Alt+F4)
3.3.
Kliknąć na komponent TImageList , powinno pokazać się okienko do ustawiania własności
obrazków które później pokażą się na przyciskach szybkiego dostępu.
Rysunek 3.3. Okno do ustawiania własności listy obrazków
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
3
Każdy z rysunków, które indeksowane są od 0 można dodać wciskając Add i wybierając
odpowiedni rysunek z katalogu
Program Files->Common Files->Borland Shared->Images->Buttons
i wybierając odpowiedni rysunek. Jeśli podczas wybrania rysunku dzieli się on na dwa
rysunki należy jeden z nich skasować (jeden z nich to rysunek pokazujący się podczas
dezaktywacji przycisku).
Wybrać jeden rysunek odpowiednio do każdej z funkcji wywoływanej z paska skrótów.
3.4.
Klikając prawym przyciskiem myszy na komponent TToolBar można dodać kolejne
przyciski przy pomocy komendy New Button, oraz ewentualnie przerwę pomiędzy grupami
przycisków przy pomocy komendy New Separator (utworzyć 4 przyciski). Aby następnie
powiązać przyciski z rysunkami należy we własnościach komponentu TToolBar ustawić
własność Images na ImageList1 (nazwa komponentu z listą obrazków).
3.5.
Utworzyć pasek statusu z trzema panelami. Odpowiednio o szerokościach:
Panel 0: 100
Panel 1: 50
Panel 2: reszta dostępnego miejsca
(tworzenie paska statusu omówiono na poprzednich zajęciach)
(Skompilować program i uruchomić)
4.
Projektowanie okna do dodawania nowych rekordów
Do zaprojektowania tego okna, należy najpierw utworzyć jego formularz, jako oddzielny
formularz w projekcie. Nowy formularz do projektu dodaje się wybierając opcje
File->New->Form.
Rysunek 3.4. Postać okna do dodawania nowych rekordów
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
4
4.1.
Dodajemy następujące komponenty w kolejności
• 1 komponent TLabel (paleta Standard)
• 1 komponent TEdit (paleta Standard)
• 1 komponent TComboBox (paleta Standard)
• 1 komponent TRadioGroup (paleta Standard)
• 3 komponenty TButton (paleta Standard)
4.2.
Dodać odpowiednie opcje do komponentu pola wielokrotnego wyboru (TComboBox). Opcje
do tego komponentu dodaje się edytując własność Items. Otwiera się wtedy Edytor kolejnych
elementów do wyboru (tzw. String List Editor). Utworzyć 4 elementy określające rodzaje
wpisywanych czasopism (kolejne elementy zapisywane są w kolejnych linijkach): ‘Dziennik’,
‘Tygodnik’, ‘Miesiecznik’, ‘Kwartalnik’.
Rysunek 3.5. Postać okna do dodawania nowych rekordów
Ustawić listę opcji na pierwszy element, poprzez ustawienie własności ItemIndex (indeks
elementu w TComboBox) na 0.
4.3.
Dodać odpowiednie opcje do komponentu wyboru opcji TRadioGroup. Opcje do tego
komponentu dodaje się edytując własność Items. Otwiera się wtedy Edytor kolejnych
elementów do wyboru (tzw. String List Editor). Utworzyć 2 elementy określające dostępność
wpisywanych czasopism (kolejne elementy zapisywane są w kolejnych linijkach): ‘Tak’,
‘Nie’.
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
5
Rysunek 3.6. Postać okna do dodawania nowych rekordów
Ustawić listę opcji na pierwszy element, poprzez ustawienie własności ItemIndex (indeks
elementu w TRadioGroup) na 0. Ponieważ na panelu TRadioGroup wszystkie przyciski są
zgrupowane i przekazują informacje o swoim statusie, czy są, czy też nie są wybrane
(własność Enabled) to aktywacja jednego elementu automatycznie dezaktywuje pozostałe.
(Skompilować program i uruchomić)
5.
Projektowanie okna wypisywania informacji zapisanych rekordach
Do zaprojektowania tego okna, należy najpierw utworzyć jego formularz, jako oddzielny
formularz w projekcie.
Rysunek 3.7. Postać okna do wyświetlania rekordów
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
6
5.1.
Dodajemy następujące komponenty w kolejności
• 1 komponent TStringGrid (paleta Additional)
• 1 komponent TButton (paleta Standard)
(Skompilować program i uruchomić)
6.
Programowanie funkcji odpowiadających kolejnym zdarzeniom
6.1
Programowanie akcji
Następnie należy zaprojektować odpowiednie akcje, czyli inaczej procedury wykonujące
odpowiednie operacje. Akcje przydatne są przy budowie dużych aplikacji wtedy gdy te same
procedury wykorzystywane są przez różne komponenty. W przypadku przedstawionego
programu akcje będą wykorzystywane zarówno przez przyciski komponentu TToolBar jak i
wybrane elementy komponentu TMainMenu. Akcje zapisuje się w komponencie
TActionList. \
Należy kliknąć na komponent TActionList i utworzyć akcje obsługujące funkcje programu
(np.: Zapisz do pliku, Otwórz plik, O Programie , Zamknij)
Rysunek 3.8. Edytor Akcji
Dwa razy klikając na daną akcje możemy dodać odpowiednią funkcję związaną z
wywołaniem danej akcji. W przypadku naszego programu będą to następujące akcje:
Akcja 1: Zakończenie działania programu z wykorzystaniem okienka dialogowego
Nie zamykając projektu dodajemy do niego okno dialogowe (nowy formularz) wybierając
opcje File->New->Other->Dialogs i wybierając okno Standard Dialog (np. Standard Dialog
(Horizontal) ).
Rysunek 3.9. Standardowe okno dialogowe do zakończenia pracy z programem
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
7
Następnie należy w pliku związanym z tym oknem dialogowym (np. Unit2.cpp) sprawdzić,
jak nazywa się obiekt odpowiadający za okno dialogowe (np. OKBottomDlg). Aby
umożliwić wywoływanie okienka dialogowego z programu głównego, oraz pobierać z niego
informacje, należy dołączyć jego plik nagłówkowy na początku programu związanego z
głównym formularzem (np. Unit1.cpp), przy pomocy dyrektywy:
#include "Unit2.h"
postać akcji jest następująca:
void __fastcall TForm1::KoniecAcnExecute(TObject *Sender)
{
OKBottomDlg->ShowModal();
if (OKBottomDlg->ModalResult==mrOk){
//zamkniecie formularza glownego
this->Close();
};
}
Akcja 2: Otwarcie okna do dodawania nowych elementów do bazy danych
void __fastcall TForm1::DodawanieAcnExecute(TObject *Sender)
{
Form4->Show();
}
7.
Projektowanie bazy danych (przykład z tablicą o określonym rozmiarze)
Celem programu jest zapisywanie nowych rekordów do bazy danych wykorzystując interfejs
graficzny, oraz ich przeglądanie na oddzielnym formularzu. W najprostszym przypadku do
przechowywania danych będziemy wykorzystywali tablice jednowymiarową o określonym
rozmiarze, która będzie zawierała obiekty/rekordy klasy TCzasopismo, opisującej własności
kolejnego czasopisma:
-
nazwę
typ czasopisma (tygodnik, miesięcznik, dziennik, kwartalnik,
rocznik)
dostępność (własność logiczna)
Klasę TCzasopismo należy zdefiniować w oddzielnym pliku TCzasopismo.cpp, o nazwie
takiej samej jak nazwa klasy. W jej części publicznej należy zadeklarować zmienne opisujące
czasopismo.
#include <vcl.h>
class TCzasopismo
{
private:
protected:
public:
AnsiString nazwa;
AnsiString typ;
bool dostepnosc;
TCzasopismo();
~TCzasopismo();
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
8
};
Następnie dołączyć do pliku unit1.cpp plik z definicją klasy TCzasopismo
#include ”TCzasopismo.cpp”
W części publicznej formularza należy zadeklarować tablicę n - elementową (np. n=10), która
będzie zawierała poszczególne rekordy:
...
public:
...
// User declarations
TCzasopismo Tablica[10];
int ostatni;
7.1.
Programowanie interfejsu do wprowadzania danych
Przycisk do dodawania danych powinien pozwalać na wpisywanie elementów do tablicy
zadeklarowanej w formularzu głównym. Aby móc modyfikować tablicę, należy dołączyć
odpowiedni plik nagłówkowy skojarzony z Formularzem głównym:
#include "Unit1.h"
Odpowiednia procedura dodająca elementu do tablicy jest następująca:
void __fastcall TForm4::DodajBtnClick(TObject *Sender)
{
if (Form1->ostatni<10){
Form1->ostatni++;
//stworzenie nowego elementu w tablicy
Form1->Tablica[Form1->ostatni-1].nazwa=Form4->NazwaEdt>Text;
Form1->StatusBar1->Panels->Items[1]->Text=IntToStr(Form1>ostatni);
//sprawdzenie typu danego elementu
switch (this->TypCBox->ItemIndex)
{
case
0:Form1->Tablica[Form1->ostatni1].typ="Dziennik";
break;
case
1:Form1->Tablica[Form1->ostatni1].typ="Tygodnik" ;
break;
case
2:Form1->Tablica[Form1->ostatni1].typ="Miesiecznik" ;
break;
case
3:Form1->Tablica[Form1->ostatni1].typ="Kwartalnik" ;
break;
default:Form1->Tablica[Form1->ostatni1].typ="brak. inf";
break;
};
//sprawdzenie dostepnosci
if (this->DostepnyRGroup->ItemIndex==0){
Form1->Tablica[Form1->ostatni-1].dostepnosc=true;
}else{
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
}else{
}
};
}
9
Form1->Tablica[Form1->ostatni-1].dostepnosc=false;
this->DodajBtn->Enabled=false;
7.3.
Wyświetlanie danych z bazy na oddzielnym formularzu
Przycisk do wyświetlania danych w oddzielnym formularzu. Dane będą wyświetlane w
oddzielnym formularzu w tabeli z wykorzystaniem komponentu podstawowego TStringGrid.
Aby można było wyświetlać i obsługiwać ten formularz należy dołączyć odpowiedni plik
nagłówkowy z nim związany.
#include "Unit2.h"
Podstawowe własności komponentu TStringGrid to:
RowCount
FixedRows, FixedCols
Cells[wiersz][kolumna]
Scrollbars
- określenie ilości rzędów, zwiększenie tej wartości pozwala na
dodanie nowego rzędu.
- określenie rzędów i kolumn o zablokowanych komórkach, czyli
takich które się nie przesuwają podczas przewijania z
wykorzystaniem pasków przewijania (ang. scrollbars).
- wpisanie łańcucha znaków do odpowiedniej komórki.
- wyświetlenie pasków przewijania (wartość ssVertical – paski
pionowe, wartość ssHorizontal – paski poziome, wartość
ssBoth – paski poziome i pionowe, wartość ssNone – bez
pasków).
Odpowiednia procedura wyświetlające elementy z tablicy w oddzielnym formularzu jest
związania z naciśnięciem na przycisk ‘Wyświetl’ Może być następująca:
void __fastcall TForm4::WyswietlBtnClick(TObject *Sender)
{
//wyswietlenie formularza
Form2->Show();
//okreslenie ilosci rzedow pokazywanych na poczatku
Form2->StringGrid1->RowCount=2;
Form2->StringGrid1->FixedRows=1;
//dodanie opisu do kolumn
Form2->StringGrid1->Cells[0][0]="nr kol.";
Form2->StringGrid1->Cells[1][0]="nazwa";
Form2->StringGrid1->Cells[2][0]="typ";
Form2->StringGrid1->Cells[3][0]="dostepnosc";
//wyswietlenie wszystkich elementow z tablicy na nowym formularzu
for (int i=0;i<Form1->ostatni;i++){
//dodanie nowego pustego wiersza
Form2->StringGrid1->RowCount++;
//wpisanie wartosci do odpowiednich komorek
Form2->StringGrid1->Cells[0][i+1]=IntToStr(i+1);
Form2->StringGrid1->Cells[1][i+1]=Form1->Tablica[i].nazwa;
Form2->StringGrid1->Cells[2][i+1]=Form1->Tablica[i].typ;
//sprawdzenie i wypisanie inf. o dostepnosci
Programowanie Wizualno Obiektowe - zajęcia 3 (PWO_BCPP_3_1)
Tworzenie i kompilowanie projektów – projektowanie prostej bazy danych
}
};
10
if (Form1->Tablica[i].dostepnosc==true){
Form2->StringGrid1->Cells[3][i+1]="dostępny";
}else{
Form2->StringGrid1->Cells[3][i+1]="niedostępny";
};
8.
Dodatkowa poprawa funkcjonalności programu
Po napisaniu programu istotne jest umożliwienie zamykania poszczególnych okienek bez
konieczności zamykania całego programu. Dodatkowo ważne jest blokowanie odpowiednich
przycisków w momencie, gdy nie można już wykonać polecenia z nimi związanego
8.1
Zamykanie poszczególnych formularzy z wykorzystaniem przycisków ‘Zamknij’.
void __fastcall TForm2::Button1Click(TObject *Sender)
{
this->Close();
}
8.2
Informacja o programie (dodatkowy element w menu głównym i na liście akcji)
Do wypisania informacji o programie można wykorzystać standardowe okno dialogowe o
nazwie About Box, żeby je utworzyć należy stworzyć nowy formularz w istniejącym projekcie
File>New>Other...>Forms>About box. Ponieważ nowy formularz jest tworzony
automatycznie z modułem, który go opisuje, moduł ten o musimy dodać do spisu modułów w
module związanym z naszym głównym formularzem
#include ”Unit5.h”;
Okno dialogowe będzie miało nazwę AboutBox. Akcja/funkcja wypisująca informacje o
programie w tym oknie będzie wyglądała następująco.
void __fastcall TForm1::OProgramieAcnExecute(TObject *Sender)
{
AboutBox->ProductName="program 'Baza danych'";
AboutBox.ShowModal;
}
Rysunek 3.10. Standardowe okno dialogowe do zakończenia pracy z programem

Podobne dokumenty