2012-06-11 10 views
8

यदि मैं एक वीसीएल घटक TXxx को प्रतिस्थापित करना चाहता हूं तो क्या मुझे अपना घटक TXxx या TCustomXxx पर रखना चाहिए?डेल्फी वीसीएल घटक विकसित करते समय किस बेस क्लास का उपयोग करना है?

मैं ड्रॉप-में विभिन्न पाठ संपादन घटकों (TEdit, TMemo, आदि) के प्रतिस्थापन के एक बैक-एंड कि यह क्या स्वीकार करेंगे के बारे में बहुत picky है करने के लिए आदानों को साफ़ करने में WM_PASTE संचालकों के लिए बनाने के लिए (मूल रूप से देख रहा हूँ केवल 7-बिट ASCII प्रिंट करने योग्य ग्लाइफ, रिक्त स्थान, और सीआर/एलएफ जोड़े ... यहां तक ​​कि टैब वर्ण भी स्वीकार्य नहीं हैं)। इन नए घटकों को एक मौजूदा अनुप्रयोग में जाना है, और मैं कुछ भी नहीं करना चाहता हूं जो मुझे बिल्कुल सही तरीके से काम करने के लिए नहीं करना है, गैर-डिफ़ॉल्ट पेस्ट व्यवहार को छोड़कर।

मैंने TMemo पर आधारित एक किया है और ऐसा लगता है, लेकिन किसी भी तरह या अन्य मुझे यह धारणा है कि अनुशंसित दृष्टिकोण TCustomMemo का उपयोग करना होगा। क्या मैं कुछ छोड़ रहा हूं?

उत्तर

16

सम्मेलन के अनुसार, टीएसओमिंग और टीसी कस्टमसोमिंग के बीच का अंतर यह है कि उत्तरार्द्ध में बहुत कम प्रकाशित गुण नहीं हैं ताकि आप स्वयं को प्रकाशित करने के लिए चुन सकें। अन्यथा कोई अंतर नहीं होना चाहिए।

+0

धन्यवाद, यही वह है जो मैं सुनने की उम्मीद कर रहा था। – wades

0

TObject -> TPersistent -> TComponent -> TControl -> TWinControl -> TCustomEdit -> TCustomMemo -> TMemo

enter image description here

TMemo सिर्फ एक TCustomMemo नियंत्रण के लिए 'आवरण' है। आप दोनों का उपयोग कर सकते हैं लेकिन मैं कस्टम संस्करण का उपयोग करना पसंद करता हूं क्योंकि आप एक गैर दृश्य घटक से प्राप्त होते हैं।

यदि आप भविष्य की परियोजनाओं में घटकों को प्रतिस्थापित करना चाहते हैं तो आप नियंत्रण के चारों ओर एक डाटामैड्यूल बना सकते हैं और डाटामोड्यूल के भीतर अपनी गुणों का प्रबंधन कर सकते हैं। आपको बदलने के बाद केवल डेटामैड्यूल को घटक को संभालने का तरीका बदलना होगा, न कि आपके प्रोजेक्ट में प्रत्येक घटक।

-1

एक अन्य विकल्प बस इस तरह संबंधित घटकों उपवर्ग के लिए होगा:

unit SubClassedControls; 

interface 

uses StdCtrls, Messages; 

type 

    TEdit = class(StdCtrls.TEdit) 
    private 
    procedure WMPaste(Message: TWMPaste); message WM_PASTE; 
    end; 

implementation 

{ TEdit } 

procedure TEdit.WMPaste(Message: TWMPaste); 
begin 
    // do whatever is necessary 
end; 

end. 

तो यह प्रपत्र का उपयोग करता है खंड में StdCtrls इकाई के पीछे इकाई SubClassedControls जोड़ने के लिए महत्वपूर्ण है। ऐसा करके, आप मौजूदा मानक नियंत्रणों का उपयोग करना जारी रख सकते हैं, लेकिन रनटाइम पर आपका एप्लिकेशन वास्तव में आपके उप-वर्गीकृत नियंत्रणों का उपयोग करेगा। यदि आपके पास बहुत सारे नियंत्रण वाले मौजूदा एप्लिकेशन हैं तो यह आपके नियंत्रण के व्यवहार को बदलने का एक आसान तरीका हो सकता है।

+0

-1 क्योंकि आपने सवाल नहीं पढ़ा है। आप सुझाव देते हैं कि मैं वास्तव में क्या कर रहा था, और उस हिस्से पर ध्यान नहीं दिया जिसे मैं समझ नहीं पाया। – wades

+0

@ वेड्स, क्षमा करें, मेरा जवाब सिर्फ जवाब में था "... और मैं ऐसा कुछ भी नहीं करना चाहता हूं जो मुझे बिल्कुल पुराने तरीके से काम करने के लिए बिल्कुल नहीं करना है, गैर- डिफ़ॉल्ट पेस्ट व्यवहार। "।और मुझे अभी भी लगता है कि मेरा समाधान हाथ में आपकी समस्या के लिए सबसे सरल है। बेशक आप टीसी कस्टमएडिट आदि से व्युत्पन्न अपने स्वयं के टीएमएडिट के साथ सैकड़ों नियंत्रणों का आदान-प्रदान कर सकते हैं, लेकिन यह कहीं अधिक बोझिल आईएमओ है। – iamjoosy

1

तरह से मैं हमेशा TSomething और TCustomSomething होने की अवधारणा को समझ लिया है जब आप, की अपनी विरासत बनाने चलो कहते हैं कि अपनी खुद की TMyBytton बुलाया TButton जाने है। मान लें कि आप एक संपत्ति को छिपाना चाहते हैं, जैसे कि Caption (मान लीजिए कि आप टेक्स्ट नहीं चाहते हैं)। TButton के साथ, आप इस संपत्ति को छुपा नहीं सकते हैं। लेकिन TCustomButton का उपयोग करके, आप ऑब्जेक्ट इंस्पेक्टर में जो भी गुण दिखाना चाहते हैं उसे प्रकाशित कर सकते हैं, और उन लोगों को बाहर कर सकते हैं जिन्हें आप देखना नहीं चाहते हैं। एक बार संपत्ति प्रकाशित हो जाने के बाद, इसे और विरासत में प्राप्त कक्षाओं में प्रकाशित नहीं किया जा सकता है।

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