Форум: "Базы";
Текущий архив: 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.028 c