Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

Рисовать в ячейках DBGrid как на канвасе   Найти похожие ветки 

 
Relaxxx ©   (2003-07-31 13:07) [0]

Здраствуйте мастера!!!
Возможно ли в ячейках ДБГрида рисовать как на канвасе, например чтоб закрасить ячейку в точечку или в полоску. Если можно то не могли б написать маленький примерчик, чтоб посмотреть как это реализуется или дайте ссылочку где про это рассказывается.


 
Соловьев ©   (2003-07-31 13:11) [1]

можно

DrawColumnCell

Sender.Canvas....
И использешь весь надор методов Canvas


 
Relaxxx ©   (2003-07-31 14:25) [2]

а поточнее не подскажите,
я например хочу в каждой ячейке поля 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 15:43) [3]


> 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 16:56) [4]

Вот я хочу в каждой ячейке поля 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 (я думал что это координаты ячейки которая в данный момент перерисовывается). Обьясните пожалуйста чем потолковее, заранее спасибо!


 
stud ©   (2003-07-31 17:02) [5]

обрабатывай ondrawdatecell


 
Соловьев ©   (2003-07-31 17:12) [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);
( 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;


 
Плохиш   (2003-07-31 17:19) [7]

тогда уж

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:21) [8]


> Плохиш (31.07.03 17:19)

попробуй мой код :)


 
Relaxxx ©   (2003-07-31 17:23) [9]

Спасибки за помощь!!!!!!!!!!!!!!!!
сейчас буду раздираться
Еще раз всем спасиба, все попробую ;-)


 
Плохиш   (2003-07-31 17:23) [10]

Вот ещё :-) Я и свой не пробывал ;-)


 
Соловьев ©   (2003-07-31 17:24) [11]


> Плохиш (31.07.03 17:19

твой не верно будет работать.


 
Relaxxx ©   (2003-07-31 17:49) [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);
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 18:08) [13]

Что вы мне мозги компосируете. 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;



 
Плохиш   (2003-07-31 18:09) [14]

PS. Может Screen-Shot прислать?


 
Плохиш   (2003-07-31 18:11) [15]

>Relaxxx © (31.07.03 17:49)
Повторяю: Сначало DefaultDrawColumnCell


 
Соловьев ©   (2003-07-31 18:21) [16]


> Этот код просто закрашивает все ячейки колонки "DATE" в
> красный цвет,

у меня этот код закрашивает и выводит значение поля. если не хочешь выводить , то не надо
TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);



 
Relaxxx ©   (2003-07-31 18:35) [17]

Все работает, спасибо за помощь
ВОПРОС СНЯТ!!!



Страницы: 1 вся ветка

Текущий архив: 2003.08.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
1-81648
MikeZ
2003-08-12 12:52
2003.08.25
ComboBox с картинками.


1-81734
Vulko
2003-08-09 17:21
2003.08.25
Папка проги.


1-81747
TButton
2003-08-09 21:17
2003.08.25
TMemo (брат :) )


1-81694
Miralex
2003-08-11 12:59
2003.08.25
Mouse right click


1-81685
lynx
2003-08-11 15:11
2003.08.25
Run-time created объекты