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

Вниз

Изменить цвет строки в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
1-1086516192
Larry Laffer
2004-06-06 14:03
2004.06.20
Функция в DLL


1-1086672164
zetovich
2004-06-08 09:22
2004.06.20
string -> real (in pascal)


14-1086098165
Exciter
2004-06-01 17:56
2004.06.20
Кто знает как работать с FB в С# ???


3-1085730363
alsov1
2004-05-28 11:46
2004.06.20
Как получить имена таблиц sql запросом


9-1077685259
Poison man
2004-02-25 08:00
2004.06.20
Текстурирование объектов