Главная страница
    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.46 MB
Время: 0.037 c
14-1100697719
_none_
2004-11-17 16:21
2004.12.05
как сравнить 2 переменных типа TGUID...


1-1100881842
VitGun
2004-11-19 19:30
2004.12.05
"Invalid pointer operation" при закрытии.


14-1100772358
cvg
2004-11-18 13:05
2004.12.05
У кого-нить есть прикол про сотворение мира?


8-1094300342
вразлет
2004-09-04 16:19
2004.12.05
Звук


14-1100487683
Думкин
2004-11-15 06:01
2004.12.05
С днем рождения! 15 ноября





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский