Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисовать в ячейках 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо