Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.
Po utworzeniu pakietu wykonywania, który wygenerował odpowiedni plik importu, mo-
żemy rozpocząć pracę nad pakietem projektowym wykorzystującym wcześniejszy pakiet
(jego komponenty). W pakiecie tym znajdzie się kod rejestracji, funkcje specjalne, a także
edytory komponentów i właściwości wymagane przez komponenty. Sekcja Requires
zawiera bibliotekę importu pakietu wykonywania. Jeśli pakiet jest na tyle prosty, że nie
wymaga dodatkowych edytorów, musimy napisać tylko kod rejestracji (tworzenie edy-
torów właściwości i komponentów omawia rozdział 5.).
190
Część I Podstawy środowiska C++Builder
Projekty pakietów kompiluje się w tradycyjny sposób, generowane jest też typowe wyj-
ście z kompilatora i konsolidatora. Pakiety to w zasadzie zmodyfikowane biblioteki
DLL systemu Windows lub biblioteki dynamiczne systemu Linux.
Pakiet instaluje się w środowisku programistycznym na dwa sposoby. Pierwszy to
kompilacja pakietu z wpisem Install z menu podręcznego projektu pakietu. Drugi spo-
sób polega na tradycyjnej kompilacji, a następnie instalacji pakietu poleceniem Install z menu — pakiet zostanie dodany bez rekompilacji.
Istnieje jeszcze trzecia droga, z której na ogół będą korzystali użytkownicy pakietu.
Polega ona na wybraniu polecenia Install Packages z menu IDE Components środowi-
ska programistycznego.
Biblioteka VCL to bardzo użyteczne narzędzie, ponieważ wykonanie aplikacji z zapew-
nianych przez nią komponentów, klas i metod jest bardzo proste. Czasem jednak oka-
zuje się, że komponenty te nie zapewniają tego, co jest nam potrzebne. To właśnie możliwość pisania i modyfikacji komponentów daje przewagę temu językowi programowania i zapewnia, że C++Builder jest środowiskiem często wykorzystywanym przez
programistów na całym świecie. Tworzenie własnych komponentów pozwala poznać
działanie VCL i zwiększyć produktywność C++Buildera. Poza tym warto zmierzyć się
z komercyjnymi komponentami oferowanymi przez wiele stron internetowych.
Początkowo zadanie tworzenia własnych komponentów wydaje się trudne. Po przeczyta-
niu kilku artykułów i ćwiczeń na ten temat zapewne każdy zastanawia się, od czego za-
cząć. Najprościej wykorzystać już istniejący komponent, dodając do niego nowe funkcje.
Choć wydaje się to oczywiste, możemy po prostu dostosowywać lub rozszerzać stan-
dardowe komponenty VCL, aby sprostały one wymaganiom stawianym naszej aplikacji.
Gdy piszemy aplikacjÄ™ bazodanowÄ…, umieszczamy komponent na formularzu,
a następnie modyfikujemy jego właściwości zawsze na te same wartości. Podobnie w pew-
nych narzędziach firmowych zawsze umieszczamy na formularzu pasek stanu, dodajemy
kilka paneli i usuwamy uchwyt zmiany rozmiaru. Zamiast wykonywać te monotonne
czynności w każdym nowym projekcie, kreujemy własny komponent, który automa-
tycznie ustawia wszystko za nas. W ten sposób nie tylko szybciej rozpoczynamy pracę
nad nowymi aplikacjami, ale dodatkowo mamy pewność, że są one pozbawione błędów.
Jeśli jednak znajdzie się gdzieś jakiś błąd, wystarczy poprawić kod komponentu i ponownie skompilować pakiet, a zmiany zostaną uwzględnione w wykorzystujących go
aplikacjach.
Istnieją różne rodzaje komponentów, więc to przodek naszego komponentu określi jego
typ.
Rozdział 4. Tworzenie własnych komponentów
191
Komponenty niewizualne dziedziczÄ… po klasie . Klasa ta zawiera minimum,
jakie musi posiadać każdy komponent, ponieważ zapewnia podstawową integrację ze
środowiskiem projektowym i umożliwia strumieniowanie właściwości.
Komponenty niewizualne to na ogół otoczenie bardziej złożonego kodu, który nie ma
związku z interfejsem użytkownika. Przykładem może być komponent przyjmujący
komunikat dziennika zdarzeń i automatycznie wysyłający go do komponentu listy tek-
stowej lub zapisujący go na dysk twardy. Sam komponent jest niewidoczny dla użyt-
kownika aplikacji, ale wykonuje swoje działania w tle, zapewniając poprawną pracę
aplikacji.
Komponenty okienkowe dziedziczÄ… po klasie . Obiekty te pojawiajÄ… siÄ™
w interfejsie użytkownika i są interaktywne (na przykład umożliwiają wybranie pliku
z listy). Choć możliwe jest kreowanie komponentów wywodzących się od ,
C++Builder zapewnia komponent , który czyni to zadanie prostszym.
Komponenty graficzne przypominają komponenty okienkowe. Główna różnica między
nimi polega na tym, że te pierwsze nie posiadają uchwytu okna, a co za tym idzie, nie
mogą wchodzić w interakcję z użytkownikiem. Brak uchwytu oznacza także mniej zaj-
mowanych zasobów. Choć komponenty te nie wchodzą w interakcję z użytkownikiem,
mogą otrzymywać pewne komunikaty okna, na przykład te związane ze zdarzeniami
myszy. Komponenty te dziedziczÄ… po klasie .
Największą zaletą budowania nowych komponentów wykorzystujących już istniejące
jest zmniejszenie czasu przeznaczanego na programowanie. Nie bez znaczenia jest też
to, że zakładamy, iż wszystkie komponenty, których używamy, są pozbawione błędów.
Przykładem może być komponent , z którego korzysta w zasadzie każdy projekt.
Jeśli kilka tworzonych przez nas projektów współdzieli szatę graficzną, która wymaga
dodania wielu etykiet i zmiany ich właściwości na te same wartości, warto zastanowić
się nad wykreowaniem własnego komponentu, który modyfikuje właściwości etykiet,
a my tylko zajmujemy się ustawieniem znajdujących się w nich tekstów i określeniem
ich położenia.