Page 2 of 2
Posted: Thu Jul 29, 2010 9:16 am
by borr_1
Ты уже код показать не хочешь?
Code: Select all
dc.DrawRectangle(rect.GetX()-1, rect.GetY()-1, rect.GetWidth()+2, rect.GetHeight()+2);
У тебя должно идти первой строчкой.
Posted: Thu Jul 29, 2010 9:30 am
by Mojo
borr_1 wrote:Ты уже код показать не хочешь?
Code: Select all
dc.DrawRectangle(rect.GetX()-1, rect.GetY()-1, rect.GetWidth()+2, rect.GetHeight()+2);
У тебя должно идти первой строчкой.
Добавил обновления в пост выше, там подробнее описал проблему.... Скорее всего нужно копать в grid.DrawTextRectangle(dc, grid.GetCellValue(row, col), rect);
Posted: Thu Jul 29, 2010 9:44 am
by borr_1
Code: Select all
class MyGridCellRenderer : public wxGridCellStringRenderer
{
public:
virtual void Draw(wxGrid& grid,
wxGridCellAttr& attr,
wxDC& dc,
const wxRect& rect,
int row, int col,
bool isSelected)
{
dc.DrawRectangle(rect.GetX()-1, rect.GetY()-1, rect.GetWidth()+2, rect.GetHeight()+2);
wxPen left_pen = wxPen();
left_pen.SetColour(0, 0, 0);
left_pen.SetWidth(3);
dc.SetPen( left_pen );
wxRect myrect;
myrect.x = rect.x + 8;
myrect.y = rect.y + 2;
dc.DrawLine( rect.x, rect.y, rect.x, rect.y + rect.height-1);
dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( grid.GetCellTextColour(0,0) );
dc.SetFont( grid.GetCellFont(0,0) );
dc.DrawText(grid.GetCellValue(row, col), rect.GetX()+5, rect.GetY());
}
};
};
Ясное дело так и будет. Ты смотри что ты в DrawTextRectangle пхаешь и как я текст отрисовываю - dc.DrawText.
Posted: Thu Jul 29, 2010 9:58 am
by borr_1
У меня все нормально рисуется что тебе мешает я понять не могу смотри ячейка 0, 0. С кодом который в последний раз привел.
Posted: Thu Jul 29, 2010 10:09 am
by Mojo
borr_1 wrote:У меня все нормально рисуется что тебе мешает я понять не могу смотри ячейка 0, 0. С кодом который в последний раз привел.
Заработало
)) Правда терь выравнивание в ячейке по вертикали и по горизонтали через m_grid1->SetCellAlignment(); не работает, но как я понимаю, если текст рисуется через рендерер, то и выравнивать придется через рендерер и соответственно цвета шрифта и фона тоже через рендерер придется устанавливать......
Posted: Thu Jul 29, 2010 10:10 am
by Mojo
borr_1 wrote:У меня все нормально рисуется что тебе мешает я понять не могу смотри ячейка 0, 0. С кодом который в последний раз привел.
Спасибо borr_1 ты настоящий друг
)
Posted: Thu Jul 29, 2010 10:23 am
by borr_1
Тебе мед еще и ложку
Code: Select all
grid.DrawTextRectangle(dc, grid.GetCellValue(row, col),
myrect, wxALIGN_LEFT); // ну или wxALIGN_CENTER
Это вместо dc.DrawText у меня работает
Спасибо borr_1 ты настоящий друг Smile)
Рисую еще одно пиво на мониторе.
Posted: Thu Jul 29, 2010 10:28 am
by Mojo
borr_1 wrote:Тебе мед еще и ложку
Code: Select all
grid.DrawTextRectangle(dc, grid.GetCellValue(row, col),
myrect, wxALIGN_LEFT); // ну или wxALIGN_CENTER
Это вместо dc.DrawText у меня работает
Спасибо borr_1 ты настоящий друг Smile)
Рисую еще одно пиво на мониторе.
С меня пиво
Posted: Thu Jul 29, 2010 10:41 am
by Mojo
Кстати, если рисовать на соседней ячейке справа такой же левый бордюр, то бордюры снова расползаются.... для того, что бы этого глюка не было, нужно вызвать еще и родительский Draw wxGridCellStringRenderer::Draw()
т.е. полный код такой:
Code: Select all
class MyGridCellRenderer : public wxGridCellStringRenderer
{
public:
virtual void Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc, const wxRect& rect, int row, int col, bool isSelected)
{
//////////////////////////////////////////////////////////////////////////////
wxGridCellStringRenderer::Draw(grid, attr, dc, rect, row, col, isSelected); //
//////////////////////////////////////////////////////////////////////////////
dc.DrawRectangle(rect.GetX()-1, rect.GetY()-1, rect.GetWidth()+2, rect.GetHeight()+2);
wxPen left_pen = wxPen();
left_pen.SetColour(0, 0, 0);
left_pen.SetWidth(3);
dc.SetPen( left_pen );
dc.DrawLine( rect.x, rect.y, rect.x, rect.y + rect.height-1);
dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( grid.GetCellTextColour(row, col) );
dc.SetFont( grid.GetCellFont(row, col) );
dc.DrawText(grid.GetCellValue(row, col), rect.GetX()+8, rect.GetY()+2);
//grid.DrawTextRectangle(dc, grid.GetCellValue(row, col), myrect, wxALIGN_LEFT);
}
};
Posted: Thu Jul 29, 2010 10:52 am
by Mojo
borr_1 wrote:Тебе мед еще и ложку
Code: Select all
grid.DrawTextRectangle(dc, grid.GetCellValue(row, col),
myrect, wxALIGN_LEFT); // ну или wxALIGN_CENTER
Это вместо dc.DrawText у меня работает
А параметры myrect какие установил?
Блин я ток ща заметил, я забыл установить
myrect.width
myrect.height
Поэтому DrawTextRectangle у меня не работала
Posted: Thu Jul 29, 2010 10:54 am
by borr_1
Code: Select all
wxRect myrect = rect;
myrect.x = rect.x + 8;
myrect.y = rect.y + 2;
Posted: Thu Jul 29, 2010 10:57 am
by Mojo
borr_1 wrote:Code: Select all
wxRect myrect = rect;
myrect.x = rect.x + 8;
myrect.y = rect.y + 2;
без myrect.width и myrect.height, DrawTextRectangle не работает.
Posted: Thu Jul 29, 2010 11:00 am
by borr_1
Mojo wrote:
без myrect.width и myrect.height, DrawTextRectangle не работает.
Именно по этому wxRect myrect = rect;. Вас там жара тоже походу давит.
Posted: Thu Jul 29, 2010 11:02 am
by Mojo
borr_1 wrote:Mojo wrote:
без myrect.width и myrect.height, DrawTextRectangle не работает.
Вас там жара тоже походу давит.
Давит не то слово, убивает....
DrawTextRectangle удобнее чем DrawText, сразу решается проблема с выравниванием текста в ячейке....