Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-76116
Петр 1
2003-02-05 19:44
2003.02.24
Указ о достоинстве гостевом на ассамблеях имеющем.


1-76006
ALex44
2003-02-13 09:40
2003.02.24
PostMessage & Thread


14-76120
KonstVD
2003-02-06 09:26
2003.02.24
Кто я?


1-75885
aspen
2003-02-13 18:08
2003.02.24
Как получить доступ к папкам Outlook Exprese?


3-75823
Arkady
2003-02-04 17:00
2003.02.24
Повреждение FPT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский