Pewne typy właściwości, na przykład tablice, wymagają własnych edytorów właściwości...
Serwis znalezionych hasełOdnośniki
- Smutek to uczucie, jak gdyby się tonęło, jak gdyby grzebano cię w ziemi.
- Przykładowo, poniższe wyrażenie:Dim targetNumber As Integer = CType("12", Integer)jest odpowiednikiem następującego wyrażenia:Dim...
- obiektywn ignorancj polityczn, na przykad brakiem wiedzy politycznej czy politycznych zainteresowa (osobisty skrypt: nie wiem, co si dzieje, ale skoro si...
- Z drugiej strony ciekawym przykadem rnorodnoci motywacji, ktrymi kieroway si stare" i nowe" siy polityczne w ustalaniu ordynacji moe by ordynacja...
- Zabawnym przykładem kierowania wrażeniem jest „sztuka zyskiwania przewagi" Stephena Pottera (1971) albo inaczej, sztuka wywierania wrażenia, że się jest...
- Przykład ten pokazuje, że logika Arystotelesa dotyczy stosunku między pojęciami, w tym przypadku pojęciami „żywej istoty” i „śmiertelności”...
- Szczegln form twrczoci jest improwizacja ruchowa wymagajca fantazji i kultury ruchu, zrytmizowaniai pynnoci ruchu a jednoczenie jest podporzdkowana...
- Śledzili oni również kilka czynników, z którymi ich nastrój mógł być skorelowany, na przykład ilość snu ostatniej nocy oraz pogodę...
- Bariery dla handlu zagranicznegoCaCzy wymagane s licencje?KontyngentyDokuczliwe bariery pozacelneOgraniczenia inwestycyjneLimity...
- doywotnikiem a zobowizanym takie stosunki, e nie mona wymaga odstron, eby pozostaway nadal w bezporedniej ze sob stycznoci, sd nadanie jednej z...
- Stworzenia zazwyczaj żywiły się energią Ciemnej Strony, która przepływała przez Bane’a, ale konstruowanie holocronu wymagało, żeby Mistrz ukierunkował...
Smutek to uczucie, jak gdyby się tonęło, jak gdyby grzebano cię w ziemi.
Bez edytora inspektor obiektów nie jest w stanie zapewnić programiście poprawnego
interfejsu edycji wartości właściwości. Więcej informacji na temat edytorów właściwo-
ści znajduje się w rozdziale 5.
Dowiedzieliśmy się, że inspektor obiektów zapewnia programiście interfejs dla opubli-
kowanych właściwości komponentu. Jest to domyślne zachowanie, ale nie musimy się do
niego ograniczać. Dowiedzieliśmy się także, że strumieniowane mogą być właściwości
klas pochodzących od . Oznacza to możliwość kreowania strumieniowa-
nych właściwości, które nie pojawiają się w oknie Object Inspector. Poza tym jesteśmy
w stanie napisać metody strumieniowania dla właściwości, dla których C++Builder nie
zna sposobu ich odczytu oraz zapisu.
Zapis niepublikowanych właściwości uzyskujemy, dodając kod informujący C++Buildera
o sposobie zapisu i odczytu wartości. Proces ten polega na wykonaniu dwóch kroków.
Przysłaniamy metody "#. Wcześniej zdefiniowane metody
przekazujemy do obiektu nazywanego obiektem wypełniającym.
Tworzymy metody odczytu i zapisu wartości właściwości.
Rozdział 4. Tworzenie własnych komponentów
255
Wielokrotnie wspominaliśmy, że publikowane właściwości są automatycznie wysyłane
do pliku formularza. Zajmują się tym metody odczytu i zapisu zdefiniowane dla konkret-
nych typów właściwości. Nazwy właściwości i metod wykorzystywanych do strumie-
niowania są definiowane przez metodę "#. Gdy chcemy strumieniować
niepublikowaną właściwość, musimy o tym poinformować C++Buildera. Wykonujemy
to, przysłaniając metodę "#.
Listing 4.61 zawiera przykładowy komponent, '% %, posiadający trzy niepubli-
kowane właściwości. Komponent zapewnia ich strumieniowanie za pomocą dodatko-
wych metod. W trakcie wykonywania programu tworzy drugi komponent o nazwie
%, na który wskazuje właściwość %6. Ponieważ komponent ten nie jest upusz-
czany w formularzu przez programistę, jego właściwości nie są automatycznie strumie-
niowane do pliku. Zapewniamy więc kod konieczny do zapisania tych danych.
Komponent strumieniujący niepublikowane właściwości
55) ) 8286 2O8) 2:689
( )&' ( )
' &
( )&&( )+( ) 01 -&( ) +1K -
(*) )&' ( )
,&
* I
( )0 )T
, E +(E0E-
, K +(K 0K -
, E I+(E0E-
, K I+(K 0K -
, E )T+(E0E-
, K )T+(K 0K -
&
, ( 0 -
' &
(*) )+( ) 01 -
3(*) )+, -
* I I I
( )0 )T )T )T
, (*) )&&(*) )+( ) 01 -&( ) +1 -
55)7
)T ( )+.M$$-55) )) R
, (*) )&&3(*) )+, -
256
Część I Podstawy środowiska C++Builder
)T-
)T
, (*) )&& ( 0 -
55 2 92)):'6O
( ) && -
@A +D DE K + =--
@A +D IDE IK I+ I=DD--
556)697 7 )T)6O6R6
'K W
@A -556)6 6 6 O7R
(*) )0 ) ) B(*) )0A+ @A -
)@A )T.M$$-
K W+ )T=.M$$-
+ )T.M$$-CC+ )@A )T@A.)= )T@A.)--
K W
K W
55 27R6 6 6 6 697 7R27 PQ
K W+ )T=.M$$-
@A +D )TDE )TK )TK W-
, (*) )&&E +(E0E-
E@AE +-
, (*) )&&K +(K 0K -
K @AK + -
, (*) )&&E I+(E0E-
IE@AE* +-
, (*) )&&K I+(K 0K -
K @AK * + I-
, (*) )&&E )T+(E0E-
E@AE/ +--
)T+( )0-E@AE ) +.M$$-
Rozdział 4. Tworzenie własnych komponentów
257
, (*) )&&K )T+(K 0K -
)T-
K @AK / +-
K @AK ) + )T-
K @AK / +-
Metoda "# zawiera dwa wiersze rejestrujące dwie pierwsze właści-
wości.
@A +D DE K + =--
@A +D IDE IK I+ I=DD--
Informujemy w nich C++Buildera, aby korzystał z dostarczonych metod zapisu i od-
czytu w trakcie strumieniowania tych właściwości. Ostatni parametr to znacznik okre-
ślający, czy należy zapisywać dane. Właściwości mają być strumieniowane tylko wte-
dy, gdy ich aktualne wartości różnią się od wartości domyślnych.
Właściwość %6 jest nieco inna i wymaga dodatkowego wyjaśnienia. Różnica polega
głównie na tym, że właściwość jest komponentem (instancja tworzona jest w trakcie
działania programu), a nie typem danych. Listing 4.62 przedstawia fragment kodu od-
powiedzialny za stwierdzenie, czy należy ją strumieniować.
Określenie, czy właściwość będąca komponentem wymaga strumieniowania
'K W
+ @A -556)6 6 6 O7R
(*) )0 ) ) B(*) )0A+ @A -
+ )@A )T.M$$-
K W+ )T=.M$$-
+ )T.M$$-CC+ )@A )T@A.)= )T@A.)--
K W
K W
55 27R6 6 6 6 697 7R27 PQ
K W+ )T=.M$$-
@A +D )TDE )TK )TK W-
Właściwość reprezentuje komponent tworzony w trakcie wykonywania programu. Po-
nieważ komponent nie jest upuszczany do formularza, nie jest przeprowadzany domyśl-
ny mechanizm strumieniowania. Zajmuje się tym napisana przez nas metoda
"#.
258
Część I Podstawy środowiska C++Builder
Najpierw musimy stwierdzić, czy właściwość obiektu wynosi , aby
zapobiec zapisywaniu wartości właściwości w formularzach potomnych. Skoro nie ist-
nieje wartość dziedziczenia, strumieniujemy właściwość (komponent), gdy %6 jest
różne od /!!.
Jeśli właściwość wynosi , analizujemy właściwość %6 przodka. Jeśli
wynosi /!!, strumieniujemy właściwość ('% % > %6), gdy jest różna od /!!.
Jeśli właściwość %6 przodka nie jest równa /!!, dokonujemy ostatniego sprawdze-
nia; jeśli właściwość ('% % > %6) wynosi /!! lub nazwa właściwości %6
jest różna od przodka, strumieniujemy właściwość (komponent).
Na końcu definiujemy właściwość, używając opisanej wcześniej metody "#.
Poznaliśmy sposoby wykorzystania metody "#. Dotyczy ona strumie-
niowania danych typu liczbowego, tekstowego, znakowego lub wyliczeniowego. Istnieje
też inna metoda, "#, zaprojektowana do strumieniowania danych
binarnych, jak obrazy lub dźwięki. Więcej informacji na ten temat znajduje się w sekcji
„DefineBinaryProperty” tematu „TWriter” z pomocy C++Buildera.