On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение





Пост N: 498
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.11.16 12:13. Заголовок: Цветной DBEDIT() / TBROWSE()


Извините за глупый вопрос, но не прошло и 20 лет моего программирования на Clipper/Harbour, как возникла потребность отображать некоторые строки/столбцы другим цветом.

Подскажите пожалуйста, как подступиться к этому вопросу.
Идеально было-бы как-то использовать DBEDIT(), а не TBROWSE() - тк в объектах и наследовании я не силен.

Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 9 [только новые]


постоянный участник




Пост N: 5185
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.11.16 13:24. Заголовок: Sergy пишет: Идеаль..


Sergy пишет:

 цитата:
Идеально было-бы как-то использовать DBEDIT(), а не TBROWSE() - тк в объектах и наследовании я не силен.



Не знаю насчёт DBEDIT(), а для TBROWSE() у меня есть готовый пример. Можешь смело применять.
https://cloud.mail.ru/public/c9356541557a/xHARBOUR

И нет там никакого наследования, всё через функции.



Спасибо: 1 
ПрофильЦитата Ответить
moderator




Пост N: 1047
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.11.16 13:34. Заголовок: Sergy пишет: как по..


Sergy пишет:

 цитата:
как подступиться к этому вопросу


Во-первых, использовать DBEDIT() для раскраски строк/столбцов не получится
Во-вторых, надо использовать для этого TBROWSE объект, как это предусмотрели разработчики.

Посмотри, как это делается в функции FancyColors() в примере ниже для Клиппера
Скрытый текст


Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 501
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 26.11.16 00:08. Заголовок: Спасибо за примеры, ..


Спасибо за примеры, пошел ковырять oColumn:colorSpec

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 502
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 26.11.16 18:57. Заголовок: Разобрался. Оставлю ..


Разобрался. Оставлю тут, может кому пригодится.

1) нужно заранее перечислить все возможные (нужные) комбинации цветов в oBrowse, например, так:

oBrowse:colorSpec := "N/W, N/BG, B/W, B/BG, B/W, B/BG, R/W, B/R"

первые пять пар цветов - обычно стандартные, берутся из SETCOLOR(), остальные - добавляются по желанию.

2) нужно в каждом столбце задать блок кода, который будет возвращать значение в виде массива с двумя числами, например: {1,2}, где числа - номера нужных пар цвета из oBrowse:colorSpec для отображения текущей ячейки в "стандартном" и выделенном цвете. Интереснее всего, конечно, это делать динамически, на основании текущего поля, например так:

oColumn:colorBlock := {|| IIF( table->value < 0, {7,8}, {1,2})}

Если значение нужного поля в таблице меньше нуля, оно будет отображено цветом 7 (R/W) или выделено (курсор на этом поле) цветом 8 (B/R)
Если оно равно или больше нуля = "стандартной" парой цветов 1 (N/W) и 2 (N/BG)



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6143
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.11.16 18:59. Заголовок: Sergy А раньше не ю..


Sergy
А раньше не юзал совсем Browse ?
Я изначально сваял свой универсальный бровс на основе Browse

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6144
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.11.16 19:10. Заголовок: Sergy Держи примеры..


Sergy
Держи примеры из Clipper на тему Browse
https://cloud.mail.ru/public/L6q9/F7ZezfnDw

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 503
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 26.11.16 22:04. Заголовок: Dima пишет: А раньш..


Dima пишет:

 цитата:
А раньше не юзал совсем Browse ?
Я изначально сваял свой универсальный бровс на основе Browse



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

Твои примеры посмотрю, спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 130
Зарегистрирован: 24.04.13
ссылка на сообщение  Отправлено: 29.03.17 11:57. Заголовок: Разобрался. Оставлю ..



 цитата:
Разобрался. Оставлю тут, может кому пригодится.

1) нужно заранее перечислить все возможные (нужные) комбинации цветов в oBrowse, например, так:

oBrowse:colorSpec := "N/W, N/BG, B/W, B/BG, B/W, B/BG, R/W, B/R"

первые пять пар цветов - обычно стандартные, берутся из SETCOLOR(), остальные - добавляются по желанию.

2) нужно в каждом столбце задать блок кода, который будет возвращать значение в виде массива с двумя числами, например: {1,2}, где числа - номера нужных пар цвета из oBrowse:colorSpec для отображения текущей ячейки в "стандартном" и выделенном цвете. Интереснее всего, конечно, это делать динамически, на основании текущего поля, например так:

oColumn:colorBlock := {|| IIF( table->value < 0, {7,8}, {1,2})}

Если значение нужного поля в таблице меньше нуля, оно будет отображено цветом 7 (R/W) или выделено (курсор на этом поле) цветом 8 (B/R)
Если оно равно или больше нуля = "стандартной" парой цветов 1 (N/W) и 2 (N/BG)


Sergy , а пример рабочий есть ?
Нашёл такой пример в хелпе по xHarbour
Скрытый текст

но он видно только для xHarbour

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 521
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 30.03.17 00:12. Заголовок: azoo пишет: Sergy ,..


azoo пишет:

 цитата:
Sergy , а пример рабочий есть ?



да, использую вот так:

в текст стандартного DbEdit() добавил два (последних по списку) параметра - массив блоков кода и строку с цветовой таблицей:

FUNCTION dbEdit( nTop, nLeft, nBottom, nRight, ; 
acColumns, xUserFunc, ;
xColumnSayPictures, xColumnHeaders, ;
xHeadingSeparators, xColumnSeparators, ;
xFootingSeparators, xColumnFootings, ;
aColorBlocks, cColorTable )


внутри DBEDIT() добавил:
 
IF HB_ISSTRING(cColorTable) // задан цвет ?
oBrowse:colorSpec := cColorTable // заменяем полностью таблицу цветов и
ENDIF // и добавляем новые (если есть)


чуть ниже, при генерации столбцов - еще немного:
 
IF HB_ISARRAY( aColorBlocks ) // задан массив блоков кода ?
IF nPos <= LEN(aColorBlocks) // в пределах ?
oColumn:colorBlock := aColorBlocks[nPos] // назначаем столбцу блок кода
ENDIF
//
ELSEIF HB_ISBLOCK( aColorBlocks ) // задан один блокна всех ?
oColumn:colorBlock := aColorBlocks // присваиваем всем столбцам одинаковый
ENDIF

oBrowse:addColumn( oColumn )

С внутренностями DBEDIT() закончил, вызов в программе выглядит так:

DBEDIT(куча, разных, параметров, ...., и, в, самом, конце, {||IIF(MyFunc() > 0, {1,2} , {6,2} )}, cColorString)

Где обычно cColorString := SETCOLOR()+",15/2,10/4" или что-то типа того. Пять пар стандартных цветов и несколько дополнительных.

Блок кода - в данном случае один на все столбцы, соотв. вся строка целиком будет менять цвет в зависимости от результата MyFunc():
Значение {1,2} означает - "первая пара из cColorString" для невыделенной ячейки и "вторая пара из cColorString" для выделенной (активной).
Соотв. значение массива {6,2} означает шестую и вторую пару.

Если задать "массив блоков кода", то можно каждую ячейку выделять на основании любых условий.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 513
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет