2010-10-29 4 views
6

मैं अपना पहला कस्टम डेल्फी घटक बना रहा हूं। इसका मूल रूप से एक कस्टम Tpanel है जिसमें हेडर और लाइन टेक्स्ट प्रदर्शित होते हैं।कस्टम डेल्फी घटक में स्ट्रिंगलिस्ट प्रॉपर्टी को कैसे लागू किया जाए?

मैं एक स्ट्रिंगलिस्ट का उपयोग कर एकाधिक लाइन टेक्स्ट जोड़ने में सक्षम होना चाहता हूं।

जब घटक मैं पाठ लाइनों जब लाइनों को जोड़ने के पैनल पर प्रदर्शित करने के लिए नहीं मिल सकता है परीक्षण: NewLinesText.add ('पंक्ति 1 पाठ')

हालांकि जब मैं बनाने के काम करते हैं और क्रम में एक नया stringlist पॉप्युलेट करता है और फिर मेरे नियंत्रण के लिए असाइन करें: controlPanelitem.NewLinesText = MyNewStringlist

मैं इस तरह लाइनों को जोड़ने के लिए सक्षम होना चाहते हैं: NewLinesText.add ('पंक्ति 1 पाठ')

मैं WinXP पर उपयोग कर रहा हूँ डेल्फी 7 पेशेवर। नीचे कोड देखें।

किसी भी मदद की सराहना की जाएगी!

unit ControlPanelItem; interface uses SysUtils, Classes, Controls, ExtCtrls, Graphics, AdvPanel, StdCtrls, Windows,Forms,Dialogs; type tControlPanelItem = class(TAdvPanel) private fLinesText : TStrings; procedure SetLinesText(const Value: TStrings); procedure SetText; protected public constructor Create(AOwner : TComponent); override; destructor Destroy; override; published property NewLinesText : TStrings read FLinesText write SetLinesText; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [tControlPanelItem]); end; constructor tControlPanelItem.Create(AOwner: TComponent); begin inherited; fLinesText := TStringList.Create; end; destructor tControlPanelItem.Destroy; begin fLinesText.Free; inherited; end; procedure tControlPanelItem.SetLinesText(const Value: TStrings); begin fLinesText.Assign(value); SetText; end; procedure tControlPanelItem.SetText; var count : Integer; begin for count := 0 to fLinesText.Count - 1 do ShowMessage(fLinesText.strings[count]); end; end.

उत्तर

8

आप

procedure SetLines(Lines: TStrings); 
begin 
    FLinesText.Assign(Lines); 
    // Repaint, update or whatever you need to do. 
end; 

तुम भी रूप में जल्द ही आप के रूप में FLines की OnChange संपत्ति (अपने कस्टम नियंत्रण के निर्माता में ऐसा करते हैं, स्थापित करने के लिए आवश्यकता हो सकती है क्या करना चाहिए इसे बनाया)। इसे किसी भी TNofifyEvent पर सेट करें - आपके घटक की संगत (निजी या संरक्षित, मुझे लगता है) प्रक्रिया। इस प्रक्रिया में, आप अपनी जरूरत के पुनर्भुगतान, अद्यतन आदि कर सकते हैं।

है,

constructor TControlPanelItem.Create(AOwner: TComponent); 
begin 
    inherited; 
    FLinesText := TStringList.Create; 
    TStringList(FLinesText).OnChange := LinesChanged; 
end; 

procedure TControlPanelItem.LinesChanged(Sender: TObject); 
begin 
    // Repaint, update or whatever you need to do. 
end; 
+0

मैं पहले से ही है कि कर रहा हूँ है। प्रक्रिया tControlPanelItem.SetLinesText देखें जो SetText को कॉल करता है। (प्रक्रिया SetText पूर्ण नहीं है। मैं यह दिखाने के लिए शोमेसेज का उपयोग कर रहा हूं कि यह काम कर रहा है) –

+0

ठीक है, मैंने उसे नहीं देखा। (जैसा कि आप जानते हैं, कोड कुछ मिनट पहले सुंदर नहीं था!) ​​लेकिन मुझे कोई 'ऑन चेंज' नहीं दिखाई दे रहा है? –

+0

हाय। आपके त्वरित जवाब के लिए धन्यवाद। FlinesText एक स्ट्रिंगलिस्ट है और जहां तक ​​मुझे पता है एक विनिमय संपत्ति नहीं है? –

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