Podstawy pisania komponentów      Strona 3 z 9        Dalej
w oparciu o materiały ze stron The Bits

             Teraz przyjrzyjmy się plikowi nagłówkowemu LED.h (jeżeli używasz C++ Buildera 1 to nie zobaczysz makra PACKAGE):

//-----------------------------------------------------------------
#ifndef LEDH
#define LEDH
//-----------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//-----------------------------------------------------------------
class PACKAGE TLED : public TShape
{
private:
protected:
public:
        __fastcall TLED(TComponent* Owner);
__published:
};
//-----------------------------------------------------------------
#endif


      No cóż, zbyt wiele za nas nie zrobiono. Są tylko liczne dołączenia (#include) . Czas teraz napisać coś samemu. Będziemy potrzebować zmienną typu bool, która będzie przechowywać stan diody (On/Off), a także zmienną TColor, w której będzie kolor diody. A ponieważ jesteśmy dobrymi programistami OOP (object oriented programming - programowanie obiektowo orientowane), wiemy, że należy ukrywać informacje i te zmienne powinny być umieszczone w sekcji private definicji klasy. Po zrobieniu tego kod wygląda następująco:

private:
	bool FOnOff;
	TColor FOnColour;
	TColor FOffColour;

      Do standardowej konwencji nazywania prywatnych członków komponentu należy dodanie literki "F" na początku nazwy zmiennej (co pozwoli na użycie nazwy zmiennej bez "F" w sekcji published). Teraz kiedy mamy już zmienne, potrzebujemy akcesorów (funkcji, dzięki którym uzyskamy dostęp do danych klasy) i mutatorów (funkcji, za pomocą których będziemy mogli zmieniać wartości zmiennych). Umieszczamy je w sekcji private albo protected (dlaczego akurat tam - wyjaśnię później).

private:
	bool FOnOff;
	TColor FOnColour;
	TColor FOffColour;
	void __fastcall SetOnOff(const bool Value);
	void __fastcall SetOnColour(const TColor OnColour);
	void __fastcall SetOffColour(const TColor OffColour);

      Z reguły nazwę akcesora zaczyna się przedrostkeim "Get", zaś mutatora "Set" (zwiększy to przejrzystość kodu i ułatwi nam pracę). Jeżeli do tej pory nie używałeś modyfikatora __fastcall, możesz się zastanawiać, do czego on służy. Używany jest on do deklarowania funkcji, które oczekują parametrów przesyłanych w rejestrach, na przykład funkcji Pascala. A to oznacza, że kiedy dziedziczysz klasy z VCL, wszystkie funkcje powinny używać konwencji __fastcall.

Uwaga: Autorzy oraz The Bits, nie ponoszą odpowiedzialności za ewentualne szkody wynikłe z postępowania według zasad tego samouczka.
(c)1997 Kris Erickson. (c)1999 Will Green.
Tłumaczenie:  Maciek Frankiewicz

1  2  3  4  5  6  7  8  9