wxGrid: Как сделать отступы внутри я Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Thu Jul 29, 2010 9:16 am

Ты уже код показать не хочешь?

Code: Select all

dc.DrawRectangle(rect.GetX()-1, rect.GetY()-1, rect.GetWidth()+2, rect.GetHeight()+2);
У тебя должно идти первой строчкой.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 9:30 am

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);
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Thu Jul 29, 2010 9:44 am

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.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Thu Jul 29, 2010 9:58 am

У меня все нормально рисуется что тебе мешает я понять не могу смотри ячейка 0, 0. С кодом который в последний раз привел.
Attachments
wxGrid_Draw.JPG
wxGrid_Draw.JPG (5.7 KiB) Viewed 4623 times
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 10:09 am

borr_1 wrote:У меня все нормально рисуется что тебе мешает я понять не могу смотри ячейка 0, 0. С кодом который в последний раз привел.
Заработало :))) Правда терь выравнивание в ячейке по вертикали и по горизонтали через m_grid1->SetCellAlignment(); не работает, но как я понимаю, если текст рисуется через рендерер, то и выравнивать придется через рендерер и соответственно цвета шрифта и фона тоже через рендерер придется устанавливать......
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 10:10 am

borr_1 wrote:У меня все нормально рисуется что тебе мешает я понять не могу смотри ячейка 0, 0. С кодом который в последний раз привел.
Спасибо borr_1 ты настоящий друг :))
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Thu Jul 29, 2010 10:23 am

Тебе мед еще и ложку :lol:

Code: Select all

grid.DrawTextRectangle(dc, grid.GetCellValue(row, col),
myrect, wxALIGN_LEFT); // ну или wxALIGN_CENTER
Это вместо dc.DrawText у меня работает
Спасибо borr_1 ты настоящий друг Smile)
Рисую еще одно пиво на мониторе.
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 10:28 am

borr_1 wrote:Тебе мед еще и ложку :lol:

Code: Select all

grid.DrawTextRectangle(dc, grid.GetCellValue(row, col),
myrect, wxALIGN_LEFT); // ну или wxALIGN_CENTER
Это вместо dc.DrawText у меня работает
Спасибо borr_1 ты настоящий друг Smile)
Рисую еще одно пиво на мониторе.
С меня пиво :D
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 10:41 am

Кстати, если рисовать на соседней ячейке справа такой же левый бордюр, то бордюры снова расползаются.... для того, что бы этого глюка не было, нужно вызвать еще и родительский 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);

	}
};

Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 10:52 am

borr_1 wrote:Тебе мед еще и ложку :lol:

Code: Select all

grid.DrawTextRectangle(dc, grid.GetCellValue(row, col),
myrect, wxALIGN_LEFT); // ну или wxALIGN_CENTER
Это вместо dc.DrawText у меня работает
А параметры myrect какие установил?

Блин я ток ща заметил, я забыл установить
myrect.width
myrect.height

Поэтому DrawTextRectangle у меня не работала
Last edited by Mojo on Thu Jul 29, 2010 11:01 am, edited 3 times in total.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Thu Jul 29, 2010 10:54 am

Code: Select all

wxRect myrect = rect;
myrect.x = rect.x + 8;
myrect.y = rect.y + 2;
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 10:57 am

borr_1 wrote:

Code: Select all

wxRect myrect = rect;
myrect.x = rect.x + 8;
myrect.y = rect.y + 2;
без myrect.width и myrect.height, DrawTextRectangle не работает.
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

borr_1
Super wx Problem Solver
Super wx Problem Solver
Posts: 362
Joined: Wed Mar 07, 2007 8:10 am
Location: Russia, Shakhty

Post by borr_1 » Thu Jul 29, 2010 11:00 am

Mojo wrote: без myrect.width и myrect.height, DrawTextRectangle не работает.
Именно по этому wxRect myrect = rect;. Вас там жара тоже походу давит. :)
WinXP SP3, wx-2.8.10, MinGW-4.4.1, gdb-7.1.2, eclipse

Mojo
Super wx Problem Solver
Super wx Problem Solver
Posts: 401
Joined: Wed Sep 21, 2005 8:17 am
Location: Rostov-on-Don, Southern Russia

Post by Mojo » Thu Jul 29, 2010 11:02 am

borr_1 wrote:
Mojo wrote: без myrect.width и myrect.height, DrawTextRectangle не работает.
Вас там жара тоже походу давит. :)
:lol: Давит не то слово, убивает.... :D

DrawTextRectangle удобнее чем DrawText, сразу решается проблема с выравниванием текста в ячейке.... :D
Win XP HE SP3, Vista
Xubuntu 12.04 LTS
wxWidgets-2.9.5
wxWidgets-3.0.0

Post Reply