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.
Unfortunately, activation email could not send to your email. Please try again.

Painting my own text

Thread ID:

Created:

Updated:

Platform:

Replies:

23423 Jan 12,2005 08:51 AM Jan 21,2005 06:28 AM Windows Forms 12
loading
Tags: GridControl
Steve
Asked On January 12, 2005 08:51 AM

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

Steve
Replied On January 13, 2005 06:02 AM

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 08:59 AM

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.

Steve
Replied On January 13, 2005 02:17 PM

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 03:25 PM

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 08:18 AM

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 08:23 AM

Sent email to support with bitmap. Thanks, Steve

Administrator [Syncfusion]
Replied On January 14, 2005 10:38 AM

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));

Steve
Replied On January 14, 2005 12:44 PM

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 04:59 PM

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));
if(rect.IsEmpty)
	rect = this.gridControl1.RangeInfoToRectangle(GridRangeInfo.Cell(e.RowIndex,e.ColIndex),GridRangeOptions.MergeFloatedCells | GridRangeOptions.MergeCoveredCells);

Steve
Replied On January 17, 2005 06:22 AM

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

Steve
Replied On January 21, 2005 06:06 AM

Any update to this last issue?

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

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.

CONFIRMATION

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.

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.

;