Jak utworzyć bibliotekę DLL (wprowadzenie)      Strona 3 z 7        Dalej
w oparciu o materiały ze stron The Bits

       Krok 2: Utworzenie formularza

      Utworzymy teraz formularz w katalogu DLLTUTOR. Wybierz File|New Form. C++Builder utworzy typowy formularz. Zanim zaczniemy szczegółowo omawiać formularz, wybierz z palety komponentów: dwie etykiety (Label1, Label2); dwa pola edycyjne (Edit1, Edit2); oraz dwa przyciski (Button1, Button2). Wszystkie te komponenty umieść na formularzu. Aby zachować spójność z dalszą częścią samouczka, zmień odpowiednie właściwości komponentów tak, żeby ich wartości były zgodne z tym co pokazano poniżej:

Komponent Właściwość Wartość
Form Caption Dodaj dwie liczby
  Name frmAddNumbers
  Position poScreenCenter
Label1 Caption Pierwsza liczba:
Label2 Caption Druga liczba:
Button1 Caption &Oblicz
Button2 Caption &Anuluj
Edit1 MaxLength 5
  Text ""
Edit2 MaxLength 5
  Text ""


      Teraz wybierz File|Save i zapisz formularz pod nazwą Add2Nos. Celem tego formularza jest umożliwienie wprowadzenia liczby całkowitej do każdego z dwóch pól edycyjnych (Edit1, Edit2). Jeśli użytkownik kliknie przycisk Oblicz, to te dwie liczby zostaną dodane do siebie, a wynik zostanie zwrócony do funkcji wywołującej. Jeśli zaś użytkownik kliknie przycisk Anuluj, to nastąpi powrót z funkcji bez dodawania liczb. Kod biblioteki DLL powinien teraz wyglądać jak poniżej. Zauważ, że linia USEFORM jest dopisywana automatycznie przez IDE.

 //--------------------------------------------------------
 #include <vcl.h>
 #pragma hdrstop

 //---------------------------------------------------------
 USEFORM("Add2Nos.cpp", frmAddNumbers);

 //---------------------------------------------------------
 int WINAPI DllEntryPoint(HINSTANCE hinst,
                                unsigned long reason, void*)
 {
   return 1;
 }

 //---------------------------------------------------------
 
      Jak powiemy funkcji wywołującej który przycisk został kliknięty? Ano zwrócimy zmienną typu bool jako wynik funkcji. Jeśli będzie "true", to funkcja wywołująca wie, że zwrócono poprawną liczbę i może wtedy wykonać odpowiednie operacje. Jeśli będzie "false", to funkcja wywołująca wie, że kliknięto Anuluj.

      Dalej, pozwolimy użytkownikowi zdefiniować dwa domyślne stringi, które wstawimy do pól edycyjnych w chwili tworzenia formularza. Oto deklaracja (prototyp) takiej funkcji w bibliotece DLL, której używał będzie program wywołujący:

 bool Add2(char *, char *, long int *);
      zatem pseudo-kod mógłby wyglądać np. tak:

  if(Add2("123","456",&Sum))
   {
    // Kliknięto Oblicz. Mamy sumę.
   }
 else
 {
   // Kliknięto Anuluj. Nic nie rób.
 }
      Plik Add2Nos.cpp powinien wyglądać tak:

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

 #include <vcl.h>

 #pragma hdrstop

 #include "Add2Nos.h"

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

 #pragma package(smart_init)

 #pragma resource "*.dfm"

 TfrmAddNumbers *frmAddNumbers;

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

 __fastcall TfrmAddNumbers::TfrmAddNumbers(TComponent* Owner)

 : TForm(Owner)

 {

   bResult = false;

 }

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

 void __fastcall TfrmAddNumbers::Button1Click(TObject *Sender)

 {

   bResult = true;

   Close();

 }

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

 void __fastcall TfrmAddNumbers::Button2Click(TObject *Sender)

 {

   Close();

 }

 //---------------------------------------------------
      Zdefiniowaliśmy zmienną typu bool o nazwie bResult, która przekaże informacje do programu wywołującego o tym, który przycisk został kliknięty. Ale nie zadeklarowaliśmy jeszcze naszej zmiennej bResult, zatem zrobimy to teraz w pliku nagłówkowym. Aby się do niego dostać, kliknij zakładkę ADD2NOS.CPP w oknie edytora kodu. Wskaż myszą nazwę pliku na zakładce i kliknij prawym przyciskiem. Z rozwiniętego menu kontekstowego wybierz Open Source/Header File, co umieści plik nagłówkowy (Add2Nos.h) pod kolejną zakładką w oknie edytora.

      Zmień zawartość pliku nagłówkowego tak, żeby wyglądał jak poniżej:



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

 #ifndef Add2NosH

 #define Add2NosH

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

 #include <Classes.hpp>

 #include <Controls.hpp>

 #include <StdCtrls.hpp>

 #include <Forms.hpp>

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

 class TfrmAddNumbers : public TForm

 {

 __published: // IDE-managed Components

 TLabel *Label1;

 TLabel *Label2;

 TButton *Button1;

 TButton *Button2;

 TEdit *Edit1;

 TEdit *Edit2;

 void __fastcall Button1Click(TObject *Sender);

 void __fastcall Button2Click(TObject *Sender);

 private: // User declarations

 public: // User declarations

 __fastcall TfrmAddNumbers(TComponent* Owner);

 bool bResult;

 };

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

 extern PACKAGE TfrmAddNumbers *frmAddNumbers;

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

 #endif
      Zapisz formularz, używając File|Save. Przypomnijmy jeszcze raz kilka istotnych miejsc w formularzu. Wewnątrz pliku nagłówkowego Add2Nos.h znajduje się zmienna typu bool - bResult. Zdefiniowano ją w sekcji public definicji formularza. Zmienna ta musi być "widoczna" dla biblioteki DLL, kiedy w czasie wykonywania będziemy tworzyć egzemplarz formularza. Dlatego też nie mogliśmy jej umieścić w sekcji private, gdyż zakres jej ważności byłby tylko w granicach klasy, a nie poza nią (a o to właśnie nam chodzi!). Zerknij teraz na kod w pliku ADD2NOS.CPP. Zwróć uwagę, że bResult jest w konstruktorze formularza ustawiona na "false", a wartość "true" przybiera tylko wewnątrz funkcji obsługującej zdarzenie OnClick przycisku Oblicz.

      Jakkolwiek jest to kwestią wyboru. Równie dobrze mógłbyś ustawić ją na "false" wewnątrz funkcji dla zdarzenia OnClick przycisku Anuluj. Ja jednak wolę używać konstruktora formularza do takich celów, gdyż wtedy łatwiej znaleźć mi wszystkie zainicjalizowane zmienne. Jest to szczególnie przydatne, kiedy tworzysz coraz większe projekty, przy których łatwo można zapomnieć gdzie znajdują się pierwsze inicjalizacje zmiennych.

Uwaga: Autorzy oraz The Bits, nie ponoszą odpowiedzialności za ewentualne szkody wynikłe z postępowania według zasad tego samouczka.
(c)1998 Peter Hamilton-Scott, Dallen Masters, & Simon Rutley-Frayne. 1999 Allan Carlton & Will Green. 
Tłumaczenie:  Maciek Durman

1  2  3  4  5  6  7