ich meine benutzerdefinierte visuelle Komponente schreibe und finden es praktisch, einige seiner Eigenschaften als Array zu veröffentlichen:C++ Builder XE - publishing Array-Eigenschaft
class PACKAGE TVctDiag2 : public TCustomControl
{
__published:
__property int ArrowStyle[int index] = {read=GetArrowStyle,write=SetArrowStyle};
protected:
void __fastcall SetArrowStyle(int index, int value);
int __fastcall GetArrowStyle(int index);
...
};
Komponenten aufgebaut ist und ohne Probleme installiert. Aber nachdem ich versuche, eine Komponente in das Formular einzufügen, wird das Meldungsfeld für die Zugriffsverletzung angezeigt. Beim Debuggen der Fehlerquelle, die ich gefunden habe, wird diese Methode GetArrowStyle mit Index Wert von -1 aufgerufen, die das Auslesen von Array-Grenzen verursacht. Ich verstehe, dass Benutzer von TVctDiag2 Klasse (= integrierte Entwicklungsumgebung) kann nicht wissen, was die Array-Größe ist. Die Größe des Arrays ist konstant und es ist eine recht kleine Anzahl (6), so alternative Lösung wäre:
class PACKAGE TVctDiag2 : public TCustomControl
{
__published:
__property int ArrowStyle1 = {read=GetArrowStyle1,write=SetArrowStyle1};
__property int ArrowStyle2 = {read=GetArrowStyle2,write=SetArrowStyle2};
__property int ArrowStyle3 = {read=GetArrowStyle3,write=SetArrowStyle3};
__property int ArrowStyle4 = {read=GetArrowStyle4,write=SetArrowStyle4};
__property int ArrowStyle5 = {read=GetArrowStyle5,write=SetArrowStyle5};
__property int ArrowStyle6 = {read=GetArrowStyle6,write=SetArrowStyle6};
protected:
void __fastcall SetArrowStyle1(int index, int value);
int __fastcall GetArrowStyle1(int index);
void __fastcall SetArrowStyle2(int index, int value);
int __fastcall GetArrowStyle2(int index);
void __fastcall SetArrowStyle3(int index, int value);
int __fastcall GetArrowStyle3(int index);
void __fastcall SetArrowStyle4(int index, int value);
int __fastcall GetArrowStyle4(int index);
void __fastcall SetArrowStyle5(int index, int value);
int __fastcall GetArrowStyle5(int index);
void __fastcall SetArrowStyle6(int index, int value);
int __fastcall GetArrowStyle6(int index);
...
};
Aber ich ziehe allgemeine Lösung. Wie kann dies erreicht werden, wenn möglich mit der Möglichkeit, Eigenschaftswerte über den Objektinspektor zu ändern.