2010-09-14 10 views
9

मैं एक CSV फ़ाइल @ रनटाइम से एक स्ट्रिंग ग्रिड में एकाधिक पंक्तियां जोड़ रहा हूं, हालांकि स्ट्रिंगग्रिड को अपरिवर्तित होने पर बहुत अधिक झटके लगते हैं, मुझे लगता है कि इसे रोकने के लिए स्टार्टअपडेट/एंडुपडेट कमांड होगा। हालांकि मुझे यह नहीं मिल रहा है। ग्रिड आईडी अपडेट होने पर झिलमिलाहट रोकने का कोई और तरीका है।डेल्फी टीस्ट्रिंगग्रिड फ़्लिकर

कॉलिन

उत्तर

1
ये `TStrings` वस्तु के तरीके हैं। स्ट्रिंगग्रिड 1। पंक्तियां [i]/Cols [i] .BeginUpdate; ... स्ट्रिंगग्रिड 1। पंक्तियां [i]/Cols [i]। एंड अपडेट करें;

अद्यतन

आप DoubleBuffered := true स्थापित करने के लिए कोशिश की है?

+0

जो मैंने सोचा था, हालांकि मैं डेल्फी 7 का उपयोग कर रहा हूं और ऐसा प्रतीत नहीं होता है। – colin

+0

हालांकि स्क्रॉल बार अभी भी – colin

+2

पर फ्लिकर करने में मदद करता है, अब मैं कोड को देखता हूं, यह मेरे लिए स्पष्ट है कि 'TStringGrid' ग्रह पर सबसे अच्छा नियंत्रण नहीं है। एक चीज जो मुझे वास्तव में इस नियंत्रण से पसंद नहीं है, यह है कि यह थीमाधारित नहीं है - यह एक थीमाधारित अनुप्रयोग में अजीब लग रहा है। क्या आप वाकई 'TListView' के साथ नहीं कर सकते हैं? –

-2

नियंत्रण के रीफ्रेश को रोकने के लिए आप Windows function LockWindowUpdate (AHandle) का उपयोग कर सकते हैं और फिर इसे पुनर्स्थापित करने के लिए LockWindowUpdate (0) का उपयोग कर सकते हैं।

जैसे हैंडल ग्रिड को पास करता है। हैंडल।

+5

[लॉकविंडो अपडेट का क्या उपयोग किया जाना चाहिए?] (Http://blogs.msdn.com/b/oldnewthing/archive/2007/02/21/1735472.aspx) [लॉकविंडो अपडेट का क्या मतलब नहीं है इस्तेमाल किया?] (http://blogs.msdn.com/b/oldnewthing/archive/2007/02/22/1742084.aspx) ['wm_SetRedraw'] का उपयोग करें (http://msdn.microsoft.com/en-us /library/dd145219.aspx) इसके बजाए। –

+0

ठीक है, तो आपको इसे उत्तर के रूप में रखना चाहिए टिप्पणी नहीं –

+1

मुझे लगता है कि रॉब आपको समझा रहा था कि आपका जवाब गलत क्यों था और डाउनवॉट किया गया था, और इस प्रकार उनकी टिप्पणी सही ढंग से एक टिप्पणी थी (आपके लिए)। –

2

हाँ, वहाँ TStringgrid में कोई BeginUpdate/EndUpdate है, लेकिन प्रति पंक्ति या प्रति col है:

StringGrid1.Rows[0].BeginUpdate;
StringGrid1.Cols[0].BeginUpdate;

+0

क्या यह काम करता है? खासकर यदि गर्ड का उपयोग कर फिर से भरे हुए हैं। कैल्स? –

14

बेहतर कभी नहीं से देर हो गई ... मैं WM_SETREDRAW का उपयोग करें। उदाहरण के लिए:

... 
StringGrid1.Perform(WM_SETREDRAW, 0, 0); 
try 
    // StringGrid1 is populated with the data here 
finally 
    StringGrid1.Perform(WM_SETREDRAW, 1, 0); 
    StringGrid1.Invalidate; // important! to force repaint after all 
end; 
... 
संबंधित मुद्दे