2010-09-16 9 views
7

उदाहरण के लिए, फ़ॉन्ट की तरह। क्या कोई भी एक बहुत ही सरल उदाहरण दे सकता है? हो सकता है कि सिर्फ दो उप-गुणोंमैं उप-गुणों वाली संपत्ति को कैसे कोड करूं?


संपादित के साथ एक संपत्ति: मेरा मतलब है कि जब मैं वस्तु निरीक्षक में फ़ॉन्ट को देखो यह है एक छोटे से धन चिह्न जो मैं फ़ॉन्ट का नाम "Times New Roman" स्थापित करने के लिए क्लिक कर सकते हैं, फ़ॉन्ट का आकार "10", आदि। अगर मैं गलत शब्दों का उपयोग करता हूं, तो दुख है, यही वह है जो मैं "उप-गुण" द्वारा करता हूं।

उत्तर

15

आपको बस एक नई प्रकाशित संपत्ति बनाना है जो कि प्रकाशित गुणों के प्रकार को इंगित करता है।

जांच के लिए इस कोड

type 
    TCustomType = class(TPersistent) //this type has 3 published properties 
    private 
     FColor : TColor; 
     FHeight: Integer; 
     FWidth : Integer; 
    public 
     procedure Assign(Source: TPersistent); override; 
    published 
     property Color: TColor read FColor write FColor; 
     property Height: Integer read FHeight write FHeight; 
     property Width : Integer read FWidth write FWidth; 
    end; 

    TMyControl = class(TWinControl) 
    private 
     FMyProp : TCustomType; 
     FColor1 : TColor; 
     FColor2 : TColor; 
     procedure SetMyProp(AValue: TCustomType); 
    public 
     constructor Create(AOwner: TComponent); override; 
     destructor Destroy; override; 
    published 
     property MyProp : TCustomType read FMyProp write SetMyProp; //now this property has 3 "sub-properties" (this term does not exist in delphi) 
     property Color1 : TColor read FColor1 write FColor1; 
     property Color2 : TColor read FColor2 write FColor2; 
    end; 

    procedure TCustomType.Assign(Source: TPersistent); 
    var 
    Src: TCustomType; 
    begin 
    if Source is TCustomType then 
    begin 
     Src := TCustomType(Source); 
     FColor := Src.Color; 
     Height := Src.Height; 
     FWidth := Src.Width; 
    end else 
     inherited; 
    end; 

    constructor TMyControl.Create(AOwner: TComponent); 
    begin 
    inherited; 
    FMyProp := TCustomType.Create; 
    end; 

    destructor TMyControl.Destroy; 
    begin 
    FMyProp.Free; 
    inherited; 
    end; 

    procedure TMyControl.SetMyProp(AValue: TCustomType); 
    begin 
    FMyProp.Assign(AValue); 
    end; 
+6

TMyControl.MyProp संपत्ति के लिए सेटर सीधे FMyProp के लिए लिख नहीं किया जाना चाहिए। वह मूल FMyProp ऑब्जेक्ट को रिसाव करेगा और कॉलर के ऑब्जेक्ट का स्वामित्व लेगा। इसके बजाए, इसे एक सेटर विधि का उपयोग करने की आवश्यकता है जो FMyProp.Assign() को कॉल करता है, और फिर TCustomType को असाइन() लागू करने की आवश्यकता होती है। –

1

आपका क्या मतलब है, उप-गुणों? डेल्फी में ऐसी कोई बात नहीं है।

शायद आप वस्तु रचना जहां एक वस्तु उदाहरण के लिए, किसी अन्य वस्तु का संदर्भ होता है मतलब -

interface 

type 
TObj1 = class 
private 
    FFont: TFont; 
    property Font: TFont read FFont; 
end; 

... 

implementation 

var 
    MyObj: TObj1; 
begin 
    MyObj1 := TObj1.Create; 
    MyObj1.Font.Name := 'Arial'; 
+0

(उत्तर देने के लिए +1 धन्यवाद) मेरा मतलब है कि जब मैं ऑब्जेक्ट इंस्पेक्टर में फ़ॉन्ट को देखता हूं तो इसमें एक लिटल एप्लस चिह्न होता है जिसे मैं फोनेट नाम "टाइम्स न्यू रोमन", फ़ॉन्ट आकार "10" आदि सेट करने के लिए क्लिक कर सकता हूं। मैं गलत शब्दों का उपयोग करता हूं, यही वह है जो मैं "उप-गुण" द्वारा करता हूं। – Mawg

संबंधित मुद्दे