[ Pobierz całość w formacie PDF ]
.Ich zestawienie zawiera tabela 8.10.Tabela 8.10.Obiekty VCL posiadaj¹ce w³aœciwoœæ ImageIndexKlasa komponentuGenealogiaTCoolBandÕTCollectionItemÕTPersistentTCustomActionÕTComponentÕTPersistentTHeaderSectionÕTCollectionItemÕTPersistentTListColumnÕTCollectionItemÕTPersistentTMenuItemÕTComponentÕTPersistentTTabSheetÕTWinControlÕTControlÕTComponentÕTPersistentTToolButtonÕTGraphicControlÕTControlÕTComponentÕTPersistentNa podstawie doœwiadczeñ nabytych przy konstrukcji edytorów dotychczasopisanych mo¿na by pokusiæ siê o generalne rozwi¹zanie edycji w³aœciwoœciImageIndex dla wszystkich obiektów [5 Celowo mówimy tu ogólnie o „obiektach”,nie „komponentach”, rezerwuj¹c to ostatnie okreœlenie dla egzemplarzy klaswywodz¹cych siê z klasy TComponent – przyp.t³um.] zestawionych w tabeli 8.10.Rozwi¹zanie to ma postaæ klasy bazowej, z której ³atwo wyprowadziæ edytor dlakonkretnego obiektu.Deklaracjê tej klasy przedstawia wydruk 8.27.Wydruk 8.27.Deklaracja abstrakcyjnej klasy bazowej dla edytorów w³aœciwoœciImageIndexclass PACKAGE TImageIndexProperty : public TIntegerProperty{typedef TIntegerProperty inherited;private:static const int Border = 2;static const int MaxImageWidth = 64;static const int MaxImageHeight = 64;protected:virtual Imglist::TCustomImageList* __fastcall GetImageList(void) = 0;public:virtual TPropertyAttributes __fastcall GetAttributes(void);virtual void __fastcall GetValues(Classes::TGetStrProc Proc);DYNAMIC void __fastcall ListMeasureWidth(const AnsiString Value,Graphics::TCanvas* ACanvas,int& AWidth);DYNAMIC void __fastcall ListMeasureHeight(const AnsiString Value,Graphics::TCanvas* ACanvas,int& AHeight);DYNAMIC void __fastcall ListDrawValue(const AnsiString Value,Graphics::TCanvas* ACanvas,const Windows::TRect& ARect,bool ASelected);DYNAMIC void __fastcall PropDrawValue(Graphics::TCanvas* ACanvas,const Windows::TRect& ARect,bool ASelected);__property Imglist::TCustomImageList* RemoteImageList ={read=GetImageList};protected:#pragma option push -w-inlinline __fastcall virtual TImageIndexProperty(const _di_IFormDesignerADesigner,int APropCount): TIntegerProperty(ADesigner,APropCount){ }#pragma option poppublic:#pragma option push -w-inlinline __fastcall virtual ~TImageIndexProperty(void){ }#pragma option pop};Jako ¿e wymienione w tabeli 8.10 obiekty ró¿ni¹ siê (z punktu widzeniaw³aœciwoœci ImageIndex) jedynie relacj¹ do listy zawieraj¹cej ¿¹dane obrazki,jedyn¹ metod¹ wymagaj¹c¹ przedefiniowania w klasach pochodnych jest metodaGetImageList().Przedefiniowanie to jest konieczne, bowiem metoda ta jestmetod¹ czysto wirtualn¹ (ang.pure virtual), a wiêc klasa TImageIndexPropertyjest abstrakcyjn¹ klas¹ bazow¹ (ang.abstract base class).Jak ³atwo zauwa¿yæ, tabela 8.10 wprowadza podzia³ prezentowanych obiektów nadwie grupy: tych wywodz¹cych siê z klasy TComponent (czyli komponentów) ipozosta³ych, wywodz¹cych siê jedynie z klasy TPersistent.Implementacjê metodyGetImageList() w klasie bazowej dla tej drugiej grupy(TPersistentDerivedImageIndexProperty) przedstawia wydruk 8.28.Wydruk 8.28 [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • luska.pev.pl
  •