2012-01-10 15 views
14

में पूर्ण TStringGrid सेल को पेंट नहीं करता है डेल्फी XE2 में पूर्ण TStringGrid सेल पेंट नहीं करता है। डिफ़ॉल्ट रंग में बाईं ओर 3 पिक्सल का अंतर होता है (BiDiModebdLeftToRight पर सेट किया गया है)। यह समस्या डेल्फी 6 में मौजूद नहीं है जिसका मैंने पहले उपयोग किया था।FillRect डेल्फी XE2

procedure TShapeline.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
    Rect: TRect; State: TGridDrawState); 
begin 
    Stringgrid1.Canvas.Brush.Color:=$00FF80FF; 
    StringGrid1.Canvas.FillRect(Rect); 
end; 

मैं (सहित) सभी गुण और अलग ब्रश शैलियों बदलने की कोशिश की, पेंट आयत पूरा सेल को नहीं भरता है। TStringGrid में

उत्तर

0

बारी पहले 4 विकल्प बंद:

  • goFixedVertLine
  • goFixedHorizLine
  • goVertLine
  • goHorizLine

तो यह ग्रिड लाइन पेंट नहीं होगा, और अपने ग्रिड कोशिकाएं किनारों पर सही पेंट करेंगे। बस एक्सई के साथ कोशिश की।

+2

यदि ओपी ग्रिडलाइन चाहता है तो क्या होगा? –

+0

फिर मेरा जवाब शायद मदद नहीं करेगा, लेकिन निश्चित लाइनों को बंद करने में मदद मिलती है। –

+0

@ ब्रूस, आपका फिक्स XE के लिए सही है लेकिन XE2 नहीं है। TStringGrid.DrawCell में शाब्दिक रूप से कोड है जो ARect.Left: = ARect.Left + 4 करता है यदि डिफ़ॉल्ट ड्रॉइंग सत्य है और स्टाइल सर्विसेज सक्षम हैं। –

18

यह XE2 में व्यवहार की उम्मीद है जब DefaultDrawing = true और विषयों सक्षम होते हैं (मैं यहाँ अच्छा है या बुरा के बारे में बहस करने नहीं जा रहा हूँ - के रूप में आप गौर किया होगा, व्यवहार RigthToLeft मोड के लिए अलग है ...)।

FillRect पर कॉल करने से पहले इस स्थिति की जांच करना और 0 पिक्सेल द्वारा Rect.Left को कम करना है।

+1

क्या यह पता लगाने का कोई तरीका नहीं है कि कितने पिक्सल कम हो जाएं? मुझे वास्तव में इन स्थितियों के लिए हार्ड कोडित मूल्य पसंद नहीं हैं। यह तोड़ देगा क्योंकि एक्सपी से विस्टा और नई सीमा मोटाई से बहुत सारे कोड तोड़ दिए गए हैं। –

+2

@ मारजन - यह वीसीएल स्रोत (TStringGrid.DrawCell) में एक हार्डकोडेड '4' है। यह एक शैली की संपत्ति नहीं है, स्थिर नहीं, .. बस '4'। –

+2

@SertacAkyuz: yikes! (और उत्तर के लिए धन्यवाद) –

3

आप StringGrid1.CellRect(ACol, ARow) का उपयोग कर सकते हैं जो पैरामीटर Rect पैरामीटर का उपयोग करने के बजाय सेल का वास्तविक ट्रैक्ट देता है।

+1

ओह, यह ऑनड्रासेल ईवेंट हैंडलर के भीतर एक भारी दिनचर्या है! – NGLN

0

चूंकि आप ग्रिड सेल स्वयं को चित्रित कर रहे हैं, तो बस ग्रिड प्रॉपर्टी डिफॉल्ट ड्रॉइंग को बंद करें, इसे गलत पर सेट करें।

+1

दिखाया गया कोड ग्रिड सेल नहीं खींचता है; यह ग्रिड सेल की * सामग्री * खींचता है। यदि आप डिफॉल्ट ड्रॉइंग बंद करते हैं, तो आपको टेक्स्ट और ग्रिड लाइनों को भी आउटपुट करना होगा, जो कि बहुत अधिक कोड है। [उवे के उत्तर] (http://stackoverflow.com/a/8807002/62576) में उल्लिखित थीम्ड ड्राइंग द्वारा जोड़े गए पैडिंग के लिए समायोजित करने के लिए केवल कुछ पिक्सेल द्वारा रेक्ट को समायोजित करना आसान है। –

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