Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

Изменить цвет строки в DBGrid   Найти похожие ветки 

 
lightix   (2004-05-27 10:28) [0]

Подскажите, как изменить цвет строки в DBGrid например в зависимости от значения какой либо колонки?
В методе OnDrawColumnCell есть только номер кононки DataCol, а вот номера строки которая в данный момент отрисовывается - нету.

Заранее благодарен


 
DenK_vrtz ©   (2004-05-27 10:30) [1]

www.delphikingdom.com/helloworld/dbgridcolor.htm


 
lightix   (2004-05-27 10:41) [2]

тот пример который там имеется итак понятен, всмысле сама идея раскраски:
[code]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if {какое-то условие} then begin
with  DBGrid1.Canvas do
begin
 Brush.Color:=clGreen;
 Font.Color:=clWhite;
 FillRect(Rect);
 TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
end;
end;
end;
[/code]
Но вопрос немного в другом : как определить КАКУЮ СТРОКУ В ДАННЫЙ МОМЕНТ КРАСИМ ? То есть что написать здесь:
[code]
if {какое-то условие} then begin
[/code]


 
Vlad ©   (2004-05-27 10:43) [3]


> Но вопрос немного в другом : как определить КАКУЮ СТРОКУ
> В ДАННЫЙ МОМЕНТ КРАСИМ ? То есть что написать здесь:


а ты что, произвольные строки красишь произвольным цветом ?
У записи должен же быть какой-то критерий, по которому ты раскрашиваешь строку в тот или иной цвет ? Вот и проверяй его.


 
Yarik ©   (2004-05-27 10:48) [4]

with Grid1.Canvas do begin
    if Column.FieldName = "Kom1" and
       spMatches.FieldByName("Kom1").asString = "xxx"
then
 begin ...


 
lightix   (2004-05-27 10:51) [5]

так я покрашу только одну ячейку, а нужно всю строку


 
lightix   (2004-05-27 10:54) [6]

ПРИМЕР.
Я знаю что если в ПОЛЕ1 записан 0 то ВСЯ СТРОКА остается неподкрашеная, если 1 то подкрашенная.

КАК ПРОВЕРИТЬ КАКОЕ ЗНАЧЕНИЕ В 1 СТОЛБЦЕ ОКРАШИВАЕМОЙ В ДАННЫЙ МОМЕНТ СТРОКИ?


 
Vlad ©   (2004-05-27 10:54) [7]


> lightix   (27.05.04 10:51) [5]

with TDBGrid(Sender) do
if DataSource.DataSet.FieldByName("NAME").AsString="ВАСЯ" then
 Canvas.Brush.Color:=clRed;

Все записи где поле NAME = ВАСЯ будут покрашены в красный цвет.


 
Sergey13 ©   (2004-05-27 10:57) [8]

if (Sender as TDBGrid).DataSource.DataSet.FieldByName("my_field").AsInteger=0 then
Background:=clRed else Background:=clWhite;


 
lightix   (2004-05-27 11:01) [9]

Vlad © , Угу, и красится только текущая ячейка ....


 
lightix   (2004-05-27 11:05) [10]

Народ ну вы сами пробовали то что пишете???
[code]
(Sender as TDBGrid).DataSource.DataSet.FieldByName("my_field").AsInteger
[/code]
это содержимое ТЕКУЩЕЙ СТРОКИ, которая в текущий момент является активной в НАБОРЕ ДАННЫХ, а при перерисовке DrawColumnCell она не изменяется!!!


 
KADAN ©   (2004-05-27 11:05) [11]

2 ligthix
этот код РАБОТАЕТ, не пудри мозги
with TDBGrid(Sender) do
if (DataSource.DataSet.FieldByName("id").AsInteger mod 2)=0 then begin
Canvas.Brush.Color:=clRed;
Canvas.FillRect(Rect);
end;


 
lightix   (2004-05-27 11:10) [12]

2 KADAN Спасибо, действительно работает :)


 
Vlad ©   (2004-05-27 11:11) [13]


> lightix   (27.05.04 11:01) [9]
> Vlad © , Угу, и красится только текущая ячейка ....

см также
> KADAN ©   (27.05.04 11:05) [11]

особенно вот это:

> не пудри мозги


 
Sergey13 ©   (2004-05-27 11:13) [14]

2lightix   (27.05.04 11:05) [10]
>Народ ну вы сами пробовали то что пишете???
А ты пробовал? Ты думаешь я это по памяти набивал? Делать мне больше нечего! Скопировал и рабочей проги.


 
lightix   (2004-05-27 11:14) [15]

2 Vlad попробуй напиши свой код  - и увидишь что в этом случае подкрашивается только текущая ячейка на которой стоишь.


 
lightix   (2004-05-27 11:19) [16]

Народ, всем спасибо, понял свою ошибку, все работает :)


 
Vlad ©   (2004-05-27 11:21) [17]


> lightix   (27.05.04 11:14) [15]


Мой код красит всю строку целиком.
Хоть писал и не проверяя, но теперь порверил и (в который раз :-)) убедился что это так


 
lightix   (2004-05-27 11:24) [18]

Vlad ©>
> Мой код красит всю строку целиком.
> Хоть писал и не проверяя, но теперь порверил и (в который
> раз :-)) убедился что это так
Странно у меня же получилось с этим кодом только подкрашивание ободка выделеенной ячейки.


 
Vlad ©   (2004-05-27 11:32) [19]


> lightix   (27.05.04 11:24) [18]

Ну так ты говоришь статью читал ?
А если читал - там написано что свойство DefaultDrawing ставим в false, вместо этого дефолтную прорисовку делаем в коде после раскраски.
DefaultDrawColumnCell(Rect, DataCol, Column, State);


 
lightix   (2004-05-27 11:34) [20]

Я твою проверку применил для другой версии, с включенным DefaultDrawing



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.032 c
14-1085951356
Knight
2004-05-31 01:09
2004.06.20
Песни...


1-1086265053
Eugene83
2004-06-03 16:17
2004.06.20
Доступ к переменным модуля Проэкта


3-1085662454
Silencer
2004-05-27 16:54
2004.06.20
RxDBGrid и ширина колонок


3-1085722787
maximus_
2004-05-28 09:39
2004.06.20
InterBase 6.5


1-1086435011
Walkie Talkie
2004-06-05 15:30
2004.06.20
Количество прочитанных байт





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский