[ Pobierz całość w formacie PDF ]
.wygl¹dwybranego kursora.W zwi¹zku z tym bazowa klasa wszystkich edytorów w³aœciwoœci– TPropertyEditor – wzbogacona zosta³a o szeœæ nowych metod.Treœæ piêciu znich, wymienionych poni¿ej, charakterystyczna jest dla klasycznej, „tekstowej”reprezentacji w³aœciwoœci, wymaga wiêc przedefiniowania w klasie pochodnej,pos³uguj¹cej siê dodatkowo wspomnianymi ikonami: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);DYNAMIC void __fastcall PropDrawName(Graphics::TCanvas*ACanvas,const Windows::TRect&ARect,bool ASelected);Metody te wspó³dzia³aj¹ z pozosta³¹, szóst¹ metod¹:AnsiString __fastcall GetVisualValue();Znaczenie wymienionych metod wyjaœnia tabela 8.8.Tabela 8.8.Nowe metody edytora w³aœciwoœci zwi¹zane z wyœwietlaniem ikonMetodaOpisListMeasureWidth()Umo¿liwia zmianê domyœlnej szerokoœci przeznaczonej na wyœwietlenie danejwartoœci w liœcie; najwiêksza z ostatecznych szerokoœci poszczególnych wartoœcijest jednoczeœnie doln¹ granic¹ szerokoœci ca³ej listy.ListMeasureHeight()Umo¿liwia zmianê domyœlnej wysokoœci przeznaczonej na wyœwietlenie danejwartoœci w liœcie; wywo³anie tej metody jest konieczne, je¿eli domyœlnawysokoœæ, wynikaj¹ca z tekstowej reprezentacji wartoœci, jest niewystarczaj¹cado wyœwietlenia towarzysz¹cej ikony.ListDrawValue()Dokonuje wyœwietlenia wartoœci w liœcie.PropDrawValue()Okreœla wygl¹d pola wartoœci danej w³aœciwoœci w sytuacji, gdy w³aœciwoœæ tanie jest aktualnie edytowana (w czasie edycji pole to ma zawsze postaæedytowalnego ³añcucha AnsiString).PropDrawName()Okreœla wygl¹d pola nazwy danej w³aœciwoœci.GetVisualValue()Istot¹ tej metody jest zapewnienie poprawnej postaci pola wartoœci danejw³aœciwoœci w sytuacji, gdy zaznaczonych jest kilka komponentów.Je¿eli metodaAllEqual() zwraca wartoœæ true, to oznacza, ¿e wynikiem metody GetValue() jestwspólna wartoœæ w³aœciwoœci dla wszystkich komponentów – i ta w³aœnie wartoœæzwracana jest jako wynik metody GetVisualValue().Zwrócenie przez metodêAllEqual() wartoœci false stanowi sygna³, i¿ nie mo¿na okreœliæ wspólnejwartoœci dla wszystkich zaznaczonych komponentów i metoda GetVisualValue()zwraca wówczas wartoœæ true.Ten aspekt ogólnie pojêtego edytowania w³aœciwoœcima charakter uniwersalny, niezale¿ny od konkretnego edytora, dlatego te¿ nieprzewidziano mo¿liwoœci przedefiniowywania metody GetVisualValue() w klasachpochodnych edytorów.Symboliczny wp³yw wymienionych metod na wygl¹d poszczególnych elementówinspektora obiektów przedstawia rysunek 8.3.Rysunek 8.3.Zwi¹zek wybranych metod edytora w³aœciwoœci z oknem inspektoraobiektówJak ju¿ wczeœniej wspominaliœmy, przy tworzeniu nowego edytora w³aœciwoœcinale¿y powa¿nie zastanowiæ siê nad wyborem jego klasy bazowej – je¿eliprzyk³adowo docelowa w³aœciwoœæ bêdzie w³aœciwoœci¹ ca³kowitoliczbow¹,najbardziej prawdopodobnym kandydatem do tej roli bêdzie klasaTIntegerProperty.Na wydruku 8.10 przedstawiamy deklaracjê przyk³adowegoedytora wyprowadzonego z klasy TEnumProperty; zak³adamy przy tym, i¿ pozawzbogaceniem tej ostatniej o wyœwietlanie ikon, ilustruj¹cych poszczególnewartoœci, pozosta³e aspekty jej funkcjonowania pozostaj¹ niezmienione.Wydruk 8.10.Deklaracja edytora w³aœciwoœci wzbogacaj¹cego klasê bazow¹ owyœwietlanie ikon dla poszczególnych wartoœci#include "DsgnIntf.hpp"class TCustomImagePropertyEditor : public TEnumProperty{typedef TEnumProperty inherited;public: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);DYNAMIC void __fastcall PropDrawName(Graphics::TCanvas* ACanvas,const Windows::TRect& ARect,bool ASelected);protected:#pragma option push -w-inlinline __fastcall virtualTCustomImagePropertyEditor(const _di_IFormDesigner ADesigner,int APropCount): TEnumProperty(ADesigner,APropCount){ }#pragma option poppublic:#pragma option push -w-inlinline __fastcall virtual ~TCustomImagePropertyEditor(void){ }#pragma option pop};W kolejnych czêœciach rozdzia³u opiszemy teraz szczegó³owo ka¿d¹ zewspomnianych na wstêpie piêciu metod podlegaj¹cych przedefiniowaniu
[ Pobierz całość w formacie PDF ]