![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Удалено модератором