2013-02-10 20 views
6

मैंने देखा कि resize flicker बहुत बेहतर हो जाता है जब मैं TPanel.FullRepaintFalse पर सेट करता हूं। चूंकि संपत्ति मौजूद है और डिफ़ॉल्ट रूप से True है, इसके लिए कुछ कारण होना चाहिए।टीपीनल फुलरपेंट का उपयोग कब करें?

यह तय कैसे करें कि इसे सेट किया जाना चाहिए या नहीं?

मदद सिर्फ राज्यों:

FullRepaint नियंत्रण कैसे पैनल से प्रतिक्रिया करता है जब यह आकार दिया जाता है। जब फुल रीपेंट सत्य होता है, तो आकार बदलते समय बेवल वाली सीमा समेत संपूर्ण पैनल। जब FullRepaint झूठा है, केवल बेवल सीमा सीमा के अंदर का क्षेत्र।

http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ExtCtrls.TPanel.FullRepaint

कि पाठ का कहना है कि वह क्या करता है, लेकिन क्यों नहीं ...

+2

इस तरह आकार झिलमिलाहट के साथ डील: http://stackoverflow.com/questions/8058745/tlabel-and-tgroupbox-captions-flicker- –

उत्तर

4

अनुपलब्ध फुलरेपेंट का प्रभाव दिखाया जा सकता है और आपको यह तय करना होगा कि आपको इसकी आवश्यकता है या नहीं।

  1. प्लेस एक फार्म पर एक पैनल, गलत पर सभी दिशाओं
  2. सेट PaintCaption को एंकर सेट या फार्म पर एक खाली शीर्षक
  3. स्थान में कोई अन्य कक्ष का उपयोग, ताकि आप रूप आकार बदलने कर रहे हैं, पहले पैनल के कुछ हिस्सों को दूसरे पैनल द्वारा कवर किया जाएगा।

प्रोग्राम चलाएं और फॉर्म आकार दें, कभी-कभी पहले पैनल की सीमाओं को रीफ्रेश नहीं किया जाएगा।
ऐसा इसलिए होता है क्योंकि WMWindowPos में (FullRepaint या (ShowCaption और (कैप्शन <> '') के मामले में चेंज किया गया है)) अमान्य को बुलाया जाएगा, अन्यथा केवल एक संदर्भ के अमान्येट्रैक (हैंडल, रेक्ट, ट्रू) केवल सही और/या नीचे सीमा अवैध हैं। (सुधार के लिए Sertac Akyuz के लिए धन्यवाद)

जैसा कि आपने अमान्य से बचने का उल्लेख किया है, फ्लिकर को कम करता है और कई मामलों में पूर्ण अमान्यता की आवश्यकता नहीं दी जाती है, इसलिए उपयोगकर्ता आगे बढ़ने का निर्णय ले सकता है। Fullrepaint बिना ऊपरी

पैनलों के रूप में शायद ही कभी इस्तेमाल किया जाएगा,

+2

* पर आकार बदलना * "... अन्यथा सीमाओं को छोड़कर एक आयत के केवल अमान्यateक्ट (हैंडल, रेक्ट, ट्रू)।" * यह गलत है और आपकी व्याख्या कोड के साथ मेल नहीं खाती है। इसके विपरीत, जब फुल रेपेंट झूठा है (और कोई कैप्शन नहीं है) केवल * रेक्ट * और/या * नीचे * सीमा वाला एक रेक्ट अमान्य है - सीमाओं को छोड़कर एक रेक्ट नहीं। –

+1

@SertacAkyuz आप सही हैं, मैंने एक संपादन – bummi

+1

किया है तो 'FullRepaint: = True' केवल तभी जरूरी है जब पैनल किसी अन्य नियंत्रण से ओवरलैप हो जाए? –

0

Windows के पिछले संस्करणों में (यकीन नहीं अप करने के लिए कौन-सा संस्करण है, बिल्कुल) FullRepaint चित्रमय artefacting को रोकने के लिए आवश्यक था जब पैनल का आकार बदलता था तो पैनल सीमाओं पर। मेरे सर्वोत्तम ज्ञान के लिए, कम से कम Windows XP के बाद से यह कोई समस्या नहीं है।