borland cpp builder cw13

background image

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

















background image

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

background image

Programowanie obiektowe. Ćwiczenie 13. 3

______________________________________________________________________


Rys.2 Tworzenie pakietu


Następnie określamy rodzaj pakietu:

Options







Designtime and runtime

Rys.3 Rodzaj pakietu





background image

4

Programowanie obiektowe. Ćwiczenie 13.

______________________________________________________________________

______________________________________________________________________


Zapisanie grupy projektu na dysk:

Przejdź 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


background image

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



background image

6

Programowanie obiektowe. Ćwiczenie 13.

______________________________________________________________________

______________________________________________________________________



PAMIĘTAJ :
U MNIE JEST TO KATALOG O NAZWIE

C:\Program Files\Borland\CBuilder6\Projects\PROGRAMOWANIE\Cplusplus

U CIEBIE MOZE BYĆ INNY!!!

MUSISZ SAM PAIĘTAĆ 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

background image

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 źródłowego komponentu)

OK


Po zatwierdzeniu otrzymamy kod źródłowy (szablon) komponentu – Rys. 9.

Rys.9 Kod źródłowy nowego komponentu





background image

8

Programowanie obiektowe. Ćwiczenie 13.

______________________________________________________________________

______________________________________________________________________

Kod w pliku NumEdit.h


//---------------------------------------------------------------------------

#ifndef NumEditH
#define NumEditH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TNumEdit : public TCustomEdit
{
private:
protected:
public:
__fastcall TNumEdit(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif

Kod w pliku NumEdit.cpp

//---------------------------------------------------------------------------

#include <vcl.h>

#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)
{
}
//---------------------------------------------------------------------------

background image

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 <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------

// 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);

background image

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 <vcl.h>
#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);
}
}

background image

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;
}
}

background image

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



background image

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

Przejdź do okna Package

Rys.11 Okno pakietu











background image

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





background image

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

Przejdź 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


background image

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)

Sprawdź 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)

Sprawdź 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 cw10
borland cpp builder cw9
borland cpp builder cw2
borland cpp builder cw4
borland cpp builder cw12
borland cpp builder cw3
borland cpp builder id 92024 Nieznany
borland cpp builder cw5
borland cpp builder cw1 id 9202 Nieznany
borland cpp builder cw6
borland cpp builder cw7
borland cpp builder cw11 id 920 Nieznany (2)
borland cpp builder cw8
borland cpp builder cw10
borland cpp builder cw9

więcej podobnych podstron