2011-07-08 10 views
7

मैंने एक टीएसक्रॉलबॉक्स बनाया है। मैंने बटन क्लिक पर गतिशील रूप से लेबल और एडिट बॉक्स जोड़ा है। घटक के स्थान को सेट करने के लिए मैंने ऊंचाई, चौड़ाई, बाएं, घटकों की शीर्ष संपत्ति का उपयोग किया है। लेकिन जब 5 घटकों के बाद स्क्रीन पर स्क्रॉल बार दिखाई देता है, तो अगले घटक स्थान परेशान हो जाते हैं। और अगला घटक स्क्रॉलबॉक्स पर तुल्यकालिक तरीके से नहीं रखा गया है।बटन क्लिक पर गतिशील रूप से एक से नीचे TScrollBox में घटक कैसे जोड़ें?

+0

वहाँ 'ScrollTop' या' ScrollWhatever' की तरह, scrollbox से कुछ संपत्ति होना चाहिए। आप इसे घटक की नई स्थिति से घटा सकते हैं। –

+0

मैं स्क्रॉलटॉप जैसी कोई संपत्ति नहीं ढूंढ पा रहा हूं .. :( – naren

उत्तर

10

स्क्रॉलबॉक्स पर रखे गए नियंत्रणों के लिए Top समन्वय को पहले से ही "स्क्रॉल" की मात्रा को ध्यान में रखना होगा। यदि आप एक बार में सभी नियंत्रण जोड़ते हैं तो यह कोई समस्या नहीं है, क्योंकि स्क्रॉलबॉक्स को "स्क्रॉल" करने का मौका नहीं मिलता है।

यदि आप के बाद स्क्रॉलबॉक्स पर नियंत्रण जोड़ते हैं तो इसे "स्क्रॉल" करने का मौका मिला है, आपको उस लंबवत "स्क्रॉल" की मात्रा को ध्यान में रखना होगा। यहां कोड का एक नमूना टुकड़ा है जो ScrollBox1 पर लेबल्स जोड़ देगा, खाते में लंबवत स्क्रॉल लेगा ताकि नियंत्रण एक-दूसरे को ओवरलैप न करें। यहां मैं अगले नियंत्रण के लिए Top को पकड़ने के लिए फॉर्म की "टैग" संपत्ति का उपयोग कर रहा हूं, और लेबल के लिए अद्वितीय नाम उत्पन्न करने के लिए मैं Tag का भी उपयोग कर रहा हूं (ताकि आप देख सकें कि वे सही पर स्क्रॉलबॉक्स में जा रहे हैं निर्देशांक)।

var LastControl: TControl; 

procedure TForm31.Button1Click(Sender: TObject); 
var L: TLabel; 
begin 
    L := TLabel.Create(Self); 
    L.Caption := 'Test: ' + IntToStr(Tag); 
    L.Parent := ScrollBox1; 
    if Assigned(LastControl) then 
    L.Top := LastControl.Top + LastControl.Height 
    else 
    L.Top := 0; 
    Tag := Tag + L.Height; 

    LastControl := L; 
end; 

और फिर भी एक अन्य:

procedure TForm31.Button1Click(Sender: TObject); 
var L: TLabel; 
begin 
    L := TLabel.Create(Self); 
    L.Caption := 'Test: ' + IntToStr(Tag); 
    L.Parent := ScrollBox1; 
    L.Top := Tag + ScrollBox1.VertScrollBar.Size - ScrollBox1.VertScrollBar.Position; 
    Tag := Tag + L.Height; 
end; 

एक अन्य दृष्टिकोण मैं कभी कभी उपयोग किए गए अंतिम नियंत्रण का ट्रैक रखने के है कि पिछले जोड़ा नियंत्रण के निर्देशांक पर नए नियंत्रण के लिए जोड़ा गया है और आधार निर्देशांक है दृष्टिकोण यह निर्देशांक के आधार पर सबसे कम नियंत्रण पा सकते हैं और अपने नियंत्रण को जोड़ने के लिए होगा:

procedure TForm31.Button1Click(Sender: TObject); 
var L: TLabel; 
    Bottom, TestBottom: Integer; 
    i: Integer; 
begin 
    // Find "Bottom" 
    Bottom := 0; 
    for i:=0 to ScrollBox1.ControlCount-1 do 
    with ScrollBox1.Controls[i] do 
    begin 
     TestBottom := Top + Height; 
     if TestBottom > Bottom then 
     Bottom := TestBottom; 
    end; 
    L := TLabel.Create(Self); 
    L.Caption := 'Test: ' + IntToStr(Tag); 
    L.Parent := ScrollBox1; 
    L.Top := Bottom; 
    Tag := Tag + L.Height; 
end; 
+0

बहुत बहुत धन्यवाद .. यह काम हो गया .. :) – naren

+0

धन्यवाद मुझे कुछ इसी तरह से मदद मिली। –

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