Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизDBGRID. Узнать State для остальных ячеек строки в DrawColumnCell Найти похожие ветки
← →
SergP © (2004-11-04 14:42) [0]Старался всегда поменьше юзать DBGRID (какой-то он в отличии от всего остального неудобный). Но вот понадобился он мне.Поэтому приходится задавать вопросы (возможно и тупые). Ногами только не бейте плиз...
В данном случае хочу сделать чтобы строка в гриде выделялась например светло-синим цветом, а редактируемая ячейка темно-синим.
Если настроить грид так чтобы выделялась вся строка, то он становится readonly
А если пытаться отрисовывать ячейки в OnDrawColumnCell то мне, чтобы сделать ячейку светло-синим цветом нужно знать нет ли в данной строке ячеек с dgSelected в State.
Как в OnDrawColumnCell узнать State для остальных ячеек этой строки?
← →
SergP. (2004-11-04 18:27) [1]Удалено модератором
← →
MORA (2004-11-04 18:42) [2]Я всегда думал, что State это свойство записи, а не ячейки.
Или я чего-то не понимаю?
← →
SergP. (2004-11-04 19:02) [3]
> MORA (04.11.04 18:42) [2]
> Я всегда думал, что State это свойство записи, а не ячейки.
> Или я чего-то не понимаю?
Я тоже сначала так думал...
Может это я что-то не понимаю, но работать не хочет...
Когда проверяю или dgSelected in State и затем рисую эту ячейку каким-нить цветов то в итоге этот цвет имеет не вся строка (запись) а только одна ячейка.
Проверю еще или я не намутил что-нить в коде.
← →
MORA (2004-11-04 19:25) [4]У меня так всё работает:
...
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);
...
← →
MORA (2004-11-04 19:30) [5]Читай http://www.delphikingdom.com/helloworld/dbgridcolor.htm
← →
SergP © (2004-11-04 20:16) [6]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;
Окрашивается только ячейка которая имеет фокус. Остальные какие были, такие и остались...
← →
SergP © (2004-11-04 22:34) [7]
> Читай http://www.delphikingdom.com/helloworld/dbgridcolor.htm
Это я знаю, но здесь абсолютно ничего нет по поводу сабжа.
Мне нужно отрисовать другим цветом ячейки текущей записи, не переводя при этом грид в readonly. А вот как в onDrawColumnCell узнать, ячейка текущей записи или нет отрисовывается в данный момент?
← →
ЮЮ © (2004-11-05 06:23) [8]
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-05 14:51) [9]
> [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 ...
Теперь работает...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c