यह सिर्फ एक विशेष मामले के एक बहुत ही सरल उदाहरण है, लेकिन अभी भी, यह एक बहुत ही आम मामला है।
यदि आपके पास दृश्य नियंत्रण है, तो आप एक चर/संपत्ति को बदलते समय नियंत्रण को पुनर्निर्मित करने की आवश्यकता हो सकती है। उदाहरण के लिए, मान लें कि आपके नियंत्रण में BackgroundColor
चर/संपत्ति है।
TMyControl = class(TCustomControl)
public
BackgroundColor: TColor;
...
end;
और TMyControl.Paint
प्रक्रिया में, आप पृष्ठभूमि BackgroundColor
के मूल्य का उपयोग कर रंग:
तरह के एक चर/संपत्ति जोड़ने का सबसे आसान तरीका यह एक सार्वजनिक चर हो जाने के लिए है। लेकिन यह ऐसा नहीं करता है। क्योंकि यदि आप नियंत्रण के उदाहरण के BackgroundColor
चर बदलते हैं, तो नियंत्रण स्वयं को पुन: चित्रित नहीं करता है।इसके बजाए, अगली बार जब किसी अन्य कारण से नियंत्रण फिर से चला जाता है तब तक नया पृष्ठभूमि रंग तब तक उपयोग नहीं किया जाएगा।
तो तुम इस तरह यह क्या करना है:
TMyControl = class(TCustomControl)
private
FBackgroundColor: TColor;
public
function GetBackgroundColor: TColor;
procedure SetBackgroundColor(NewColor: TColor);
...
end;
जहां
function TMyControl.GetBackgroundColor: TColor;
begin
result := FBackgroundColor;
end;
procedure TMyControl.SetBackgroundColor(NewColor: TColor);
begin
if FBackgroundColor <> NewColor then
begin
FBackgroundColor := NewColor;
Invalidate;
end;
end;
और फिर नियंत्रण का उपयोग प्रोग्रामर MyControl1.GetBackgroundColor
का उपयोग रंग प्राप्त करने के लिए, और MyControl1.SetBackgroundColor
उपयोग करने के लिए सेट करने के लिए करना पड़ता है यह। वह अजीब है।
गुणों का उपयोग करके, आप दोनों दुनिया के सर्वश्रेष्ठ हो सकते हैं। दरअसल,, वह पढ़ यदि आप देखने के प्रोग्रामर के दृष्टिकोण से
TMyControl = class(TCustomControl)
private
FBackgroundColor: TColor;
procedure SetBackgroundColor(NewColor: TColor);
published
property BackgroundColor: TColor read FBackgroundColor write SetBackgroundColor;
end;
...
procedure TMyControl.SetBackgroundColor(NewColor: TColor);
begin
if FBackgroundColor <> NewColor then
begin
FBackgroundColor := NewColor;
Invalidate;
end;
end;
तो
- कर सकते हैं दोनों और एक ही पहचानकर्ता,
MyControl1.BackgroundColor
संपत्ति का उपयोग कर पृष्ठभूमि रंग निर्धारित करते हैं, और
- नियंत्रण जब वह इसे सेट करता है तो उसे पुनर्निर्मित किया जाता है!
मैजिकमास्टर - मुझे यहां कुछ याद आना चाहिए; क्या आप समझा सकते हैं कि आप अपने उदाहरण TSampleClass.SomeInfo के लिए गेटटर और सेटर को कैसे परिभाषित करेंगे, और वास्तव में उन विधियों को बुलाया जाता है जब आप मान निर्दिष्ट करते हैं, या SomeInfo चर से मान पढ़ते हैं? – Stuart
यह प्रश्न देखें: http://stackoverflow.com/q/3963874/267938 –