Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];

Вниз

Рисовать в ячейках 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.01 c
1-81670
sewix
2003-08-11 18:57
2003.08.25
TRichEdit Scroll


1-81696
Vint45
2003-08-11 11:58
2003.08.25
Отслеживание событий


14-81916
SPIRIT
2003-08-07 13:03
2003.08.25
А ДАВАЙТЕ *.EXE ФАЙЛ УМЕНЬШИМ


1-81803
deninside
2003-08-13 22:37
2003.08.25
Вопрос про закладки и массив строк.


8-81848
Alexandr_A
2003-04-26 01:21
2003.08.25
OpenGL - как сохранить в файл картинку? Timage глючит





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский