Форум: "Базы";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.037 c