Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
1-1100758913
masha
2004-11-18 09:21
2004.12.05
OracleScript как вывести выполнение скрипта


3-1099568570
SergP
2004-11-04 14:42
2004.12.05
DBGRID. Узнать State для остальных ячеек строки в DrawColumnCell


8-1094225585
AzIN
2004-09-03 19:33
2004.12.05
время


3-1099464032
SergP
2004-11-03 09:40
2004.12.05
Получить номер строки DbGrid в событии DrawColumnCell


1-1101032493
PoUlerer
2004-11-21 13:21
2004.12.05
Menu