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

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

DBGRID. Узнать State для остальных ячеек строки в DrawColumnCell [D6]


SergP ©   (2004-11-04 14:42:00) 

Старался всегда поменьше юзать DBGRID (какой-то он в отличии от всего остального неудобный). Но вот понадобился он мне.Поэтому приходится задавать вопросы (возможно и тупые). Ногами только не бейте плиз...

В данном случае хочу сделать чтобы строка в гриде выделялась например светло-синим цветом, а редактируемая ячейка темно-синим.
Если настроить грид так чтобы выделялась вся строка, то он становится readonly

А если пытаться отрисовывать ячейки в OnDrawColumnCell то мне, чтобы сделать ячейку светло-синим цветом нужно знать нет ли в данной строке ячеек с dgSelected в State.
Как в OnDrawColumnCell узнать State для остальных ячеек этой строки?


SergP   (2004-11-05 14:51:00) [1]


> [8] ЮЮ ©   (05.11.04 06:23)


  (Column.Field.DataSet.Fields[0].AsInteger = Column.Field.DataSet.Tag)

Компилятор это проглотил, но в ран-тайме вылезали эксепшены...
х/з в чем дело, но ключевое поле у меня есть.

Вобщем основываясь на Ваших мыслях, сделал по другому:

type TSGrid = class(TDBGrid)

....

if  TSGrid(Sender).row=TSGRID(sender).DataLink.ActiveRecord+1  then ...

Теперь работает...


ЮЮ   (2004-11-05 06:23:00) [2]


procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 if
   (Column.Field.DataSet.Fields[0].AsInteger = Column.Field.DataSet.Tag) and
   // "текущая" запись DataSet-а
   not (gdSelected in State)
   // ячейка не выбрана
 then begin
   TDBGrid(Sender).Canvas.Brush.Color := clBlue; // на голубом фоне
   TDBGrid(Sender).Canvas.Font.Color := clWhite; // белыми буквами
 end;
 TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

procedure TForm1.Query1AfterScroll(DataSet: TDataSet);
begin
 DataSet.Tag := DataSet.Fields[0].asInteger;
   // запоминаем значение ключевого поля
end;


SergP   (2004-11-04 22:34:00) [3]


> Читай http://www.delphikingdom.com/helloworld/dbgridcolor.htm


Это я знаю, но здесь абсолютно ничего нет по поводу сабжа.
Мне нужно отрисовать другим цветом ячейки текущей записи, не переводя при этом грид в readonly. А вот как в onDrawColumnCell узнать, ячейка текущей записи или нет отрисовывается в данный момент?


SergP   (2004-11-04 20:16:00) [4]

procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
 if gdSelected in State then DBGrid1.Canvas.Brush.Color := $ffc0ff;
 DBGrid1.DefaultDrawColumnCell(rect,Datacol, Column, state);
end;

Окрашивается только ячейка которая имеет фокус. Остальные какие были, такие и остались...


MORA   (2004-11-04 19:30:00) [5]

Читай http://www.delphikingdom.com/helloworld/dbgridcolor.htm


MORA   (2004-11-04 19:25:00) [6]

У меня так всё работает:

...
dbgOrderDetails.Canvas.Brush.Color := clBlue; // на голубом фоне
dbgOrderDetails.Canvas.Font.Color := clWhite; // белыми буквами
if gdSelected in State then
 dbgOrderDetails.Canvas.Brush.Color := clHighlight;
 dbgOrderDetails.Canvas.Font.Color := clHighlightText;
end;
(Sender as TDBGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);
...


SergP.   (2004-11-04 19:02:00) [7]


> MORA   (04.11.04 18:42) [2]
> Я всегда думал, что State это свойство записи, а не ячейки.
> Или я чего-то не понимаю?


Я тоже сначала так думал...
Может это я что-то не понимаю, но работать не хочет...
Когда проверяю или dgSelected in State и затем рисую эту ячейку каким-нить цветов то в итоге этот цвет имеет не вся строка (запись) а только одна ячейка.

Проверю еще или я не намутил что-нить в коде.


MORA   (2004-11-04 18:42:00) [8]

Я всегда думал, что State это свойство записи, а не ячейки.
Или я чего-то не понимаю?


SergP.   (2004-11-04 18:27:00) [9]

Удалено модератором


Наверх

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