:: Visual Foxpro, Foxpro for DOS
Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Здравствуйте уважаемые корифеи программирования. Есть интересная задачка! Как-то написал программу для инвентаризации оргтехники, с тех пор она обросла огромным количеством функций, ремонты, отчеты, перемещения, склад и прочее. Так вот идея такова, в основную таблицу добавил поле COLOR - для хранения цвета строчки в Grid. Хочу из контекстного меню менять цвет строки, чтобы их цвет записывался в поле COLOR и соответственно выводил "раскрашенный реестр", ну как легенда: Красный фон - списать, желтый - уточнить то-то и т.д.
Цвет получаю CetColor() и храню в виде строки 'RGB(XXX,XXX,XXX)', предварительно обработав функцией.

Вот так пытаюсь покрасить нужную мне строку и записываю цвет во временный курсор (пока что), но красится весь Grid (((, ConvRGB() - переделывает код цвета от CetColor() в 'RGB(XXX,XXX,XXX)'
lineColor = GETCOLOR()
StrColor = ConvRGB(lineColor)
Technic.PageFrame1.Page1.Grid1.SETALL("dynamicBackColor", StrColor, "Column")
SELECT tmpComp
SCATTER MEMVAR fields Color
m.Color = StrColor
GATHER MEMVAR FIELDS Color

В Init формы пытаюсь грузить курсор и красить так:
WITH ThisForm.Pageframe1.Page1.Grid1
...............................................
.RecordSource = 'tmpComp'
.COlumn19.ControlSource = 'tmpComp.Lic_num'
.COlumn19.Visible = IIF(m.cfgLicense = 0, .t., .f.)
.COlumn19.Width = 120
.COlumn20.ControlSource = 'tmpComp.Room'
.COlumn20.Visible = IIF(m.cfgRoom = 0, .t., .f.)
.COlumn20.Width = 100
.SETALL("dynamicBackColor", tmpComp.Color, "Column")
ENDWITH
Вообще ничего не красит (( Подскажите пожалуйста, может ошибка где или я вообще не тем путем иду, за ранее благодарю.
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
Так Dynamic-и должны получать .T./.F. в результате, чтобы либо красить либо нет.
.SetAll('DynamicBackColor','ICASE(<условие>, StrColor, RGB(0,0,0))', 'Column')
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Да вот тут сразу цвет подставляется а не логика,
forum.foxclub.ru
THISFORM.grid1.SETALL("dynamicforecolor", "zamovl.color", "Column")
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Саян
StrColor = ConvRGB(lineColor)
Technic.PageFrame1.Page1.Grid1.SETALL("dynamicBackColor", StrColor, "Column")
Задаешь один цвет, но хочешь раскраски в несколько?
В dynamicBackColor должно быть выражение, вычисляющее нужный цвет для текущей строки.
.SetAll('DynamicBackColor','ICASE(<условие1>, Color1, <условие2>, Color2, RGB(0,0,0))', 'Column')


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Я понял, не получится произвольно закрасить в разные цвета, надо сделать ЛЕГЕНДУ и вычислять её... так получается, в контекстном меню сделать несколько пунктов и цветов и в зависимости от кода красить, так?
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
И при чем тут контекстное меню?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Божья_коровка

Сообщений: 25731
Дата регистрации: 23.08.2001
Вот пример раскраски грида -

Thisform.grid1.SetAll("DynamicBackColor",;
'IIF(F40="S".or.F40="W",RGB(255,255,128),IIF(F40="V",RGB(214,183,227),IIF(ZAL="1",RGB(128,255,128),IIF(UG_P="1",RGB(255,128,128),iif (ar_p="1",rgb(0,255,255),IIF(dov_p="1",RGB(255,128,64),IIF(ogr_p="1",RGB(255,128,192),RGB(255,255,255))))))))',;
"Column")

Для чего вам контекстное меню?


------------------
Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...




Исправлено 1 раз(а). Последнее : Божья_коровка, 03.08.18 11:52
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Саян
Цвет получаю CetColor() и храню в виде строки 'RGB(XXX,XXX,XXX)'

Добавьте еще одно поле, например ColorValue, со значением того что Вы сейчас храните в виде строки 'RGB(XXX,XXX,XXX)'.
Тогда раскраска заработает в таком виде:
THISFORM.grid1.SETALL("dynamicforecolor", "tmpComp.ColorValue", "Column")


------------------
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Хотел сделать так: yadi.sk, чтобы можно было красить в произвольный, как понял придется вот так: yadi.sk
Я вначале описал, открыл реестр, щелкнул ПКМ, выбрал цвет для строки... все, цвет произвольный. При следующем открытии базы, эти строки раскрасились в нужные мне цвета - выбранные ранее.



Исправлено 1 раз(а). Последнее : Саян, 03.08.18 12:01
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Ну вот так храню: yadi.sk
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Саян
Ну вот так храню: yadi.sk
Из Украины яндекс не видно.

Думаю так будет более понятно что я имел ввиду:
Replace ColorValue With Eval(Color)


------------------




Исправлено 1 раз(а). Последнее : Sawradym, 03.08.18 12:14
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Ну так и в чем дело? Нарисуй функцию, получающую значение цвета из твоего "хранилища цветов" по значениям в текущей строке грида и подставь её(функцию!) в dynfmicbackcolor. Тебе про Фому, а ты всё про Ерёму....


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Выбрав цвет из цветовой палитры, я получаю его код (формат числовой), я написал функцию перевода этого числа в формат 'RGB(XXX.XXX.XXX)' и записываю его в таким виде в базу, функцию выбора цвета я поместил в контекстное меню (скрины прикреплены выше)... В том-то и дело, что чего-то не догоняю, не закрашивается выбранная строка в указанный цвет, е если вручную вбить несколько значений в базу и прогрузить реестр, то строки как были в цвете по-умолчанию, так и остались.



Исправлено 1 раз(а). Последнее : Саян, 03.08.18 12:27
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
pasha_usue

Сообщений: 3649
Откуда: Е-бург
Дата регистрации: 06.10.2006
Саян
Выбрав цвет из цветовой палитры, я получаю его код (формат числовой), я написал функцию перевода этого числа в формат 'RGB(XXX.XXX.XXX)' и записываю его в таким виде в базу, функцию выбора цвета я поместил в контекстное меню (скрины прикреплены выше)... В том-то и дело, что чего-то не догоняю, не закрашивается выбранная строка в указанный цвет, е если вручную вбить несколько значений в базу и прогрузить реестр, то строки как были в цвете по-умолчанию, так и остались.
По-сути, для вычисления цвета каждой ячейки фокс делает EVALUATE(DynamicBackColor). А цвет это число в диапазоне от 0 до 16777215.

А вы ему подсовываете текстовую строку с текстом функции. Чтоб выковырять из неё число, надо сделать EVALUATE(EVALUATE(DynamicBackColor)). До такого тонкого извращения создатели фокса не додумались.

Тупо. В поле таблицы должно быть число, вычисленное от функции RGB, или ещё от чего полученное. А свойство DynamicBackColor должно содержать текстовую строку с названием поля (и курсора).



Исправлено 1 раз(а). Последнее : pasha_usue, 03.08.18 12:47
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Даже не знаю где тут можно заблудиться

CREATE CURSOR Test (Text C(10), ColorValue I)
INSERT INTO Test (Text, ColorValue) VALUES ('Строка 1', RGB(255,0,255))
INSERT INTO Test (Text, ColorValue) VALUES ('Строка 2', RGB(0,0,255))
INSERT INTO Test (Text, ColorValue) VALUES ('Строка 3', RGB(255,0,0))
INSERT INTO Test (Text, ColorValue) VALUES ('Строка 4', RGB(255,255,0))
GO Top
oForm = CREATEOBJECT('Form')
oForm.AddObject('My_Grid','Grid')
oForm.My_Grid.ColumnCount = 1
oForm.My_Grid.Column1.DynamicBackColor = 'Test.ColorValue'
oForm.My_Grid.Visible = .t.
oForm.Show(1)


------------------
Ratings: 0 negative/1 positive
Re: Раскраска строк Grid-а
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Я понял где ТС запутался)
DynamicBackColor работает по условию.

Thisform.grid1.SetAll("DynamicBackColor",;
'IIF(твое_условие,цвет_в_числах ,другой_цвет_в_числах'
"Column")

И совсем не надо в RGB переводить.
так что главное, определись с условиями, по которым ты будешь красить.
Потом для каждого условия, назначь цвет, ну и... все)
Если хочешь произвольно, каждую строку, так надо, с этой строкой, хранить цвет. То бишь, доп поле. Например color
ну и код примерно
Thisform.grid1.SetAll("DynamicBackColor",;
'IIF(color>0,color,цвет_по_умолдчанию'
"Column")


------------------
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
LOCAL ColorCode, StrColor
ColorCode = GETCOLOR()
StrCode = ConvRGB(ColorCode)
Technic.PageFrame1.Page1.Grid1.setall("DynamicBackColor", "&StrCode", "Column")
SELECT tmpComp
SCATTER MEMVAR fields ID, Color
m.Color = ColorCode
UPDATE Tech SET ;
Color = m.Color ;
WHERE Tech.ID = m.ID
GATHER MEMVAR FIELDS Color
Эта процедура действительно красит строку в выбранный цвет и записывает его код в БД, но куда бы я потом не тыкнул мышкой, эти строки тоже красятся в этот же цвет(((



Исправлено 1 раз(а). Последнее : Саян, 03.08.18 16:01
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Саян
"DynamicBackColor", "&StrCode", "Column"
Конечно. Никакой динамики нет. У вас однозначный цвет=&StrCode
Вы получили цвет, и его вставили в раскраску. Все в этот цвет и раскрасилось. Так у вас закодировано.
Там все не верно.
еще раз, прочтите что писал pasha_usue
Не надо никаких ConvRGB
Сформулируйте четко, для начала, задачу.


------------------
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Да не надо там никакого условия, у автора темы и так в каждой записи прописан её цвет.
Владимир (Sawradym) всё предельно понятно и кратно описал.

Выкинуть всю мутотень с получением строки "RGB(...)" - в поле хранить именно число (хватит диапазона типа Integer) которое тот же GetColor и возвращает. В Dynamic* прописать просто ИМЯ ПОЛЯ (а это строка, скажем "tmpComp.Color") - никаких макро, никаких eval не нужно.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Раскраска строк Grid-а
Саян
Автор

Сообщений: 57
Дата регистрации: 26.07.2007
Igor Korolyov
Да не надо там никакого условия, у автора темы и так в каждой записи прописан её цвет.
Владимир (Sawradym) всё предельно понятно и кратно описал.

Выкинуть всю мутотень с получением строки "RGB(...)" - в поле хранить именно число (хватит диапазона типа Integer) которое тот же GetColor и возвращает. В Dynamic* прописать просто ИМЯ ПОЛЯ (а это строка, скажем "tmpComp.Color") - никаких макро, никаких eval не нужно.
- все классно описано, работает, пробовал за что и плюс в карму )
Вот Вы говорите не нужно никакой конвертации в строку, а как тогда отдать цвет в Динамик, если отдаешь его Интегером - ошибка, не тот тип данных, если отдаешь его в кавычках - тоже ошибка на тип данных, если макроподстановка без конвертации, ничего не происходит, если через преобразование в РГБ( и т.д. работает, но там дальше опять роги, вверху писал.

LOCAL ColorCode, StrColor
ColorCode = GETCOLOR()
SELECT tmpComp
SCATTER MEMVAR fields ID, Color
m.Color = ColorCode
UPDATE Tech SET Color = m.Color WHERE Tech.ID = m.ID
SELECT tmpComp
GATHER MEMVAR FIELDS Color
Technic.PageFrame1.Page1.Grid1.Column1.DynamicBackColor = ConvRGB(tmpComp.Color)


Пы.Сы. как наверное трудно объяснять не программисту в чем его ошибка (((



Исправлено 4 раз(а). Последнее : Саян, 06.08.18 10:43
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 (Гостей: 26)

© 2000-2024 Fox Club 
Яндекс.Метрика