TWORZENIE MODUŁÓW.

 

Ten artykuł stanowi rozszerzenie artykułu "Przekazywanie obiektów pomiędzy formularzami". Postaram się pokazać w jaki sposób można umieszczać w odrębnych plikach zbiory różnych funkcji a potem wykorzystywać je w projekcie. Taki zbiór funkcji nazywam modułem, ponieważ może być wielokrotnie wykorzystywany w różnych projektach.


Zaczniemy od wybrania z menu File | New | Unit:

 

 

Zostanie utworzony plik Unit1.cpp więc zapisujemy go w jakimś katalogu, np. 'C:\Modul' pod  nazwą Modul1. Oczywiście nazwy są dowolne, taki moduł może być zapisany pod dowolną nazwą i w dowolnym katalogu. Jeżeli zajrzymy teraz do katalogu w którym zapisaliśmy moduł to zauważymy tam dwa pliki: Modul1.cpp i Modul1.h. Tak więc drugi plik został utworzony automatycznie i dobrze bo się nam przyda. Obydwa właśnie utworzone pliki wyglądają (a przynajmniej powinny) tak:


// Plik źródłowy np. Modul1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Modul1.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)


// Plik źródłowy np. Modul1.h
//---------------------------------------------------------------------------
#ifndef Modul1H
#define Modul1H

//---------------------------------------------------------------------------
#endif

 

I w zasadzie moduł jest już gotowy do umieszczania funkcji. Ja napiszę prostą funkcję o nazwie IleWyrazow, zadaniem funkcji będzie policzenie ile wyrazów znajduje się w podanym zdaniu. Zaczniemy od utworzenia definicji funkcji w pliku źródłowym Modul1.cpp, trochę to nie poklei, ale pod koniec zrozumiecie dlaczego (chyba). Tak więc tworzymy funkcję:


// Plik źródłowy np. Modul1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Modul1.h"


//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
int IleWyrazow(AnsiString Text)
{
 String sep = " ";

 int i = 1, x = 0;
 while(x < Text.Length())
 {
  x++;
  if(Text.SubString(x, 1) == sep)
  {
   i++;
   Text = Text.Delete(1, x);
   x = 0;
  }
 }

 return i;
}
//---------------------------------------------------------------------------

 

Funkcja jest w istocie bardzo prosta więc nie będę tutaj opisywał jak działa, bo nie to jest tematem tego artykułu. Istotne jest to, że utworzyliśmy moduł, a w nim funkcję, która coś tam robi. W zasadzie funkcja jest już gotowa do pracy i właściwie niczego jej już nie potrzeba, jednakże by móc taką funkcję wykorzystać w dowolnym projekcie należy zadeklarować tą funkcję w pliku nagłówkowym, jak już wspomniałem funkcja nie potrzebuje deklaracji, ponieważ definicja może być jednocześnie deklaracją funkcji, jednakże my potrzebujemy tej deklaracji żeby skorzystać z funkcji. Deklarację umieszczamy w pliku nagłówkowym Modul1.h, ale poprzedzamy ją słowem kluczowym extern, słowo to służy do eksportowania funkcji na zewnątrz:


// Plik źródłowy np. Modul1.h
//---------------------------------------------------------------------------
#ifndef Modul1H
#define Modul1H

//---------------------------------------------------------------------------
extern int IleWyrazow(AnsiString Text);
//---------------------------------------------------------------------------

#endif

 

No i to właściwie prawie wszystko. Należy tutaj dodać, że w module można zdefiniować tysiące funkcji i nie wszystkie muszą posiadać deklarację w pliku nagłówkowym, np. możemy stworzyć funkcję, która będzie wykorzystywana tylko wewnątrz modułu przez inne funkcję, jednak jeżeli chcemy wykorzystać jakąś funkcję poza modułem, to należy umieścić jej deklarację w pliku nagłówkowym i poprzedzić ją słowem kluczowym extern, które informuje kompilator, że zmienna została zdefiniowana w pliku źródłowym tego modułu.
 

Przejdźmy do następnego etapu. Tworzymy nowy projekt i włączamy do niego nasz moduł. W tym celu wybieramy w menu Project | Add to Project...:

 

 

W oknie dialogowym wskazujemy plik modułu i tym samym włączmy go do naszego projektu:

 

 

To jednak nie wszystko, by wykorzystać nasz moduł w wybranym pliku projektu, np. Unit1.cpp należy w sekcji include tegoż pliku dodać instrukcję: #include "Modul1.h":


// Plik źródłowy np. Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Modul1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

 

Teraz można już w pełni korzystać z naszego modułu. W celu sprawdzenia czy to działa proponuję umieścić na formularzu (np. Form1) obiekt Button1 i w zdarzeniu OnClick tego przycisku wywołamy naszą funkcję:


// Plik źródłowy np. Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Modul1.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 int L = IleWyrazow("To jest przykładowy tekst zawierający siedem wyrazów.")
 ShowMessage(IntToStr(L));
}
//---------------------------------------------------------------------------

 

I to już wszystko. Poniżej zamieszczam kod źródłowy z przykładem wykorzystania modułu z dwiema funkcjami.

modul.zip - archiwum z kodem źródłowym w BCB 4.

Opracował: Cyfrowy Baron