![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Изменить цвет строки в DBGrid
lightix © (2004-05-27 10:28:00)Подскажите, как изменить цвет строки в DBGrid например в зависимости от значения какой либо колонки?
В методе OnDrawColumnCell есть только номер кононки DataCol, а вот номера строки которая в данный момент отрисовывается - нету.
Заранее благодарен
lightix (2004-05-27 11:34:00) [1]Я твою проверку применил для другой версии, с включенным DefaultDrawing
Vlad (2004-05-27 11:32:00) [2]
> lightix (27.05.04 11:24) [18]
Ну так ты говоришь статью читал ?
А если читал - там написано что свойство DefaultDrawing ставим в false, вместо этого дефолтную прорисовку делаем в коде послераскраски.
DefaultDrawColumnCell(Rect, DataCol, Column, State);
lightix (2004-05-27 11:24:00) [3]Vlad ©>
> Мой код красит всю строку целиком.
> Хоть писал и не проверяя, но теперь порверил и (в который
> раз :-)) убедился что это так
Странно у меня же получилось с этим кодом только подкрашивание ободка выделеенной ячейки.
Vlad (2004-05-27 11:21:00) [4]
> lightix (27.05.04 11:14) [15]
Мой код красит всю строку целиком.
Хоть писал и не проверяя, но теперь порверил и (в который раз :-)) убедился что это так
lightix (2004-05-27 11:19:00) [5]Народ, всем спасибо, понял свою ошибку, все работает :)
lightix (2004-05-27 11:14:00) [6]2 Vlad попробуй напиши свой код - и увидишь что в этом случае подкрашивается только текущая ячейка на которой стоишь.
Sergey13 (2004-05-27 11:13:00) [7]2lightix (27.05.04 11:05) [10]
>Народ ну вы сами пробовали то что пишете???
А ты пробовал? Ты думаешь я это по памяти набивал? Делать мне больше нечего! Скопировал и рабочей проги.
Vlad (2004-05-27 11:11:00) [8]
> lightix (27.05.04 11:01) [9]
> Vlad © , Угу, и красится только текущая ячейка ....
см также
> KADAN © (27.05.04 11:05) [11]
особенно вот это:
> не пудри мозги
lightix (2004-05-27 11:10:00) [9]2 KADAN Спасибо, действительно работает :)
KADAN (2004-05-27 11:05:00) [10]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:05:00) [11]Народ ну вы сами пробовали то что пишете???
[code]
(Sender as TDBGrid).DataSource.DataSet.FieldByName('my_field').AsInteger
[/code]
это содержимое ТЕКУЩЕЙ СТРОКИ, которая в текущий момент является активной в НАБОРЕ ДАННЫХ, а при перерисовке DrawColumnCell она не изменяется!!!
lightix (2004-05-27 11:01:00) [12]Vlad © , Угу, и красится только текущая ячейка ....
Sergey13 (2004-05-27 10:57:00) [13]if (Sender as TDBGrid).DataSource.DataSet.FieldByName('my_field').AsInteger=0 then
Background:=clRed else Background:=clWhite;
Vlad (2004-05-27 10:54:00) [14]
> lightix (27.05.04 10:51) [5]
with TDBGrid(Sender) do
if DataSource.DataSet.FieldByName('NAME').AsString='ВАСЯ' then
Canvas.Brush.Color:=clRed;
Все записи где поле NAME = ВАСЯ будут покрашены в красный цвет.
lightix (2004-05-27 10:54:00) [15]ПРИМЕР.
Я знаю что если в ПОЛЕ1 записан 0 то ВСЯ СТРОКАостается неподкрашеная, если 1 то подкрашенная.
КАК ПРОВЕРИТЬ КАКОЕ ЗНАЧЕНИЕ В 1 СТОЛБЦЕ ОКРАШИВАЕМОЙ В ДАННЫЙ МОМЕНТ СТРОКИ?
lightix (2004-05-27 10:51:00) [16]так я покрашу только одну ячейку, а нужно всю строку
Yarik (2004-05-27 10:48:00) [17]with Grid1.Canvas do begin
if Column.FieldName = 'Kom1' and
spMatches.FieldByName('Kom1').asString = 'xxx'
then
begin ...
Vlad (2004-05-27 10:43:00) [18]
> Но вопрос немного в другом : как определить КАКУЮ СТРОКУ
> В ДАННЫЙ МОМЕНТ КРАСИМ ? То есть что написать здесь:
а ты что, произвольные строки красишь произвольным цветом ?
У записи должен же быть какой-то критерий, по которому ты раскрашиваешь строку в тот или иной цвет ? Вот и проверяй его.
lightix (2004-05-27 10:41:00) [19]тот пример который там имеется итак понятен, всмысле сама идея раскраски:
[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]
DenK_vrtz (2004-05-27 10:30:00) [20]www.delphikingdom.com/helloworld/dbgridcolor.htm