Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

хочу посоветоваться на счет алгоритма раскраски грида...   Найти похожие ветки 

 
AAA3AAA   (2003-12-01 15:50) [0]

Хочется расскрасить грид по датам полосками.... тоесть если идут документы за одну дату. красить их в один цвет, а как начались за другую (не обязательно следующую), то в другой цвет.
Если бы присутствовали документы за все даты, то проблема бы легко решалась... просто красим все четные в один цвет, а нечетные в другой... но в данной ситуации могут встречаться документы с произвольными датами... к примеру идут подряд, 23,23,23,23,27,27,27... они окрасятся в один цвет...
Процедуры грида DBGrid1DrawColumnCell или DBGrid1DrawDataCell

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

в алгоритме проверяем If прошлая дата отличается от тевущей then меняем цвет на следующий и прорисовываем поле (всего можно задать несколько цветов и менять по кругу)

У этого алгоритма есть недостаток:
Так как число дат может оказаться не четным, то данные в гриде будут постоянно перерисовываться то в один, то в другой цвет (например после того как хинт поднимется... поле из одного цвета, станет другого) или при перемотке

Как тут быть ?. Подскажите пож что можно предпринять?


 
vlv   (2003-12-01 16:12) [1]

Введи в твой DataSet вычисляемое поле.
После открытия твоего DataSet-а один раз пробегись по нему
и установи это поле (можешь по своему теперешнему алгоритму).
А на DrawDataCell крась строку в зависимости от этого поля.


 
Александр из Минска   (2003-12-01 16:18) [2]

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if gdFixed in State then Exit;
if ListBox1.Items.Count >= 1000 then //список цветов, в которые должен красить столбец
//у меня заранее преполагается, что в таблице не будет более 1000 колонок. И этот листбокс сохраняется/загружается в/из файла.
В нем всегда 1000 строк (даже если у тебя меньше колонок)
begin
StringGrid1.Canvas.Brush.Color := StringToColor(ListBox1.Items[ACol]);
StringGrid1.Canvas.Brush.Style := bsSolid;
StringGrid1.Canvas.FillRect(Rect);
if gdSelected in State then
begin
StringGrid1.Canvas.Brush.Color:= clHighLight;
StringGrid1.Canvas.Font.Color := clHighLightText;
end;
StringGrid1.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, StringGrid1.Cells[ACol, ARow]);
end;
end;

Все понятно?


 
AAA3AAA   (2003-12-02 06:23) [3]


> vlv (01.12.03 16:12) [1]

Спасибо. К этому и склонялся, но думал может еще варианты есть.

> Александр из Минска © (01.12.03 16:18) [2]

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


 
Мыш   (2003-12-02 08:08) [4]

А если цвет не принципиален, то можно сделать вычисление цвета по дате. Берешь дату в днях, умножаешь на некоторое значение и заносишь это в цвет. color:=dayNum*10+$00eebbcc; Создавать поле имхо, будет громоздко, поэтому если цвет важен, то можно создать массив[0..31]of Tcolor - таблицу соответствия каждой дате определенного цвета.


 
AAA3AAA   (2003-12-02 08:31) [5]


> Мыш © (02.12.03 08:08) [4]
"массив[0..31]of Tcolor "

Я так тоже пробовал.
Мое ИМХО что это развитие моего первого метода раскраски по четным нечетным.
Сам посуди что будет если попадутся даты поряд 20.02, 20.03, 20.4...
А первый метод... вычисление цвета из даты... Мне он не подходит, поскольку цвета получаются непредсказуемыми и слишком уж большой диапозон... столько не нужно... Грид смотрится как радуга, а нужно всего лиш 2 цвета, отделяющие новый день от предидущего.
В общем пока сделал вычисляемый столбец... Все пашет как надо. Если есть предложения по оптимизации данной задачи, с удовольствием выслушаю :)
всем спасибо.



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

Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-36612
qwerty2
2003-12-01 14:05
2003.12.12
Указатели


14-36809
ИдиотЪ
2003-11-20 10:16
2003.12.12
отношение к людям


1-36682
Walrus
2003-12-02 21:59
2003.12.12
Шаблоны или что-то в этом духе


7-36868
--olg-
2003-10-03 09:53
2003.12.12
Управление притером через WinSpool (WinXP)


1-36683
lena19
2003-12-02 23:57
2003.12.12
создание обекта и его собития





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский