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




Пост N: 1665
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.04.20 16:38. Заголовок: Реализация LITEBAR в TBrowse


Вопрос к нашим экспертам по библиотеке TSBrowse:

Как средствами TBrowse создать LITEBAR с 1-й по 5-ю колонку, поскольку в 6-й располагается цветной индикатор-светофор, и поэтому курсор не должен на него выходить, его (этот столбец) надо заморозить

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


администратор




Пост N: 1538
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.04.20 22:04. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Как средствами TBrowse создать LITEBAR с 1-й по 5-ю колонку,

лайтбар это типа длинный курсор?

с 1 по 5 примерно так
 
for nCol := 1 to 5
oBrw:SetColor( { 6 }, {{ |a,b,c| IF( c:nCell == b, -CLR_HRED , -RGB(128,225,225)) }}, nCol )
end


заморозка 6 это садиться на навигацию или прорисовку и если колонка болше 5 то вернуть 5

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3114
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.20 11:52. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
поскольку в 6-й располагается цветной индикатор-светофор, и поэтому курсор не должен на него выходить, его (этот столбец) надо заморозить


Не очень понял с 6-ой колонкой. При скролинге экрана она одна заморожена в 6-ой позиции, а колонки меняются с 1 по 5 и далее с 7-ой ? Или nFreeze := 5 и при попытке ставить фокус на 6-ю переставляем на 7-ю, или оставляем на 5-ой ?
Мой вариант (на примере APP_OOPCOLUMNS) только по цвету
 
If Empty(aColors) .or. ! HB_ISARRAY(aColors)
aColors := {}
AAdd(aColors, { CLR_FOCUSB, { |a,nc,ob| If( ob:nCell == nc, ;
-CLR_HRED, If( nc > 5, ;
{RGB(220, 220, 220), RGB(220, 220, 220)}, -RGB(128,225,225) ) ) } } )
EndIf

DEFINE TBROWSE &cName OBJ oBrw AT nY, nX ALIAS ALIAS() WIDTH nW HEIGHT nH CELL ;
COLORS aColors
...
:nFreeze := 5
:lLockFreeze := .T.
...

С Игорем согласен в плане навигации. Можно исп. :bChange и oCol:bGotFocus ля установки колонки

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




Пост N: 1666
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.04.20 14:35. Заголовок: SergKis пишет: Не о..


SergKis пишет:

 цитата:
Не очень понял с 6-ой колонкой. При скролинге экрана она одна заморожена в 6-ой позиции, а колонки меняются с 1 по 5 и далее с 7-ой ?


Шестая колонка должна быть заморожена, и должно быть движение курсора только с первой по пятую колонку. Всего в таблице находится шесть колонок
Как я понимаю, надо правильно установить блок кода oCol:bGotFocus по совету Игоря: если колонка больше 5, то вернуть 5

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




Пост N: 1539
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.04.20 15:18. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Как я понимаю, надо правильно установить блок кода oCol:bGotFocus по совету Игоря: если колонка больше 5, то вернуть 5



самое простое в данной ситуации
 
oBrw:bOnDraw := { || if( oBrw:nCell > 5, oBrw:GoLeft(), nil) }


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3115
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.20 15:40. Заголовок: Haz пишет самое прос..


Haz пишет
 цитата:
самое простое в данной ситуации


Согласен, :bOnDraw, это самое простое. Только, если колонок больше 6, то лучше так
:bOnDraw := { |ob| if( ob:nCell > 5, ( ob:nCell := 5, ob:DrawSelect() ), nil) }

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3116
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.20 15:55. Заголовок: PS Можно без :bOnDra..


PS
Можно без :bOnDraw, используя :nFreeze
 
AAdd(aColors, { CLR_FOCUSB, { |a,nc,ob| If( ob:nCell == nc, ;
-CLR_WHITE, If( nc > 5, ;
{RGB(220, 220, 220), RGB(220, 220, 220)}, -RGB(128,225,225) ) ) } } )
...
:nFreeze := 5
:lLockFreeze := .T.
...

т.е. фокус на колонке 6 всегда и цвет курсора как фона тсб

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




Пост N: 1667
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.04.20 17:28. Заголовок: SergKis пишет: фоку..


SergKis пишет:

 цитата:
фокус на колонке 6 всегда и цвет курсора как фона тсб

Спасибо, в примере из папки APP_OOPCOLUMNS получилось сделать непрерывный курсор с 1-й по 5-ю колонку, используя :nFreeze.
А вот при работе с массивом такой курсор не виден.
Контрольный пример - ниже.
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3117
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.20 18:56. Заголовок: gfilatov2002 пишет А..


gfilatov2002 пишет
 цитата:
А вот при работе с массивом такой курсор не виден.


Курсор раотает, только он забивается установками :SetColor(...), если добавить
 
oGrid_Fases:SetColor( { 2 }, { { RGB_COLESCURA,RGB_COLCLARA } },2 )

oGrid_Fases:SetColor( { 6 }, { { |a,nc,ob| If( ob:nCell == nc, -CLR_HRED, -RGB(128,225,225) ) } } )

то -CLR_HRED будет виден

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3118
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.04.20 19:25. Заголовок: PS Убрал все установ..


PS
Убрал все установки цвета в примере, оставил только
oGrid_Fases:SetColor( { 6 }, { { |a,nc,ob| If( ob:nCell == nc, -CLR_HRED, -RGB(128,225,225) ) } } )
-CLR_HRED есть
-RGB(128,225,225) нет
похоже надо разбираться

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3120
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.20 13:52. Заголовок: SergKis пишет похоже..


SergKis пишет
 цитата:
похоже надо разбираться


У меня получилась такая правка (hmg 19.09 версия)
 
METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse
...
If lNoLite
nClrFore := ::GetValProp( oColumn:nClrFocuFore, nClrText, nJ, ::nAt )
nClrBack := ::GetValProp( oColumn:nClrFocuBack, nClrPane, nJ, ::nAt )

nCursor := 0

If ValType( nClrBack ) == "N" .and. nClrBack < 0
nClrBack := -nClrBack
// nClrBack := ::GetValProp( oColumn:nClrBack, nClrPane, nJ, ::nAt )
EndIf

Else
...

С отрицательным nClrBack возможны варианты (строка в комментарии)
В примере, добавляем
 
oGrid_Fases:SetColor( { 2 }, { { RGB_COLESCURA,RGB_COLCLARA } },2 )
oGrid_Fases:SetColor( { 6 }, { { |a,nc,ob| If( ob:nCell == nc, -CLR_HRED, -RGB(128,225,225) ) } } )

oGrid_Fases:hBmpCursor := aBmp[1]


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6613
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.04.20 14:48. Заголовок: А итоговый пример бу..


А итоговый пример будет ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3121
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.04.20 15:02. Заголовок: Andrey пишет А итого..


Andrey пишет
 цитата:
А итоговый пример будет ?


gfilatov2002 пишет
 цитата:
Контрольный пример - ниже.
Скрытый текст


См. пост 1667 выше

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




Пост N: 1670
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.04.20 16:13. Заголовок: SergKis пишет: У ме..


SergKis пишет:

 цитата:
У меня получилась такая правка


Да, после этой правки заработало и с массивом.
Благодарю за помощь

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

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