Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 изменение высоты колонок при autoSize`е  [new]
Дремучий
Member

Откуда:
Сообщений: 122
Хм... то ли день сегодня какой-то неправильный, то ли я клиню по страшному, то ли это проблема реальна...

Ситуация: У меня есть DW (grid). Я подсвечиваю в нем те строки (в BackGround color каждой колонки прописываю что-то типа if( highlight = 1, 16777152, 16777215 )) где не заполнены обязательные поля. Все бы хорошо, но... в общем я вынужден использовать autoSize = true (на detail и на каждой колонке). Результат (с визуальной точки зрения) ужасен! Подсвечивается только то количество строк, которое заполнено данными в каждой конкретной колонке. Решением (вроде бы) является изменение высоты колонки в зависимости от высоты текущей строки... но ведь autoSize = true для каждой колонки (и я не знаю какая колонка будет в данной строке иметь максимальную высоту).

Кто может подсказать как можно решить эту проблему? Требуемый результат - "красивая" (т.е. ровная) подсветка строки по некому условию.
11 ноя 05, 13:56    [2060155]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
AIZ
Member

Откуда: Ташкент, ASBT
Сообщений: 374
Положи во всю длину строки прямоугольник (Send to Back). Задай условие его цвета. Его Height - вычисляемое по высоте Detail - Long(describe('Object.DataWindow.Detail.Height' )). Поля - transparent.
11 ноя 05, 14:30    [2060384]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Ikar
Member

Откуда: Москва
Сообщений: 928
Эх, боюсь ввести в заблуждение, но, кажется, был такой глюк. Боролись так: если после подстветки сделать перерисовку DW ручками - SetRedraw(false) и сразу SetRedraw(true), то подсветка прорисовывется полностью и нормально...
---
С уважением, IKARКартинка с другого сайта.
ikar@ikarhomecenter.ru
IkarHomeCenter
11 ноя 05, 14:57    [2060537]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Дремучий
Member

Откуда:
Сообщений: 122
2 Ikar
Это не помогает... хотя выглядит, конечно, наиболее заманчиво.

AIZ
Положи во всю длину строки прямоугольник (Send to Back). Задай условие его цвета. Его Height - вычисляемое по высоте Detail - Long(describe('Object.DataWindow.Detail.Height' )). Поля - transparent.

Это из рабочего варианта? Если "да", то как решались следующие проблемы
1. Проблема в "выбором строки", т.е. с this.selectRow( currentRow, true ).
2. Long(describe('Object.DataWindow.Detail.Height' )) при autoSize = true (на detail) у меня не работает! Я всегда получаю тот результат, который установлен в painter`е (в моем случае это 72).
11 ноя 05, 15:58    [2060991]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
AIZ
Положи во всю длину строки прямоугольник (Send to Back). Задай условие его цвета. Его Height - вычисляемое по высоте Detail - Long(describe('Object.DataWindow.Detail.Height' )). Поля - transparent.


Во первых - без Object.
Во вторых - все равно не работает. Describe выдает значение выставленное в painter. Для определения высоты detail использовать функцию RowHeight() и никаких Describe.
В третьих - как это вы себе представляете размещение прямоугольника в detail band во всю длину строки в Grid???
11 ноя 05, 16:01    [2061021]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
2 Дремучий
а можно скриншотик или .srd ?
а то я что то не совсем понимаю в чем проблема состоит.
11 ноя 05, 16:11    [2061079]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
AIZ
Member

Откуда: Ташкент, ASBT
Сообщений: 374
C RowHeight() полностью согласен, просто забыл, что использовал именно ееБ а не describe (давно это было). А положить в Grid прямоугольник во всю длину строки не проблема. Только что еще раз проверил
11 ноя 05, 16:12    [2061087]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
AIZ
Member

Откуда: Ташкент, ASBT
Сообщений: 374
Ну, а что касается подсветки прямоугольника, то
If(CurrentRow() = GetRow(),RGB(150,200,250),Long(describe("DataWindow.Color")))
в Brush Color
11 ноя 05, 16:22    [2061159]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Дремучий
Member

Откуда:
Сообщений: 122
Это исходная проблема

К сообщению приложен файл. Размер - 0Kb
11 ноя 05, 16:37    [2061265]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Дремучий
Member

Откуда:
Сообщений: 122
А это проблема с прямоугольником и "выбором строки", т.е. с this.selectRow( currentRow, true ).

К сообщению приложен файл. Размер - 0Kb
11 ноя 05, 16:41    [2061286]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Nikulitsa A.
Guest
Дремучий
Ситуация: У меня есть DW (grid). Я подсвечиваю в нем те строки (в BackGround color каждой колонки прописываю что-то типа if( highlight = 1, 16777152, 16777215 )) где не заполнены обязательные поля.

Если необходимо подсвечивать всю строку, то свойство Background надо устанавливать для Detail, а не для отдельных колонок.
P.S. Только фоновый цвет полей поставить Transparent
11 ноя 05, 18:16    [2061668]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
White Owl
Member

Откуда:
Сообщений: 12585
Nikulitsa A.
Дремучий
Ситуация: У меня есть DW (grid). Я подсвечиваю в нем те строки (в BackGround color каждой колонки прописываю что-то типа if( highlight = 1, 16777152, 16777215 )) где не заполнены обязательные поля.

Если необходимо подсвечивать всю строку, то свойство Background надо устанавливать для Detail, а не для отдельных колонок.
P.S. Только фоновый цвет полей поставить Transparent

Фоновый цвет полей тоже надо красить. Иначе можно получить черные прямоугольники вместо полей.
Цвет фона в Detail считается по формуле и на строке есть редактируемые поля с прозрачным фоном. Начинаешь редактировать одно поле, все остальные редактируемые поля в этой строке чернеют. Переходишь на другую строку - цвет восстанавливается. Лечится запретом на прозрачный фон :)
11 ноя 05, 18:37    [2061725]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
Дремучий
А это проблема с прямоугольником и "выбором строки", т.е. с this.selectRow( currentRow, true ).

Странно... selected row должна выделяться системными highlight text/background и что-то там цветом выделять бесполезно. разве что зюку какую повесить в первой колонке с Visible expression = if ( isSelected ( getrow() ) , if ( <надо выделить> , 1 , 0 ) , 0 )
11 ноя 05, 19:17    [2061833]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Дремучий
Member

Откуда:
Сообщений: 122
В общем я решил свою проблему. Отталкивался совета:
AIZ
Положи во всю длину строки прямоугольник (Send to Back). Задай условие его цвета. Его Height - вычисляемое по высоте Detail - Long(describe('Object.DataWindow.Detail.Height' )). Поля - transparent.

Сделано было так:
Кидался прямоугольник на всю ширину строки. На Brush Color вешалось:
if( CurrentRow() = GetRow(), RGB(0, 0, 96), if( highlight = 1, 16777152, 16777215 ))
на width прямоугольника вешалось (это имхо, очевидно):
long( describe( "{последняя колонка}.width" )) + long( describe( "{последняя колонка}.x" ))
на height прямоугольника вешалось (это имхо, тоже очевидно):
rowHeight() - 8

на каждую колонку для textColor вешалось:
if( CurrentRow() = GetRow(), RGB(255, 255, 255), RGB(0, 0, 0))

Кроме того, везде пришлось отключать (по понятным причинам :() this.selectRow( currentRow, true ). Учитывая, что у нас это прописывалось в базовых объектах ;) пришлось где нужно добавлять this.selectRow( 0, false )

В принципе, проблема решена... но мне решение не нравится. Если есть какое-нибудь иное решение, то мне будет интересно его узнать.
14 ноя 05, 12:16    [2065550]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
ЗоринАндрей
Member

Откуда: Санкт-Петербург
Сообщений: 3004
Дремучий

на width прямоугольника вешалось (это имхо, очевидно):
long( describe( "{последняя колонка}.width" )) + long( describe( "{последняя колонка}.x" ))

Что происходит с прямоугольником при перетаскивании и изменении ширины колонок в гриде?
14 ноя 05, 14:04    [2066161]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Дремучий
Member

Откуда:
Сообщений: 122
ЗоринАндрей
Что происходит с прямоугольником при перетаскивании и изменении ширины колонок в гриде?

Перетаскивания колонок у нас отключено ;). А при изменении ширины все нормально. Работает как должно. :)
Были проблемы с сортировкой по клику на заголовке... но это были проблемы из-за особенностей реализации сортировки и к сабжу это имеет слабое отношение.
14 ноя 05, 18:02    [2067200]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
rcryo
Member

Откуда: Москва
Сообщений: 323
автор
Фоновый цвет полей тоже надо красить. Иначе можно получить черные прямоугольники вместо полей.

ничего такого не встречал. PB9 - 10.2.8100
по заданному вопросу: проблема решается очень просто, как уже писал Nikulitsa A. Все поля в DW прозрачные, а цвет фона по условию:
dw_1.Modify("DataWindow.Detail.Color= 'if( highlight = 1, 16777152, 16777215 )'")
и добавляете в событие rowfocuschanged строку: SetRedraw(True)
на скриншоте поля с авторесайзом: подсвечены четные строки, текущая строка - желтая (тоже по условию)

К сообщению приложен файл. Размер - 0Kb
14 ноя 05, 19:33    [2067555]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
Tea-pot
Member

Откуда: Australia
Сообщений: 16
Ya reshila etu problemu pomestiv "compute field" pozadi togo polya, kotoroe Autosize

I nikakih zamorochek s redraw ne ponadobilos'

 column=(type=char(500) update=yes updatewhereclause=yes name=attrib_text dbname="preinvoice_std_text.attrib_text" )
 column=(type=char(0) updatewhereclause=yes name=compute_0005 dbname="compute_0005" )

column(band=detail id=5 alignment="0" tabsequence=0 border="5" color="33554432" x="1001" y="4" height="56" width="2080" format="[general]" html.valueishtml="0"  name=compute_0005 visible="1" edit.limit=0 edit.case=any edit.focusrectangle=no edit.autoselect=no edit.imemode=0 edit.displayonly=yes  font.face="Arial" font.height="-8" font.weight="400"  font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="1073741824" )

column(band=detail id=3 alignment="0" tabsequence=30 border="5" color="33554432" x="1001" y="4" height="56" width="2080" format="[general]" html.valueishtml="0"  name=attrib_text visible="1" height.autosize=yes edit.limit=0 edit.case=any edit.focusrectangle=no edit.autoselect=yes edit.nilisnull=yes edit.autovscroll=yes edit.imemode=0 edit.vscrollbar=yes  font.face="Arial" font.height="-8" font.weight="400"  font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="1073741824" )

16 ноя 05, 05:40    [2072516]     Ответить | Цитировать Сообщить модератору
 Re: изменение высоты колонок при autoSize`е  [new]
rcryo
Member

Откуда: Москва
Сообщений: 323
как там с работой на PB в австралии?
мейл в профиле
17 ноя 05, 17:36    [2080384]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить