It's funny but no the demo did not cover this.

So, I use $dc->GetTextExtents($string) to get the size of the string, then compare it with $rect to see if it is going to overflow, then if it will what do I do? Just start chopping off one char in a loop and checking to see if it fits?

Thanks for the reply.
Doug Breshears

Mark Dootson wrote:
Hi,
I know very little about wxGrid, but have used wxDC and related objects a fair bit.

Therefore something jumps out from the code.

Using $grid->SetCellOverflow( $row, $col,0) should be used outside your subroutine to set the extents of the $rect passed in and it is your job in a custom renderer to draw the text within the bounds described by $rect.

use

$dc->GetTextExtents

to decide how to draw your text and how much of it to output.


As I say, I'm not familiar with wxGrid, so maybe it has some special properties, but if using a custom renderer in wxGrid is like any other custom rendering, I think all the work is down to you.

Is there not an example in Wx::Demo that does something exactly like this?

Cheers

Mark






Doug Breshears wrote:
Hi everybody,

I have a grid with a custom cell combo editor/renderer.
The Editor works fine, the renderer however is allowing the text to overflow the cell boundaries even when the SetCellOverflow is set to False.
   $grid->SetCellOverflow( $row, $col,0);
The other cells w/o custom renderer's work fine and properly cut the text off when it is to big for the cell.

Below is the "Draw" method for my custom renderer. It is pretty much a copy of the examples with extra combo box functionality thrown in. If anyone has a clue as to what is going on I would appreciate some assistance. (I have also set SetDefaultCellOverflow(FALSE) in the creation of the grid.)

sub Draw {
debug "Renderer:Draw\n";
my( $self, $grid, $attr, $dc, $rect, $row, $col, $sel ) = ( shift, @_ );
 $self->SUPER::Draw( @_ );
 $dc->SetPen( wxBLACK_PEN );
 $dc->SetBrush( wxWHITE_BRUSH );
 $dc->SetFont(Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT ));
 my $dbvalue = $grid->GetCellValue( $row, $col );
 $grid->SetCellOverflow( $row, $col,0);
 debug "Got Value of :$dbvalue:\n";
 my $textvalue = $self->get_text_from_id($dbvalue);
 debug "New Text is :$textvalue:\n";
 $dc->DrawText( $textvalue, $rect->x, $rect->y );
}




__________ NOD32 3055 (20080425) Information __________

This message was checked by NOD32 antivirus system.
http://www.eset.com




Reply via email to