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

Вниз

DevExpress Grid4: Как правильно раскрашивать ячейки по условию?   Найти похожие ветки 

 
BlackTiger   (2003-02-04 15:10) [0]

Странное дело...
Может чего не понимаю, а может глюк.

Нужно ячейки определенных колонок раскрашивать в определенный цвет в зависимости от значения другого поля.
Беру OnCustomDrawCell и ... получаю гранату :)
Эта зараза (Grid4) перекрашивает ВСЕ ВИДИМЫЕ ЯЧЕЙКИ КОЛОНКИ по условию текущей записи (понятно объяснил?).

Что я делаю не так? Как мне раскрасить только ячейки текущей (соответствыющей записи) строки грида?

Вот текст моего OnCustomDrawCell (ногами бить не надо, а вот пинок в верном направлении приветствуется :) ):

procedure TfrmItemPrices.DrawPriceCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
fn: string;
dp,cp: double;
begin
fn := AViewInfo.Item.Caption;
if StrUtils.AnsiContainsText(fn," Price") and
(fn <> "Default Price") then begin
dp := Self.DataSource1.DataSet.FieldByName("Default Price").AsFloat;
cp := Self.DataSource1.DataSet.FieldByName(fn).AsFloat;
if dp < cp then ACanvas.Brush.Color := clGreen;
if dp > cp then ACanvas.Brush.Color := clRed; ACanvas.DrawTexT(AViewInfo.DisplayValue,AViewInfo.TextAreaBounds,0);
end;
end;


 
BlackTiger   (2003-02-04 15:25) [1]

И не надо меня отсылать на "Полосатый грид".
Это DevExpress, а не стандартный грид - тут все не так.


 
BlackTiger   (2003-02-04 15:36) [2]

Кажется я начинаю понимать, но ПОМОЩЬ НУЖНА!!!

Он перерисовывает ВСЕ видимые ячейки при каждом перемещении по записям - вот бред и получаю...
Как мне из OnCustomDrawCell одной ячейки обратиться к значению другой колонки соответствующей строки (!!!).

Блин, сложно объяснить, как и все в DevExpress.


 
BlackTiger   (2003-02-04 17:07) [3]

Ну!

vuk! Где ты?!?!?!?


 
koks ©   (2003-02-04 17:28) [4]

Попробуй использовать другое событие.


 
Юрий Жуков ©   (2003-02-04 18:01) [5]

С четвертым еще не работал, но скажу сразу к значению друго поля ты обращаешься неравильно.

Надо не через DataSet, а через значения самого грида. По крайней мере в 3-ке было так. Посмотри пример.


 
ermserg   (2003-02-04 19:18) [6]

Ne znayu kak v 4, no dumayu chto tebe ne nuzhno risovat na canvase. Posmotry svoystva TcxGridTableDataCellViewInfo - tam dolzhni bit i Font i Color i Text.


 
BlackTiger   (2003-02-04 19:29) [7]

Дело в том, что на 3-ий грид даже смысла нет смотреть - в 4-м все по другому работает. А как - понять не могу, и в примерах к нему нет использования CustomDraw.


 
ermserg   (2003-02-04 19:40) [8]

Ya tak ponimayu chto esli ti ne vistavlyayesh ADone := true, to vso chto ti narisoval na ACanvas budet pozhzhe pererisovano, znachit tebe nuzhno izmenit to znacheniye, kotoroye budet narisovano. V versii 3 eto var AText : string. Zdes takogo parametra netu, znachit on zapryatan gde-to. Ischi AViewInfo.Text ili AViewInfo.Data ili chto-to pohozheye. Somnevayus, chto eto budet svoystvo ACanvase, no kto ih znayet.
Escho poprobuy posmotret OnCustomDrawCell kolonok.


 
Денис Курьин ©   (2003-02-04 19:52) [9]

Я сделал процедуру вот таким образом, у меня закрашивает поля попарно сравнивая их (наименования и значения), если отсутствует в 1-м, но есть во втором - красный цвет, если есть и там и там, но не равны между собой, то желтый цвет, в противном случае (есть и там и там и равны между собой) - белый фон, черный шрифт. Пробуй, должно работать.

procedure TForm1.dxDBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
ASelected, AFocused, ANewItemRow: Boolean; var AText: String;
var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
var ADone: Boolean);
var
ValueMax, ValueMin: Variant;
begin

// процедура прорисовки Grid
// Наименования и обозначение
if (not ASelected and (AColumn = dxDBGrid1Field2))
or (not ASelected and (AColumn = dxDBGrid1Field3))
or (not ASelected and (AColumn = dxDBGrid1Field1)) then
begin
if not VarIsNull(ANode.Values[1]) then
ValueMax := ANode.Values[1]
else
ValueMax := "";
if not VarIsNull(ANode.Values[2]) then
ValueMin := ANode.Values[2]
else
ValueMin := "";

if (Trim(ValueMax) <> "") and (Trim(ValueMin) <> "") then // не пустое значение
begin
if CompareText(ValueMax,ValueMin) <> 0 then // отличается
begin
AColor := rgb(250,250,150); // желтый
AFont.Color := rgb(0,0,0); //черный
end else begin // одинаковые
AColor := rgb(255,255,255); // белый
AFont.Color := rgb(0,0,0); //черный
end;
end else begin // пустое значение
AColor := rgb(255,100,150);// розовый
AFont.Color:= rgb(250,250,150); // желтый
end;
end;

// Значения
if (not ASelected and (AColumn = dxDBGrid1Field4))
or (not ASelected and (AColumn = dxDBGrid1Field5)) then
begin
if not VarIsNull(ANode.Values[3]) then
ValueMax := ANode.Values[3]
else
ValueMax := "";
if not VarIsNull(ANode.Values[4]) then
ValueMin := ANode.Values[4]
else
ValueMin := "";

if (Trim(ValueMax) <> "") and (Trim(ValueMin) <> "") then // не пустое значение
begin
if CompareText(ValueMax,ValueMin) <> 0 then // отличается
begin
AColor := rgb(250,250,150); // желтый
AFont.Color := rgb(0,0,0); //черный
end else begin // одинаковые
AColor := rgb(255,255,255); // белый
AFont.Color := rgb(0,0,0); //черный
end;
end else begin // пустое значение
AColor := rgb(255,100,150);// розовый
AFont.Color:= rgb(250,250,150); // желтый
end;
end;


end;


 
BlackTiger   (2003-02-04 21:34) [10]

>Денис Курьин
Это dxGrid, там всё просто, а мне нужен cxGrid (4-я версия)
Там совсем другие параметры и их гораздо меньше.

>ermserg
Вот тут ты не прав. Если выставлять ADone := true, то нужно перерисовывать ВСЮ ячейку целиком (я попробовал - мне плохо стало от результата!). В принципе у меня работает, только форматирует ВСЕ ВИДИМЫЕ ячейки относительно значения ТЕКУЩЕЙ записи.

Как получить значения записи, В КОТОРОЙ НАХОДИТСЯ ЯЧЕЙКА НЕЗАВИСИМО ОТ ТЕКУЩЕЙ ЗАПИСИ??? Вот в чем вопрос. Я уже во взаимосмязях их компонентов запутался окончательно.
Блин, через 50 наследников/потомков!!!


 
BlackTiger   (2003-02-05 09:32) [11]

Ну неужели никто не подскажет?


 
BlackTiger   (2003-02-05 11:53) [12]

Блин!!! И-ДИ-ОТ я!!! Какже сразу не увидел... Лопух...


 
vuk ©   (2003-02-05 13:23) [13]

Не знаю, о чем Вы, но примеры на отрисовку в поставке QuantumGrid есть. И как с данными в гриде при этом работать - тоже.


 
BlackTiger   (2003-02-05 14:20) [14]

>vuk

Да нееее, все нормально, выспался - сразу всё нашел :)
Спать надо больше, работать надо меньше...



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

Текущий архив: 2003.02.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
1-75850
Ahmad K
2003-02-13 14:34
2003.02.24
Еще раз про скины...


6-76059
Saimon
2003-01-05 04:11
2003.02.24
Отправка письма по E-mail у


6-76063
Be$
2002-12-29 12:08
2003.02.24
Отправка файла через сокет...


9-75737
chistyakov
2002-08-22 15:21
2003.02.24
Может подберет кто :)


1-75851
anbezr
2003-02-13 14:34
2003.02.24
Размер массива, переданного как ссылка.