![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разъясните еще раз про DBGrid (рисунки, Canvas и т.д.) [D7, MSSQL]
Artem123 © (2004-07-12 15:05:00)Сразу скажу таблица не локальная использую ClientDataSet
procedure TFrmChild.dbgr_frmchildDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if TDataSource(TDBGrid(Sender).DataSource).DataSet.FieldByName('DNAME').AsString='noname';
then
with TDBGrid(Sender).Canvas do
begin
Brush.Color:=clGrayText;
Font.Color:=clWhite;
FillRect(rect);
TDBGrid(Sender).Columns[0].Font.Color:= clred;
TextOut(Rect.Left, Rect.Top, Column.Field.Text);
ImageList1.Draw(TDBGrid(Sender).Canvas, Rect.Left, Rect.Top, 0);
end;
end;
Закраска происходит сразу всей строки что и надо но ..
Если в TextOut указать Column.Field.Text что в данном случае то выдает ошибку. Если TextOut(Rect.Left, Rect.Top, ''); то прокатывает но текст не видно. Да и изображение из ImageList рисуется в каждой колонке Грида а мне надо чтоб толко в одной.
Если же такой вариант толку еще меньше
procedure TFrmChild.dbgr_frmchildDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if Column.FieldName='DNAME' then
begin
if Column.Field.AsString='noname' then
with TDBGrid(Sender).Canvas do
begin
Brush.Color:=clGrayText;
Font.Color:=clWhite;
FillRect(rect);
TDBGrid(Sender).Columns[0].Font.Color:= clred;
TextOut(Rect.Left, Rect.Top, Column.Field.Text);
ImageList1.Draw(TDBGrid(Sender).Canvas, Rect.Left, Rect.Top, 0);
end;
end;
В данном случае закрашивается только найденная ячейка и в ней же рисуется изображение а оно мне тут не надо.
Короче каким образом сделать что бы строчка закрашивалась целиком а изображение появлялось в первом Column - этот Сщдгьт не связано не скаким полем.
Ega23 (2004-07-12 15:53:00) [1]Какой Column-то?
Artem123 (2004-07-12 15:50:00) [2]Column.Field.Text это взял из примера на http://delphi.vitpc.com/asp/viewitem.asp?UrlItem=/helloworld/dbgridcolor.htm
Соловьев (2004-07-12 15:49:00) [3]
> TextOut(Rect.Left, Rect.Top, Column.Field.Text);
> TextOut(Rect.Left, Rect.Top, Column.Field.AsString);
Artem123 (2004-07-12 15:42:00) [4]Соловьев
ошибка возникает когда ее проходит
Соловьев (2004-07-12 15:37:00) [5]
> ошибка возникает на строке TextOut
на ней, т.е. когда туда курсор попадает или когда курсор ее проходит?
Ega23 (2004-07-12 15:37:00) [6]TextOut(Rect.Left, Rect.Top, Column.Field.Text);
Column.Field.Text - это к чему относится?
Artem123 (2004-07-12 15:34:00) [7]begin
if TDataSource(TDBGrid(Sender).DataSource).DataSet.FieldByName('DNAME').AsString='Artem'
then
with TDBGrid(Sender).Canvas do
begin
Brush.Color:=clGrayText;
Font.Color:=clWhite;
FillRect(rect);
TDBGrid(Sender).Columns[0].Font.Color:= clred;
ImageList1.Draw(TDBGrid(Sender).Canvas, Rect.Left, Rect.Top, 0);
TextOut(Rect.Left, Rect.Top, Column.Field.Text);
end;
end;
ошибка возникает на строке TextOut
Access violation at adress 00494DB9
а как насчет того чтоб картинку только в первой колонке отобразить
Соловьев (2004-07-12 15:32:00) [8]
> Надо было писать "проверка на IsNull" :)
а головой когда начнут думать? :)
Курдль (2004-07-12 15:31:00) [9]Надо было писать "проверка на IsNull" :)
Соловьев (2004-07-12 15:29:00) [10]
> ошибка Access violation at adress
> null не работает
где имеено выдает на какой строке?
как не работает? код!
Artem123 (2004-07-12 15:26:00) [11]ошибка Access violation at adress
null не работает
Соловьев (2004-07-12 15:09:00) [12]
> TextOut(Rect.Left, Rect.Top, Column.Field.Text);
> ImageList1.Draw(TDBGrid(Sender).Canvas, Rect.Left,
> Rect.Top, 0);
поменять местами если хочешь поверх изображения писать
> указать Column.Field.Text что в данном случае то выдает
> ошибку.
какую?
может проверку на Null сделать?