2012-06-20 24 views
5

किसी फॉर्म पर TStaticText को डबल-क्लिक करने से क्लिपबोर्ड पर उस TStaticText को कैप्शन करने की प्रतिलिपि बनाते हैं। कोई डबल-क्लिक ईवेंट की आवश्यकता नहीं है।डेल्फी XE2 ऐप प्रतियां क्लिपबोर्ड पर कैप्शन

कदम पुन: पेश करने:

  • विन 64 और डेल्फी XE2 अद्यतन का उपयोग करना 4.
  • बनाएँ VCL फॉर्म्स अनुप्रयोग।
  • फॉर्म पर एक TEDIT रखें।
  • फॉर्म पर एक TStaticText रखें। कैप्शन को "TStaticText1Caption" में बदलें
  • फ़ॉर्म पर एक दूसरा TStaticText रखें। कैप्शन को "TStaticText2Caption" में बदलें
  • रन प्रोग्राम (F9)
  • TEDit में कुछ टेक्स्ट टाइप करें। इसे सभी का चयन करें और इसे CTRL + C के माध्यम से कॉपी करें।
  • TEDit में टेक्स्ट हटाएं। पाठ को सत्यापित करने के लिए इसे चिपकाएं जो आपने कॉपी किया है।
  • TEDit में टेक्स्ट हटाएं।
  • या तो TStaticText को डबल-क्लिक करें।
  • टेडिट में टेक्स्ट पेस्ट करें। ध्यान दें कि यह मूल प्रतिलिपि पाठ नहीं है लेकिन TStaticText का कैप्शन है।

मैंने पहले ही एम्बरकेडरो को एक बग रिपोर्ट सबमिट कर दी है।

मैंने TStaticTexts को डबल-क्लिक ईवेंट असाइन करने का प्रयास किया। यह अभी भी क्लिपबोर्ड पर कैप्शन की प्रतिलिपि बनाता है भले ही यह डबल-क्लिक ईवेंट निष्पादित करता है।

procedure TForm1.StaticText1DblClick(Sender: TObject); 
begin 
    Edit1.Text := 'Hello'; 
end; 

procedure TForm1.StaticText2DblClick(Sender: TObject); 
begin 
    Edit1.Text := 'World'; 
end; 

यह TLabel या किसी अन्य वीसीएल नियंत्रण के साथ नहीं होता है मैंने कोशिश की है।

हमारे पास दृश्य डिजाइन उद्देश्यों के लिए हमारे रूपों पर बहुत सारे TStaticTexts हैं और TLabels में बदलना एक विकल्प नहीं है।

किसी के पास यह होने से रोकने के तरीके पर कोई विचार है?

उत्तर

8

यह डेल्फी बग नहीं है, यह व्यवहार Windows Static Control के कारण होता है जो TStaticText VCL घटक द्वारा बनाया गया है।

Windows Vista में शुरू, स्टेटिक पाठ नियंत्रण स्वचालित रूप से क्लिपबोर्ड उनकी सामग्री की प्रतिलिपि जब आप उन्हें डबल क्लिक करें यदि आप SS_NOTIFY शैली (SS_NOTIFY शैली TCustomStaticText घटक के CreateParams विधि द्वारा निर्धारित है सेट)

सिफारिश व्याख्यान How do I make it so that users can copy static text on a dialog box to the clipboard easily?

के रूप में वैकल्पिक हल के तुम इतनी

तरह CreateParams विधि अधिभावी SS_NOTIFY शैली को हटा सकते हैं
type 
    TStaticText = class(Vcl.StdCtrls.TStaticText) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

    TForm1 = class(TForm) 
    StaticText1: TStaticText; 
    private 
    public 
    end; 

var 
    Form1: TForm42; 

implementation 

{$R *.dfm} 

{ TStaticText } 

procedure TStaticText.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    with Params do 
    Style := Style and not SS_NOTIFY; 
end; 

नोट: यदि आप बारे में पता होना चाहिए अगर आप नियंत्रण जब उपयोगकर्ता क्लिक करता है या नियंत्रण डबल क्लिक करता है आप कोई STN_CLICKED, STN_DBLCLK, STN_DISABLE, और STN_ENABLE अधिसूचना कोड प्राप्त होगा से इस शैली को हटा दें।

+0

आपके द्वारा लिंक किए गए आलेख के मुताबिक, एक विकल्प है: "यदि आप 'एसएस_एनओटीआईएफआई' स्थिर नियंत्रण पर * प्रतिलिपि बनाने के लिए * डबल-क्लिक को अक्षम करना चाहते हैं, तो आपको स्थिर नियंत्रण को उपclass करना होगा और क्लिक खाएं स्वयं।" –

+0

हां, यह भी एक वैध विकल्प है। – RRUZ

+0

मैं उत्तर की सराहना करता हूं। मुझे लगता है कि पुराने डेल्फी की तुलना में वीसीएल नियंत्रण नए डेल्फी के साथ कैसे बनाया जाता है इसका एक आंतरिक परिवर्तन है। हमने डेल्फी 6 से XE2 में परिवर्तित होने वाले बहुत से छोटे मुद्दों में भाग लिया है। हमें एक विकल्प खोजना होगा जहां इससे कोई समस्या होगी। –

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