Krok 2: Utworzenie formularza //-------------------------------------------------------- #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; //-------------------------------------------------- #endifZapisz 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.
|