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

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

Разъясните еще раз про 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 сделать?


Наверх

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