2015-11-20 14 views
6

मेरे पास एक समग्र घटक है जिसमें TEdit और TButton (हाँ, मुझे TButtonedEdit पता है) जो TCustomControl से प्राप्त होता है। संपादन और बटन इसके कन्स्ट्रक्टर में बनाए जाते हैं और स्वयं पर रखे जाते हैं।समग्र घटक का चयन बॉक्स ठीक से नहीं खींचा गया

डिज़ाइनटाइम पर चयन बॉक्स ठीक से नहीं खींचा जाता है - मेरा अनुमान है कि संपादन और बटन इसे छुपा रहे हैं क्योंकि इसे कस्टम नियंत्रण के लिए खींचा गया है और फिर उनके द्वारा ओवरड्राउन किया गया है।

यहाँ तुलना:

enter image description here

मैं भी अन्य 3 पार्टी घटकों के लिए यह देखा है

प्रश्न (TcxGrid की तरह भी केवल चयन सूचक का बाहरी हिस्सा ड्रॉ): कैसे कर सकते हैं मैं इसे बदलता हूँ?

प्रजनन के लिए सबसे सरल मामला:

unit SearchEdit; 

interface 

uses 
    Classes, Controls, StdCtrls; 

type 
    TSearchEdit = class(TCustomControl) 
    private 
    fEdit: TEdit; 
    public 
    constructor Create(AOwner: TComponent); override; 
    end; 

procedure Register; 

implementation 

procedure Register; 
begin 
    RegisterComponents('Custom', [TSearchEdit]); 
end; 

{ TSearchEdit } 

constructor TSearchEdit.Create(AOwner: TComponent); 
begin 
    inherited; 
    fEdit := TEdit.Create(Self); 
    fEdit.Parent := Self; 
    fEdit.Align := alClient; 
end; 

end. 
+0

कौन सा डेल्फी के संस्करण, के मामले में यह –

+0

मायने रखती है लेकिन मुझे नहीं लगता कि आप किसी भी भाग्य के लिए जा रहे हैं। मुझे लगता है कि चयन संकेतक नियंत्रण विंडो प्रक्रियाओं को जोड़ने वाले आईडीई द्वारा कार्यान्वित किए जाते हैं। और आपका नियंत्रण अपने बच्चों के सामने चित्रित किया गया है। –

+0

शायद मेरे सिर के ऊपर से सबसे आसान, डिजाइन समय के लिए अपनी खुद की पेंटिंग सेट करना है। – Graymatter

उत्तर

3

जैसा कि मैंने टिप्पणी में कहा, सबसे आसान काम मैं के बारे में सोच सकते हैं नियंत्रण डिजाइन समय में डिजाइनर से "छिपाएँ" माता-पिता में पेंट करने के लिए और उन्हें है । आप प्रत्येक बच्चे नियंत्रण पर SetDesignVisible(False) पर कॉल करके ऐसा कर सकते हैं। फिर आप माता-पिता पर पेंटिंग करने के लिए PaintTo का उपयोग करें।

अपने उदाहरण का उपयोग हम पाते हैं:

type 
    TSearchEdit = class(TCustomControl) 
    ... 
    protected 
    procedure Paint; override; 
    ... 
    end; 

constructor TSearchEdit.Create(AOwner: TComponent); 
begin 
    inherited; 
    fEdit := TEdit.Create(Self); 
    fEdit.Parent := Self; 
    fEdit.Align := alClient; 
    fEdit.SetDesignVisible(False); 
end; 

procedure TSearchEdit.Paint; 
begin 
    Inherited; 
    if (csDesigning in ComponentState) then 
    fEdit.PaintTo(Self.Canvas, FEdit.Left, FEdit.Top); 
end; 
संबंधित मुद्दे