[ Pobierz całość w formacie PDF ]
.Contains(odSelected)){ACanvas->Draw(ARect.Left,ARect.Top,ActiveWritersGuildLogo);}else{ACanvas->Draw(ARect.Left,ARect.Top,InActiveWritersGuildLogo);}}Na koniec jeszcze jedna uwaga: stosuj¹c w³aœciwe nazewnictwo zasobów w plikuzasobowym umo¿liwiamy ³adowanie ich w pêtli programowej.W poni¿szymprzyk³adzie kolejne obrazki identyfikowane s¹ nazwami RESOURCE_Imagexx, gdziexx zmienia siê od 01 do 17:// w deklaracji klasy:TImageList*ImageList;//--------------------------------------------------------------------------//// w konstruktorze/ImageList =new TImageList(this);ImageList->Masked =false;for(int i=0;iResInstLoad(reinterpret_cast(HInstance),rtBitmap,AnsiString("RESOURCE_Image").cat_sprintf(“%.2d ”,i+1),clWhite);}//--------------------------------------------------------------------------//// w destruktorzedelete ImageList;//-------------------------------------------------------------------------//Podzia³ w³aœciwoœci na kategorie i ich rejestracjaPocz¹wszy od wersji 5 C++Builder umo¿liwia podzia³ w³aœciwoœci komponentów nakategorie, co m.in.umo¿liwia posegregowanie ich w ten sposób w oknieInspektora Obiektów (patrz rys.10.13).Kategoria w³aœciwoœci reprezentowanajest przez klasê wywodz¹c¹ siê z klasy bazowej TPropertyCategory.W niniejszejsekcji poka¿emy zwi¹zek kategorii w³aœciwoœci z komponentami VCL.Tu proszê wkleiæ rysunek z pliku AG-10-C.BMPRysunek 10.13 W³aœciwoœci komponentu w podziale na kategorie.Kategorie i ich tworzenieC++Builder predefiniuje 13 standardowych klas kategorii, zestawionych w tabeli10.13Tabela 10.13 Predefiniowane kategorie C++BuilderaNazwa kategoriiKlasa kategoriiActionTActionCategoryDataTDataCategoryDatabaseTDatabaseCategoryDrag, Drop and DockingTDragNDropCategoryHelp and HintsTHelpCategoryInputTInputCategoryLayoutTLayoutCategoryLegacyTLegacyCategoryLinkageTLinkageCategoryLocaleTLocaleCategoryLocalizableTLocalizableCategoryMiscellaneousTMiscellaneousCategoryVisualTVisualCategoryPobie¿ny opis ka¿dej z wymienionych kategorii znajduje siê w rozdziale 2, zaœdeklaracje klas wymienionych w tabeli 10.13 zawarte s¹ w pliku Dsgnintf.hpp.Zestaw predefiniowanych kategorii mo¿e byæ uzupe³niony o kategorie definiowaneprzez u¿ytkownika.Nowa kategoria musi zostaæ wyprowadzona z klasyTPropertyCategory lub którejœ z jej klas pochodnych.Wymaga siê, by nowa klasakategorii przedefiniowywa³a metody Name() i Description() — tak naprawdêprzedefiniowywanie metody Description(), zwracaj¹cej opis kategorii nie jestkonieczne, lecz z drugiej strony nie wymaga ono wiêkszego wysi³ku.Wydruki 10.38 i 10.39 przedstawiaj¹ szablony kodu dokonuj¹cego rejestracjinowej kategorii.Frazê NameOfCategory nale¿y na nich zast¹piæ nazw¹ kategorii,nale¿y ponadto ustawiæ w³aœciwy wynik metod Name() i Description ().UWAGA DLA SK£ADACZA:W OSTATNIM ZDANIU WYRÓ¯NIENIE FRAZY NameOfCategory JEST NIEZWYKLE ISTOTNE IMUSI BYÆ ZACHOWANE W SK£ADZIEWydruk 10.38 Kod deklaruj¹cy now¹ kategoriê#includeclass PACKAGE TNameOfCategory : public TPropertyCategory{typedef TPropertyCategory inherited;public:#pragma option push -w-inlvirtual AnsiString __fastcall Name(){return Name(__classid(TNameOfCategory));}#pragma option popstatic AnsiString __fastcall Name(System::TMetaClass* vmt);#pragma option push -w-inlvirtual AnsiString __fastcall Description(){return Description(__classid(TNameOfCategory));}#pragma option popstatic AnsiString __fastcall Description(System::TMetaClass* vmt);#pragma option push -w-inl// konstruktorinline __fastcall TNameOfCategory (void) : TPropertyCategory() { }#pragma option pop#pragma option push -w-inl// destruktorinline __fastcall virtual ~TNameOfCategory (void) { }#pragma option pop};UWAGA DLA SK£ADACZA:NA WYDRUKU 10.38 WYRÓ¯NIENIE FRAZY NameOfCategory JEST NIEZWYKLE ISTOTNE I MUSIBYÆ ZACHOWANE W SK£ADZIEStatycznie zadeklarowane metody Name() i Description() musz¹ zostaæprzedefiniowane — pierwsza z nich decyduje o nazwie kategorii widocznej w oknieInspektora Obiektów:Wydruk 10
[ Pobierz całość w formacie PDF ]