![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисовать в ячейках DBGrid как на канвасе
Relaxxx © (2003-07-31 13:07:00)
Здраствуйте мастера!!!
Возможно ли в ячейках ДБГрида рисовать как на канвасе, например чтоб закрасить ячейку в точечку или в полоску. Если можно то не могли б написать маленький примерчик, чтоб посмотреть как это реализуется или дайте ссылочку где про это рассказывается.
Relaxxx (2003-07-31 18:35:00) [1]
Все работает, спасибо за помощь
ВОПРОС СНЯТ!!!
Соловьев (2003-07-31 18:21:00) [2]
> Этот код просто закрашивает все ячейки колонки "DATE" в
> красный цвет,
у меня этот код закрашивает и выводит значение поля. если не хочешь выводить , то не надо
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
Плохиш (2003-07-31 18:11:00) [3]
>Relaxxx © (31.07.03 17:49)
Повторяю: Сначало DefaultDrawColumnCell
Плохиш (2003-07-31 18:09:00) [4]
PS. Может Screen-Shot прислать?
Плохиш (2003-07-31 18:08:00) [5]Что вы мне мозги компосируете. 17-строку проверте
grdInfo.DefaultDrawColumnCell( Rect, DataCol, Column, State );
with grdInfo.Canvas do
begin
Brush.Color := clBlue;
( Rect.Left, Rect.Top, Rect.Left + 8, Rect.Top + 8)
Что вы мне мозги компосируете. 17-строку проверте
grdInfo.DefaultDrawColumnCell( Rect, DataCol, Column, State );
with grdInfo.Canvas do
begin
Brush.Color := clBlue;
Rectangle( Rect.Left, Rect.Top, Rect.Left + 8, Rect.Top + 8 );
end;
grdInfo.Canvas.Brush.Color := oldColor;
Relaxxx (2003-07-31 17:49:00) [6]СТОП!!!!!!!
рано радуюсь :-(
> Соловьев ©
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var olc: TColor;
begin
if Column.FieldName = "DATE" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect);
end;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
(Sender as TDbGrid).Canvas.Brush.Color := olc;
end;
Этот код просто закрашивает все ячейки колонки "DATE" в красный цвет,
> Плохиш
впринципе тоже самое
Мне не нужно закрашивать все ячейки колонки "Name" полностью, мне нужно нарисовать в каждой этой ячейки маленький квадратик (примером 10*10).
Я пишу так
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
olc:TColor;
begin
if Column.FieldName = "Name" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect.Top, Rect.Left,Rect.Top+10, Rect.Left+10);
(Sender as TDbGrid).Canvas.Brush.Color := olc;
( Sender)
СТОП!!!!!!!
рано радуюсь :-(
> Соловьев ©
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var olc: TColor;
begin
if Column.FieldName = "DATE" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect);
end;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
(Sender as TDbGrid).Canvas.Brush.Color := olc;
end;
Этот код просто закрашивает все ячейки колонки "DATE" в красный цвет,
> Плохиш
впринципе тоже самое
Мне не нужно закрашивать все ячейки колонки "Name" полностью, мне нужно нарисовать в каждой этой ячейки маленький квадратик (примером 10*10).
Я пишу так
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
olc:TColor;
begin
if Column.FieldName = "Name" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect.Top, Rect.Left,Rect.Top+10, Rect.Left+10);
(Sender as TDbGrid).Canvas.Brush.Color := olc;
end;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
Но так не работает
> рисует так что зеленые квадраты все йдут по
> одной линии но по горизонтали и расположены они на заголовке
> ДБГрида
Соловьев (2003-07-31 17:24:00) [7]
> Плохиш (31.07.03 17:19
твой не верно будет работать.
Relaxxx (2003-07-31 17:23:00) [8]
Спасибки за помощь!!!!!!!!!!!!!!!!
сейчас буду раздираться
Еще раз всем спасиба, все попробую ;-)
Плохиш (2003-07-31 17:23:00) [9]
Вот ещё :-) Я и свой не пробывал ;-)
Соловьев (2003-07-31 17:21:00) [10]
> Плохиш (31.07.03 17:19)
попробуй мой код :)
Плохиш (2003-07-31 17:19:00) [11]тогда уж
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var olc: TColor;
begin
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
if Column.FieldName = "DATE" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
( Rect)
тогда уж
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var olc: TColor;
begin
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
if Column.FieldName = "DATE" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect);
Brush.Color := olc;
end;
end;
end;
DefaultDrawColumnCell перересовывает ячейку заново
Соловьев (2003-07-31 17:12:00) [12]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var olc: TColor;
begin
if Column.FieldName = "DATE" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect);
( Sender)
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var olc: TColor;
begin
if Column.FieldName = "DATE" then
begin
with (Sender as TDbGrid).Canvas do
begin
olc := Brush.Color;
Brush.Color:=clRed;
Rectangle(Rect);
end;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
(Sender as TDbGrid).Canvas.Brush.Color := olc;
end;
stud (2003-07-31 17:02:00) [13]
обрабатывай ondrawdatecell
Relaxxx (2003-07-31 16:56:00) [14]Вот я хочу в каждой ячейке поля Name нарисовать зеленый квадратик
If Column.FieldName="Name" then
begin
Old_color:=TDBGrid(Sender).Canvas.Brush.Color;
TDBGrid(Sender).Canvas.Brush.Color:=clGreen;
TDBGrid(Sender).Canvas.Rectangle Rect.Top ,Rect.Left, Rect.Top+10, Rect.Left+10);
TDBGrid(Sender).Canvas.Brush.Color:=Old_color;
( Sender)Вот я хочу в каждой ячейке поля Name нарисовать зеленый квадратик
If Column.FieldName="Name" then
begin
Old_color:=TDBGrid(Sender).Canvas.Brush.Color;
TDBGrid(Sender).Canvas.Brush.Color:=clGreen;
TDBGrid(Sender).Canvas.Rectangle Rect.Top ,Rect.Left, Rect.Top+10, Rect.Left+10);
TDBGrid(Sender).Canvas.Brush.Color:=Old_color;
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
А мне просто рисует так что зеленые квадраты все йдут по одной линии но по горизонтали и расположены они на заголовке ДБГрида. Мне вообще непонятно что тогда получается такое Rect (я думал что это координаты ячейки которая в данный момент перерисовывается). Обьясните пожалуйста чем потолковее, заранее спасибо!
Соловьев (2003-07-31 15:43:00) [15]
> TDBGrid(Sender).Canvas.Rectangle(0,0,10,10);
var old_color: TColor;
...
old_color := TDBGrid(Sender).Canvas.Brush.Color;
...
TDBGrid(Sender).Canvas.Rectangle(Rect.Top,Rect.Left,Rect.Top+10,Rect.Left+10);
TDBGrid(Sender).Canvas.Brush.Color:=old_color;
...
Relaxxx (2003-07-31 14:25:00) [16]а поточнее не подскажите,
я например хочу в каждой ячейке поля Name нарисовать например красный квадратик, я делаю так
If Column.FieldName="Name" then
begin
TDBGrid(Sender).Canvas.Pen.Width:=2;
TDBGrid(Sender).Canvas.Brush.Color:=clRed;
TDBGrid(Sender).Canvas.Rectangle(0,0,10,10);
( Sender)а поточнее не подскажите,
я например хочу в каждой ячейке поля Name нарисовать например красный квадратик, я делаю так
If Column.FieldName="Name" then
begin
TDBGrid(Sender).Canvas.Pen.Width:=2;
TDBGrid(Sender).Canvas.Brush.Color:=clRed;
TDBGrid(Sender).Canvas.Rectangle(0,0,10,10);
end;
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
Но у меня закращивается все колонка Name красным а квадратик рисуется в самом верху слева, тоесть в координатах 0,0 всей таблицы, а я хочу непосредственно ячейки которую я рисую.
Соловьев (2003-07-31 13:11:00) [17]
можно
DrawColumnCell
Sender.Canvas....
И использешь весь надор методов Canvas