2011-12-16 9 views
5

एक TEdit आप निम्न कार्य करने होंगे बनाने के लिए डेल्फी 2010कैसे गतिशील रूप से इस तरह के TLabel या TEdit के रूप में डेल्फी में एक घटक बनाने के लिए ... आदि

SQLQuery1.First; // move to the first record 
while(not SQLQuery1.EOF)do begin 
    // do something with the current record 
    // What's the code should i write in this part in order to create a TEdit 
    // containing the user fullname the current item. 
    ShowMessage(SQLQuery1['whom']); 
    SQLQuery1.Next; // move to the next record 
end; 
+0

आप प्रत्येक रिकॉर्ड द्वारा एक घटक क्यों बनाना चाहते हैं? क्या आप इसके बजाय एक dbgrid का उपयोग करने की कोशिश कर रहे हैं? – RRUZ

+0

क्या आप प्रत्येक रिकॉर्ड के लिए एक संपादन नियंत्रण चाहते हैं? क्या ये एक ग्रिड या अन्य जगहों के अंदर जा रहे हैं? यदि डीबीजीड का उपयोग करते हैं, तो ऐसा करने की कोई ज़रूरत नहीं है, यह पहले ही संपादन का समर्थन करता है। यदि आपको अन्य कारणों से इसकी आवश्यकता है, तो आपको किसी भी तरह से इन नियंत्रणों की सूची को किसी भी तरह बनाए रखने की आवश्यकता होगी ताकि आप इसे पूरा करने पर ठीक से मुक्त कर सकें। यह अत्यधिक निर्भर करता है कि आप इन नियंत्रणों को कहां रखना चाहते हैं और आप इन नियंत्रणों को कब तक दिखाना चाहते हैं। मैं व्यक्तिगत रूप से सोचता हूं (यदि डीबीजीड का उपयोग नहीं कर रहा है) तो आप इसके बजाय एक स्ट्रिंग ग्रिड का उपयोग करना चाह सकते हैं (प्रत्येक रिकॉर्ड के लिए एक संपादन क्षेत्र दिखाता है)। –

+0

पीएस - 'शोमेसेज (SQLQuery1 [' जिसे ']);' दिखाने के लिए सुरक्षित है 'ShowMessage (SQLQuery1.FieldByName (' जिसे ')। AsString); ' –

उत्तर

5

खैर का उपयोग करना,:

एक चर बनाएं काम साथ में करने केलिए। या तो एक स्थानीय चर या वर्ग सदस्य।

Edit: TEdit; 

फिर आप इसे बनाते हैं।

Edit := TEdit.Create(Self); 

निर्माता के लिए पैरामीटर मालिक है। यह सुनिश्चित करता है कि जब उसका मालिक नष्ट हो जाता है तो नियंत्रण नष्ट हो जाता है। मेरी धारणा है कि Self एक रूप है।

अब आपको नियंत्रण माता-पिता को देने की आवश्यकता है।

Edit.Parent := Self; 

या शायद यह एक पैनल पर है।

Edit.Parent := StatusPanel; 

अंत में, आप टेक्स्ट सेट करते हैं।

Edit.Text := SQLQuery1['whom']); 
एक लेबल के साथ

यह सब सिवाय इसके कि आप के बजाय Caption संपत्ति Text संपत्ति का उपयोग बहुत समान है।

और आप निश्चित रूप से अन्य गुण सेट करना चाहते हैं लेकिन मुझे लगता है कि आप पहले ही जानते हैं कि यह कैसे करें।

+0

यह पता लगाने का सबसे अच्छा तरीका है कि गतिशील रूप से घटक बनाने के दौरान कौन से गुण सेट करना महत्वपूर्ण है, एक फॉर्म पर एक स्थान रखना है, इसे टेक्स्ट के रूप में देखने के लिए स्विच करें, और देखें कि कौन से गुण स्ट्रीम किए गए हैं। जब आप इसे गतिशील रूप से बनाते हैं तो आपको उन पर विचार करना चाहिए। (आखिरकार, स्ट्रीम किए गए घटकों को गतिशील रूप से बनाया गया है :)) –

3
Var 
    AnEdit : TEdit; 
Begin 
    AnEdit := TEdit.Create(self); 
    AnEdit.Parent := self; // or some suitable container compoent e.g GroupBox, Panel 
    AnEdit.Top := ?; 
    AnEdit.Left := ? 
    // any other properties you weant to set. 
End; 

जो लोग लोगों को पकड़ता है वह माता-पिता को स्थापित करता है।

3

आप उन पर घटकों को भी डिज़ाइन कर सकते हैं, GExperts Components to Code expert का उपयोग उन पर करें और फिर फॉर्म डिज़ाइनर से उन्हें हटा दें। एक लेबल/संपादन जोड़ी के लिए यह (, TabOrder लाइनों को हटाने SetBounds द्वारा की जगह वाम/शीर्ष/... सामान

var 
    Edit1: TEdit; 
    Label1: TLabel; 

    Edit1 := TEdit.Create(Self); 
    Label1 := TLabel.Create(Self); 

    Edit1.Name := 'Edit1'; 
    Edit1.Parent := Self; 
    Edit1.Left := 344; 
    Edit1.Top := 172; 
    Edit1.Width := 121; 
    Edit1.Height := 21; 
    Edit1.TabOrder := 0; 
    Edit1.Text := 'Edit1'; 
    Label1.Name := 'Label1'; 
    Label1.Parent := Self; 
    Label1.Left := 296; 
    Label1.Top := 176; 
    Label1.Width := 65; 
    Label1.Height := 17; 
    Label1.Caption := 'Label1'; 
    Label1.FocusControl := Edit1; 

बार यह कुछ दोबारा काम की जरूरत के अधिकांश की तरह कुछ देता है, संरेखित या अपने खुद के तर्क, ...) और कुछ गुणों/घटकों के लिए यह बिल्कुल काम नहीं करता है। लेकिन आप इस तरह से बहुत समय बचा सकते हैं।

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