delphi - गतिशील रूप से शीर्ष पर, अन्य संरेखित नियंत्रण के बाद गठबंधन वाले नियंत्रण कैसे बनाएं?




controls alignment (2)

इस विशेष मामले में मैं एक पीडीएफ दस्तावेज़ को गतिशील रूप से बनाने के लिए PowerPDF लाइब्रेरी का उपयोग कर रहा हूं, लेकिन वही मूल अभिविन्यास के लिए लागू होता है जो कि एक मूल नियंत्रण के अंदर क्रमिक रूप से संरेखित नियंत्रण को गति प्रदान करता है। इस पुस्तकालय में, TPRPage , सभी तत्व नियंत्रण को नियंत्रित करने के लिए आधार नियंत्रण है, इस मामले में, TPRLayoutPanel अनुक्रमिक उदाहरण

जब मैं गतिशील रूप से नियंत्रण जोड़ता हूं तो मैं क्या करता हूं:

  1. एक नियंत्रण बनाएं ( TPRLayoutPanel )
  2. नियंत्रण के अभिभावक सेट करें ( TPRPage )
  3. शीर्ष पर नियंत्रण संरेखित करें ( PRLayoutPanel.Align:= alTop; )

समस्या यह है कि पृष्ठ के बहुत अंत (नीचे) के बजाय बहुत शुरुआत (शीर्ष) के लिए मजबूर हो जाता है

मैंने अपने आदेश PRLayoutPanel.SendToBack; सेट करने की कोशिश की है PRLayoutPanel.SendToBack; या PRLayoutPanel.BringToFront लेकिन कोई भाग्य के साथ

मैं कैसे गतिशील रूप से एक नियंत्रक के भीतर कई नियंत्रणों को क्रमिक रूप से बना और संरेखित कर सकता हूं? मेरा केवल वर्तमान कार्य-नियंत्रण रिवर्स ऑर्डर (अंत से शुरुआत तक) में नियंत्रण जोड़ना है जो हास्यास्पद अनावश्यक है।

यहां मेरा सार्वभौमिक कार्य है जो इस माता-पिता में गठबंधन नियंत्रण के हर नए उदाहरण बनाता है:

function TfrmReport.InsertPanel: TPRLayoutPanel;
begin
  Result:= TPRLayoutPanel.Create(PRPage);
  Result.Parent:= PRPage;
  Result.Align:= alTop;
  Result.Height:= 40; //Default, may change later
end;

आप कस्टम संरेखित प्रकार का उपयोग कर सकते हैं और अपने सभी पैनल पदों को CustomAlignPosition विधि के माध्यम से नियंत्रित कर सकते हैं (आपको उसे मूल नियंत्रण में ओवरराइड करना होगा)। यह आपको अधिक लचीलापन और नियंत्रण देगा


आपको पिछली पैनल के नीचे होने के लिए Top संपत्ति सेट करना होगा। उदाहरण के लिए, इस तरह:

PanelTop := 0;
for i := 0 to 5 do
begin
  Panel[i] := TPanel.Create(Self);
  Panel[i].Parent := Self;
  Panel[i].Height := PanelHeight;
  Panel[i].Align := alTop;
  Panel[i].Top := PanelTop;
  inc(PanelTop, PanelHeight);
end;

इसे अपने कोड में फिट करने के लिए आपको हाल ही में जोड़े गए पैनल के स्थान का ट्रैक रखना होगा। शायद आप अपने InsertPanel फ़ंक्शन में एक var पैरामीटर जोड़ सकते हैं:

function TfrmReport.InsertPanel(var PanelTop: Integer): TPRLayoutPanel;
begin
  Result:= TPRLayoutPanel.Create(PRPage);
  Result.Parent:= PRPage;
  Result.Top:= PanelTop;
  Result.Height:= 40;
  Result.Align:= alTop;
  inc(PanelTop, Result.Height);
end;

मुझे विश्वास है कि आप विचार प्राप्त करें!







delphi-xe2