Programowanie obiektowe. Ćwiczenie 13. 1
______________________________________________________________________
PROGRAMOWANIE OBIEKTOWE
ĆWICZENIE 13
" Tworzenie, kompilacja i instalacja pakietów
" Tworzenie własnych komponentów
" Testowanie aplikacji wykorzystującej nowy komponent
2 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
I. Wstęp
W środowisku C++ Builder mo\emy tworzyć trzy rodzaje komponentów: tylko do
projektowania, tylko do uruchamiania, podwójne do projektowania i uruchamiania
Gdy ciągle udoskonalamy lub testujemy pakiet, to najlepiej tworzyć wersję podwójną.
Tworzenie pakietu komponentów
Tworzenie nowego lub nowych komponentów wymaga wykreowania pakietu w którym
będą one kompilowane. Musimy teraz utworzyć grupę projektu, aby przechować w niej
pakiet, \eby nie stanowił on części aplikacji.
Tworzenie nowej grupy projektu:
" Uruchom Buildera
" File Close All
" File New Other&
" Zakładka New
" Project Group
Rys.1 Tworzenie grupy projektu
Tworzenie nowego pakietu:
" File New Other&
" Zakładka New
" Package
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 3
______________________________________________________________________
Rys.2 Tworzenie pakietu
Następnie określamy rodzaj pakietu:
" Options Designtime and runtime
Rys.3 Rodzaj pakietu
4 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
Zapisanie grupy projektu na dysk:
" Przejdz do okna Project Manager
" View Project Manager
" Zaznacz ProjectGroup1 i kliknij prawym klawiszem myszy
" Save Project Group As&
Rys.4 Zapis grupy
" Wpisz nazwę pliku MojaGrupa.bpg
" Zapisz
Rys.5 Zapis grupy do pliku *.bpg
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 5
______________________________________________________________________
Zapis pakietu na dysk:
" Kliknij prawym przyciskiem myszy na nazwę Package1.bpl
Rys.6 Zapis pakietu do pliku *.bpk
" Wybierz opcję Save&
" Wpisz nazwę pliku MojPakiet.bpk
" Zapisz
Rys.7 Zapis pakietu do pliku MojPakiet.bpk
6 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
PAMITAJ : U MNIE JEST TO KATALOG O NAZWIE
C:\Program Files\Borland\CBuilder6\Projects\PROGRAMOWANIE\Cplusplus
U CIEBIE MOZE BYĆ INNY!!!
MUSISZ SAM PAITAĆ GDZIE ZACHOWUJESZ SWOJE PAKIETY
I GRUPY PROJEKTÓW
W tej chwili wygenerowałem następujące pliki:
MojaGrupa.bpg
MojPakiet.bpk
MojPakiet.cpp
MojPakiet.res
II. Tworzenie własnych komponentów
Zwykle własne nowe komponenty budujemy na podstawie ju\ istniejących
komponentów trzeba więc posiadać troszkę wiedzy na temat nazw istniejących
komponentów.
Zaletą takiego postępowania jest to, \e nie trzeba projektować ich od początku co
naraziło by nas na stratę czasu na programowanie, testowanie i usuwanie błędów!!!!
Tera wykreujemy prosty komponent co zajmie nam kilkanaście minut.
Będzie nazywał się TNumEdit
Zmodyfikujemy klasę TCustomEdit. Na jej podstawie utworzymy nową klasę
(komponent) o nazwie TNumEdit, która będzie polem edycyjnym, umo\liwiającym
wpisywanie liczb określonego typu: naturalnych, całkowitych, rzeczywistych.
Tworzenie nowego komponentu
Tworzenie nowego komponentu:
" File New Other&
" Component
" Ok
Patrz Rys. 8
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 7
______________________________________________________________________
Rys.8 Nowy komponent
" Ancestor Type: TCustomEdit (typ klasy bazowej)
" Class Name: TNumEdit (nazwa tworzonego komponentu)
" Palette Page: MojeKomponenty (zakładka palety w VCL)
" Unit file name: c:\program files\borland\cbuilder6\Lib\NumEdit.cpp
(nazwa pliku zródłowego komponentu)
" OK
Po zatwierdzeniu otrzymamy kod zródłowy (szablon) komponentu Rys. 9.
Rys.9 Kod zródłowy nowego komponentu
8 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
Kod w pliku NumEdit.h
//---------------------------------------------------------------------------
#ifndef NumEditH
#define NumEditH
//---------------------------------------------------------------------------
#include
#include
#include
#include
//---------------------------------------------------------------------------
class PACKAGE TNumEdit : public TCustomEdit
{
private:
protected:
public:
__fastcall TNumEdit(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif
Kod w pliku NumEdit.cpp
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "NumEdit.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TNumEdit *)
{
new TNumEdit(NULL);
}
//---------------------------------------------------------------------------
__fastcall TNumEdit::TNumEdit(TComponent* Owner)
: TCustomEdit(Owner)
{
}
//---------------------------------------------------------------------------
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 9
______________________________________________________________________
namespace Numedit
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TNumEdit)};
RegisterComponents("MojeKomponenty", classes, 0);
}
}
//---------------------------------------------------------------------------
Rozbudowa komponentu
" zmieniamy NumEdit.h
Naszym celem jest utworzenie pola edycyjnego, w które będzie mo\na wpisywać
jedynie liczby określonego typu określmy je:
// typ wyliczeniowy
typedef enum {ntCalkowite, ntRzeczywiste, ntNaturalne} TNumType;
Oto pełny kod:
//---------------------------------------------------------------------------
#ifndef NumEditH
#define NumEditH
//---------------------------------------------------------------------------
#include
#include
#include
#include
//---------------------------------------------------------------------------
// typ wyliczeniowy dla zmiennej fNumType
typedef enum {ntCalkowite, ntRzeczywiste, ntNaturalne} TNumType;
class PACKAGE TNumEdit : public TCustomEdit
{
private:
TNumType fNumType; // typ pola edycyjnego
protected:
// metody do obsługi zdarzeń
DYNAMIC void __fastcall DoExit(void);
DYNAMIC void __fastcall KeyPress(char &Key);
void SprawdzRzeczywiste(char &Key);
void SprawdzCalkowite(char &Key);
void SprawdzNaturalne(char &Key);
10 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
public:
__fastcall TNumEdit(TComponent* Owner);
__published:
__property TNumType NumType = { read = fNumType, write = fNumType,
default = ntCalkowite };
__property MaxLength; // maksymalna długość
__property ReadOnly; // zablokowana edycja
__property OnEnter; // gdy naciśnięto ENTER
__property OnExit; // gdy wyjście z komponentu
__property OnClick; // gdy kliknięty komponent
__property OnChange; // gdy zmienieniono wartość komponentu
};
//---------------------------------------------------------------------------
#endif
" zmieniamy NumEdit.cpp
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "NumEdit.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TNumEdit *)
{
new TNumEdit(NULL);
}
//---------------------------------------------------------------------------
__fastcall TNumEdit::TNumEdit(TComponent* Owner)
: TCustomEdit(Owner)
{
// konstruktor klasy
// domyślnie komponent przyjmuje liczby całkowite i ma wartość 0
fNumType = ntCalkowite;
Text = '0';
}
//---------------------------------------------------------------------------
namespace Numedit
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TNumEdit)};
RegisterComponents("MojeKomponenty", classes, 0);
}
}
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 11
______________________________________________________________________
void __fastcall TNumEdit::DoExit(void)
{
if (Text != "")
if (fNumType == ntRzeczywiste)
Text = FloatToStr(StrToFloat(Text));
else
Text = IntToStr(StrToInt(Text));
else
Text = '0';
return;
}
void __fastcall TNumEdit::KeyPress(char &Key)
{
switch (fNumType)
{
case ntCalkowite : SprawdzCalkowite(Key); break;
case ntRzeczywiste : SprawdzRzeczywiste(Key); break;
case ntNaturalne : SprawdzNaturalne(Key); break;
}
return;
}
void TNumEdit::SprawdzRzeczywiste(char &Key)
{
if (Key == DecimalSeparator)
{
if ( Text.Pos(DecimalSeparator) != 0 )
{
Beep();
Key = 0;
}
}
else
SprawdzCalkowite(Key);
return;
}
void TNumEdit::SprawdzCalkowite(char &Key)
{
if (Key == '-')
{
if ((SelStart > 0) || (Text.Pos("-")!=0))
{
Beep();
Key = 0;
}
}
12 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
else
SprawdzNaturalne(Key);
return;
}
void TNumEdit::SprawdzNaturalne(char &Key)
{
if ((Key == '\8') || (Key == '\13')) return;
if ((Key < '0') || (Key>'9'))
{
Beep();
Key = 0;
}
return;
}
III. Instalacja komponentu
Instalacja komponentu TNumEdit
" Component Install Component
Rys.10 Instalacja komponentu
" Zakładka: Into new package
" Unit file name: C:\Program Files\Borland\CBuilder6\Lib\NumEdit.cpp
" Package file name:
C:\ProgramFiles\Borland\CBuilder6\Projects\PROGRAMOWANIE\
Cplusplus\MojPakiet.bpk
" Package description: mój nowy pakiet
" Ok
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 13
______________________________________________________________________
Jeśli otrzymasz komunikat:
to wykonaj następujące operacje:
" Zakładka: Into existing package
" Unit file name: C:\Program Files\Borland\CBuilder6\Lib\NumEdit.cpp
" Package file name:
C:\ProgramFiles\Borland\CBuilder6\Projects\PROGRAMOWANIE\
Cplusplus\MojPakiet.bpk
" Package description: mój nowy pakiet
" Ok
" Przejdz do okna Package
Rys.11 Okno pakietu
14 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
Wykonaj polecenie
" Compile
Rys.12 Okno komunikatu pomyślnej kompilacji pakietu
" Install
Rys.13 Okno komunikatu pomyślnej instalacji pakietu z zarejestrowanym
komponentem TNumEdit
Rys.14 Na pasku VCL pojawiła się zakładka MojeKomonenty
" File Exit
Rys.15 Zapisz ostatnie zmiany w projekcie pakietu MojPakiet
" Yes
______________________________________________________________________
Programowanie obiektowe. Ćwiczenie 13. 15
______________________________________________________________________
IV. Testowanie aplikacji wykorzystującej
nowy komponent
Nowa aplikacja będzie miała nazwę AppKomponent.exe.
Wygenerowanie aplikacji
" Uruchom Buildera
" File Close All
" File New Application
" File Save All
" Zapisz unit w pliku AppKomponentUnit1.cpp
" Zapisz projekt w pliku AppKomponent.bpr
Teraz wykorzystamy nasz nowy komponent w aplikacji
" Przejdz na zakładkę MojeKomponenty
Rys.16 Pobieranie komponentu z pakietu MojPakiet
" Kliknij dwa razy komponent
" Nowy komponent pojawi się na formularzu okna aplikacji
Rys.17 Oto komponent z klasy TNumEdit
W oknie Object TreeView widać nazwę komponentu:
Rys.18 Komponent ma nazwę NumEdit1
16 Programowanie obiektowe. Ćwiczenie 13.
______________________________________________________________________
" Zmień właściwość komponentu na ntRzeczywiste
Rys.19 Zmiana właściwości komponentu NumEdit1
" Skompiluj i uruchom aplikację (F9)
" Sprawdz zachowanie pola edycyjnego NumEdit1
" Zmień właściwość komponentu na ntNaturalne
Rys.20 Zmiana właściwości komponentu NumEdit1
" Skompiluj i uruchom aplikację (F9)
" Sprawdz zachowanie pola edycyjnego NumEdit1
Rys.21 Wygląd pola komponentu po uruchomieniu aplikacji
SPIS TREŚCI
I. Wstęp ........................................................................................................................ 2
Tworzenie pakietu komponentów................................................................................. 2
II. Tworzenie własnych komponentów ......................................................................... 6
Tworzenie nowego komponentu................................................................................... 6
Kod w pliku NumEdit.h............................................................................................ 8
Kod w pliku NumEdit.cpp........................................................................................ 8
Rozbudowa komponentu .............................................................................................. 9
III. Instalacja komponentu ........................................................................................ 12
Instalacja komponentu TNumEdit.......................................................................... 12
IV. Testowanie aplikacji wykorzystującej nowy komponent ................................... 15
Wygenerowanie aplikacji ....................................................................................... 15
______________________________________________________________________
Wyszukiwarka
Podobne podstrony:
borland cpp builder cw1
borland cpp builder cw5
borland cpp builder cw10
borland cpp builder cw8
borland cpp builder cw3
borland cpp builder cw9
borland cpp builder cw2
borland cpp builder
borland cpp builder cw12
borland cpp builder cw11 algorytm
borland cpp builder cw4
borland cpp builder cw6
borland cpp builder cw7
SQL access in Borland C Builder
więcej podobnych podstron