2011-04-27 19 views
6

मेरे पास मेरे मुख्य रूप पर कई टीपीनल हैं जो मैं उपयोगकर्ता द्वारा चुने गए विकल्पों के आधार पर दिखाता/छुपाता हूं। समस्या यह है कि डिजाइन समय पर मुझे लगातार उन्हें संपादित करने के लिए उन्हें स्थानांतरित करना होता है। क्या कोई आसान/बेहतर तरीका है कि दूसरों को इस स्थिति को संभाला जाए?आप डिज़ाइन-टाइम पर एकाधिक टीपीनल कैसे प्रबंधित करते हैं?

उत्तर

10

तो केवल एक ही पैनल दिख रहा है, तो आप चीजों को व्यवस्थित करने के लिए TPageControl का उपयोग करना चाह सकता है। डिज़ाइन समय पर कौन से काम करने के लिए चुनने के लिए टैब पर क्लिक कर सकते हैं, और उसके बाद रन टाइम पर टैब छुपाएं, या टैब को हर समय छुपाएं और the ActivePage property सेट करके पेज का चयन करें।

+1

+1 दूसरा यह। यह नियंत्रण व्यवस्थित करने के लिए एक बेहतर तरीका है। यदि आपको टैब शीर्षकों की आवश्यकता नहीं है, तो आप अपना खुद का निर्णायक बना सकते हैं, या पहले से विकसित कुछ का उपयोग कर सकते हैं और रनटाइम पर Tabheight = 0 सेट कर सकते हैं। – Simon

+0

मैं इस विधि का उपयोग करता हूं और यह अच्छी तरह से काम करता है। –

+0

इसका नकारात्मक पक्ष, यदि मैं सही ढंग से समझता हूं, तो यह है कि डिज़ाइन समय की तुलना में रनटाइम पर कंटेनर में और अधिक जगह होगी। तो यदि आपके पास एक निश्चित आकार लेआउट है तो यह अच्छी तरह से काम नहीं करेगा। या क्या मुझे छड़ी के गलत छोर को पकड़ लिया है? –

3

यदि पैनलों को ढेर किया जाता है, तो आप संदर्भ मेनू सेया Control->Send to Back चुनकर उन्हें फिर से क्लिक करके पुन: व्यवस्थित कर सकते हैं।

4

अपने इच्छित व्यक्ति को ढूंढने के लिए Structure Pane का उपयोग करें और फिर इसे सामने लाएं।

Structure pane http://edn.embarcadero.com/article/images/33289/8.png

(लेकिन इसके बाद के संस्करण Embarcadero के उदाहरण का अनुसरण नहीं करते हैं, तो आपके नियंत्रण अलग से बताने के लिए आसान होती अपने नियंत्रण सार्थक नाम देते हैं।) एक समय में

+1

+1; मुझे इस तरह से पूरी तरह से ओवरलैप्ड नियंत्रणों के साथ पसंद है। आप बस आइटम का चयन करें, दाएं क्लिक करें और नियंत्रण को सामने लाने के लिए ओ + एफ कुंजी दबाएं। –

1

मैंने भी एक TPageControl का उपयोग किया है, और मैंने टैब को डिज़ाइनटाइम पर दिखाई दिया है। इसने मुझे एक डिज़ाइनटाइम उपयोगिता दी (मुझे इच्छित टैब पर क्लिक करके)। फिर रनटाइम पर, मैं पृष्ठ टैब छुपाता हूं, और कोड का उपयोग करके पृष्ठ नियंत्रण पर सक्रिय पृष्ठों को स्विच करता हूं, जो कि कौन सा फलक दिखाई देता है स्विच करने के तरीके के रूप में। हालांकि, यह कुछ भयानक रूप से विशाल और जटिल रूपों का कारण बनता है, जो बदले में, कई समस्याओं का कारण था।

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

मेरे सबसे अच्छी तरह से संरचित अनुप्रयोगों में, प्रत्येक "फलक" (टीएफआरएम का उपयोग करके कार्यान्वित करना, हालांकि, टीएफआरएएम को लागू करना) अलग-अलग इकाइयों में अलग हो गया है, और यह आपके डिजाइन-टाइम नियंत्रण समस्याओं दोनों को हल करता है, और इसके परिणामस्वरूप एक और अच्छी तरह से परिणाम होता है संरचित समग्र समाधान।

जबकि मुझे लगता है कि संरचना फलक (किसी और ने इंगित किया है) आपके लिए एक बड़ी मदद है, जब आप इतने जटिल हैं कि नियमित डिजाइनर दृश्य उपकरण का उपयोग करने में कठिनाई हो रही है, यह भी अपने फॉर्म को तोड़ने पर विचार करने का एक अच्छा विचार, जब आप फॉर्म डिज़ाइनर का उपयोग करने के "कम रिटर्न" के इस बिंदु तक पहुंचते हैं, तो एक सुपर-सुपर जटिल फ़ॉर्म बनने पर।

2

मैं फ्रेम का चयन करें या पैनल वस्तु निरीक्षक कॉम्बो का उपयोग कर तो मुख्य मेनू पर क्लिक करें संपादित करें -> सामने लाने

(जो संरचना दृश्य खोलकर के समान है)

1

यह बहुत आसान है इस उद्देश्य के लिए फ्रेम का उपयोग करने के लिए। मैं आमतौर पर उन्हें रनटाइम पर बना देता हूं और उन्हें आवश्यक रूप में फॉर्म में जोड़ता हूं। यह कोड को और अधिक पठनीय बनाने में भी काम करता है क्योंकि आप ed_NameForPanel1, ed_NameForPanel3 इत्यादि के बजाय नामों के बिना अलग-अलग फ्रेमों पर समान घटक नामों (जैसे ed_Name या l_Welcome) का उपयोग कर सकते हैं

3

मुझे पता चला है कि एक चेतावनी पैनल 1 कर रहा है। दृश्यमान: = रनटाइम में झूठा यह है कि यह लेआउट के साथ गड़बड़ है।
समाधान मैंने पाया काम करता है क्या करना है:

//Design time 
//----------- 
Panel1.BevelOuter:= bvNone; //Make the panel look flat. 

//Run time when hiding the panel 
//------------------------------ 
procedure HidePanel(APanel: TPanel); 
var 
    H,W: integer; 
begin 
    case APanel.Align of 
    alTop, alBottom: begin 
     APanel.Tag:= Max(APanel.Tag, APanel.Height); 
     APanel.Height:= 1; 
    end; {alTop, alBottom:} 
    alLeft, alRight: begin 
     APanel.Tag:= Max(APanel.Tag, APanel.Width); 
     Panel1.Width:= 1; 
    end; {alLeft, alRight:} 
    alNone: begin 
     H:= Max(APanel.Tag and $FFFF, APanel.Height); 
     W:= Max((APanel.Tag shl 16) and $FFFF0000, APanel.Width shl 16); 
     APanel.Tag:= (H or W); 
     APanel.Height:= 1; 
     APanel.Width:= 1; 
    end; {alNone} 
    //alClient: do nothing 
    end; 
end; 

//Run time when restoring the panel 
//--------------------------------- 
procedure UnhidePanel(APanel: TPanel); 
var 
    H,W: integer; 
begin 
    case APanel.Align of 
    alTop, alBottom: begin 
     APanel.Height:= APanel.Tag; 
     APanel.Tag:= 0; 
    end; {alTop, alBottom:} 
    alLeft, alRight: begin 
     APanel.Width:= APanel.Tag; 
     APanel.Tag:= 0; 
    end; {alLeft, alRight:} 
    alNone: begin 
     H:= APanel.Tag and $FFFF; 
     W:= APanel.Tag shr 16; 
     APanel.Height:= H; 
     APanel.Width:= W; 
     APanel.Tag:= 0; 
    end; {alNone} 
    //alClient: do nothing 
    end; {case} 
end; 

सीधे शब्दों में छुपा पैनलों गंदगी सावधान संरेखण आप Designtime
में निर्माण किया है (खासकर जब splitters का उपयोग।) कर सकते हैं।
यह कोड होने से रोकता है।
यह वास्तव में केवल दृश्यमान रूप से काम करता है जब पैनल में कोई बेवल सेट नहीं होता है और पैनल रंग उस नियंत्रण के रंग के बराबर होता है जो इसके शीर्ष पर है।