We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. Image for the cookie policy date
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

Painting my own text

Thread ID:





23423 Jan 12,2005 01:51 PM UTC Jan 21,2005 11:28 AM UTC WinForms 12
Tags: GridControl
Asked On January 12, 2005 01:51 PM UTC

Please see the attached Sample. I am overriding the onPaint event and drawing my own text in cell A1 that overflows into neighboring cells. When I scroll to the right (say column 10) and start to scroll back to the 1st column the text does not paint until I scroll back to column 1. My code that determines the cells to paint in the OnPaint event appears to be using incorrect calls to the SF system to determine which cells to paint and/or my call to get the rectangle might be incorrect as well. Another issue I''ve run into is when the 1st column is not visible and I do a full re-paint (tab to another app and back) then the text from the 1st column shows up in the 2nd column starting at the beginning of the text instead of clipping. Please Advise. Thanks, Steve

Replied On January 13, 2005 11:02 AM UTC

I''ve also noticed that the same occurs when I attempt to fill in my own background color in cells during the onPaint event. Steve

Administrator [Syncfusion]
Replied On January 13, 2005 01:59 PM UTC

I am not sure you will be able to get this to work without writing a lot of code. Your code gets its text from a visible cell. In your sample, column 1 is the only cell that has text set in it. So, when col 1 is not visible, style.Text is always empty. This would explain the text not showing as you scroll back to col 1. Is there some reason you are not just using our floating cells support, or banneredranges or coveredranges to display information over several cells.

Replied On January 13, 2005 07:17 PM UTC

I am doing my own drawing for a number of reasons, but the major reason(s) is to use GDI, cell indentions and my own images in a cell. I could probably use the CellDraw event, but I have issues adjusting the overflow when I manually indent text for a image. Please see the attached example. When I simply draw text in a cell the overflow is fine, but when I manually adjust the rectangle to make room for the bitmap my overflow is incorrect. Is there some way I can adjust the overflow in querycell or some other event? Run the example and press the button and you will notice the overflow issue. Thanks, Steve SFOverFlow_818.zip

Administrator [Syncfusion]
Replied On January 13, 2005 08:25 PM UTC

Try shrinking the rect'' width by the amount you indent the text. if (blnDrawImage && e.ColIndex == 1) { int offSet = rect.X; rect.X +=20; e.Graphics.DrawImage(this.imageList1.Images[0],rect.X,rect.Y); rect.X += this.imageList1.Images[0].Width + 1; offSet = rect.X - offSet; rect.Width -= offSet; }

Administrator [Syncfusion]
Replied On January 14, 2005 01:18 PM UTC

As I suspected, shrinking the rectangle does fix the immediate issue, but if you scroll to the far right and then scroll back you will notice that the overflow is not correct and that the beginning of the text is actually shown twice. I attempted to attach a zip file, but the browser interface did not update the incident with the file location so I have sent you the file. Although it''s not an option I played with the DisableScrollWindow flag and it didn''t make a difference either. Thanks, Steve

Administrator [Syncfusion]
Replied On January 14, 2005 01:23 PM UTC

Sent email to support with bitmap. Thanks, Steve

Administrator [Syncfusion]
Replied On January 14, 2005 03:38 PM UTC

I think you will want to set DisableScrollWindow = true. Also, I think you need to get the floated rectangle, and not the cell rectangle. //old code //rect = this.gridControl1.RangeInfoToRectangle(GridRangeInfo.Cell(e.RowIndex,e.ColIndex),GridRangeOptions.MergeFloatedCells | GridRangeOptions.MergeCoveredCells); //new code rect = this.gridControl1.RangeInfoToRectangle(this.gridControl1.FloatingCells.FindRange(e.RowIndex, e.ColIndex));

Replied On January 14, 2005 05:44 PM UTC

I did just as you suggested but the text in cell C1 is no longer appearing. The text in A1 does appear to be correct. If a cell does not float, then the FloatingCells.FindRange returns nothing. Is there not a quick call to get the rectangle that regardless if it''s floating, merged or not. I also tried DisableScrollWindow, but it did not make a difference and as I stated earlier it''s not an option for us to turn this off as the performance issue is not acceptable. Thanks, Steve

Administrator [Syncfusion]
Replied On January 14, 2005 09:59 PM UTC

If rect comes back empty from that call, you can get the cell rect at that point.
rect = this.gridControl1.RangeInfoToRectangle(this.gridControl1.FloatingCells.FindRange(e.RowIndex, e.ColIndex));
	rect = this.gridControl1.RangeInfoToRectangle(GridRangeInfo.Cell(e.RowIndex,e.ColIndex),GridRangeOptions.MergeFloatedCells | GridRangeOptions.MergeCoveredCells);

Replied On January 17, 2005 11:22 AM UTC

Thanks Clay. Going back to the issue of overflowing into neighboring cells, I have implemented your suggestion in the attached example in which I am "shrinking" the rectangle by the amount of indent. The issue is that when you adjust this rectangle and there is nothing to the right then the overflow should occur, but is not as the rectangle is adjusted. Run the exe in the attached example, and you will notice that the last word does not paint unless you remove the image indent by pressing the "place image in cell button." What I need is some way to adjust the rectangle so Syncfusion knows to further overflow the text. Thanks for your help in these issues. Steve SFOverFlow2_9928.zip

Replied On January 21, 2005 11:06 AM UTC

Any update to this last issue?

Administrator [Syncfusion]
Replied On January 21, 2005 11:28 AM UTC

Instead of just immediately adding the offset to the rectangle, you will have to increment the rectangle''s width a column width at the time, until either you hit an occupied column (and hence floating is not allowed), or you have increased the rectangle width by the desired offset. I think you can use rng.Right (or probably rng.Right+1) to get the first column you need to check to see if it is occupied.


This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Please sign in to access our forum

This page will automatically be redirected to the sign-in page in 10 seconds.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon