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

Откуда:
Сообщений: 528
Уважаемые коллеги!
Есть ПБ10, МС2003.
В поле ДВ, раздел Position->
есть BAND
FOREGROUND
BACKGROUND.
ЕСли нажать правой клавишей мыши на поле то имеем-
bring TO BACK
BRING TO FRONT.
Экспериментально(так как не нашел описания) обнаружено что FOREGROUND/BACKGROUND позволяют гонять поле по всему ДВ. BAND позволяет двигаться внутри той BAND в кот находится поле(хотя в run time пренеприятнейшим образом поле из detail band попадало header band.
Вычисление координат поля в BAND считается относительно строки а в FOREGROUND абсолютные координаты.
ВОПРОС
1.Правильно ли я понимаю этот механизм?
2.как понимать bring TO BACK /BRING TO FRONT?
3.как вычислять FOREGROUND/BACKGROUND координаты объекта(прямоугольника) чтобы попадать в ЛЮБУЮ строку detail band ?
НУЖНО помещать в любую строку detail band неопределенное количество цветных прямоугольников произвольной длины и ширины.
20 янв 06, 11:23    [2272211]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 849
1. все правильно
2. bting to back/front это Z-order обьектов внутри одного бенда. т.е. если сделать to front на обьекте который находится в background бенде то он становится выше всех кото в том-же бенде.

3. точного механизма нет. надо прибавлять height от всех хедеров и всех строк чтобы получить абсолютную Y координату строки. (хотя может я ошибаюсь но для версии 7 мы делали так)
20 янв 06, 12:19    [2272559]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Непонятно что bring to front /send to back не меняет layer(band, foreground, background). Я еле еле понял layer, а как осмыслить bring to front /send не понимаю. Где это описано?
Должны ж быть какие то функции по определению высоты какогото бэнда! А там можно и считать высоту строк.
20 янв 06, 12:38    [2272677]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
автор
Я еле еле понял layer, а как осмыслить bring to front /send не понимаю. Где это описано?

А что здесь понимать? Контролы должны быть отрисованы в каком-то порядке. Если они не перекрываются, то визуально этот порядок не имеет значения, а если перекрываются - то имеет (кто кого будет перекрывать). Вот эти самые bring to front /send и меняют этот порядок. В Windows используется аналогичный подход.
Найти можно, например, в описании BringToTop(...)
20 янв 06, 14:02    [2273239]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Локшин Марк
автор
Я еле еле понял layer, а как осмыслить bring to front /send не понимаю. Где это описано?

А что здесь понимать? Контролы должны быть отрисованы в каком-то порядке. Если они не перекрываются, то визуально этот порядок не имеет значения, а если перекрываются - то имеет (кто кого будет перекрывать). Вот эти самые bring to front /send и меняют этот порядок. В Windows используется аналогичный подход.
Найти можно, например, в описании BringToTop(...)

Согласен!
Но теперь хочется понять взаимодействие этого механизма с LAYER <-> BAND/foreground/background. Или они совсем не связаны?
20 янв 06, 15:15    [2273713]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
sboyko
Но теперь хочется понять взаимодействие этого механизма с LAYER <-> BAND/foreground/background. Или они совсем не связаны?

Нет, не связаны.
20 янв 06, 15:57    [2273911]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
Они действуют в пределах слоя.
20 янв 06, 16:02    [2273942]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Остался совсем один маленький вопрос-
как все же пересчитать из BAND системы координат в систему FOREGROUND?
20 янв 06, 16:18    [2274018]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 849
function integer of_getdwlinepos (datawindow ad_dwo, long al_line, string as_dwoname)

long ll_line
int li_Y
int li_index
int li_rowheight
int li_header1height
int li_header2height
int li_next_line

ll_line = long(ad_dwo.describe("DataWindow.FirstRowOnPage"))
li_Y = integer(ad_dwo.Describe("DataWindow.Header.Height"))

li_header1height = integer(ad_dwo.Describe("DataWindow.Header.1.Height"))
if li_header1height > 0 then
	li_next_line = ll_line
	DO WHILE (li_next_line > 0) and (li_next_line <= al_line)
		li_Y += li_header1height
		li_next_line++
		li_next_line = ad_dwo.FindGroupChange(li_next_line, 1)
	LOOP

	li_header2height = integer(ad_dwo.Describe("DataWindow.Header.2.Height"))
	if li_header2height > 0 then
		li_next_line = ll_line
		DO WHILE (li_next_line > 0) and (li_next_line <= al_line)
			li_Y += li_header2height
			li_next_line++
			li_next_line = ad_dwo.FindGroupChange(li_next_line, 2)
		LOOP
	end if
end if

FOR li_index = ll_line TO al_line - 1 
	li_rowheight = long(ad_dwo.Describe("evaluate('RowHeight()'," + string(li_index) + ")"))
	li_Y += li_rowheight
NEXT

li_Y += long(ad_dwo.Describe(as_dwoname + ".Y")) + (long(ad_dwo.Describe(as_dwoname + ".height")) / 2)
return li_y
20 янв 06, 19:32    [2274766]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 849
но в этом примере нет футера групп
20 янв 06, 19:44    [2274786]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
2 Dmitry
Большое спасибо за пример! Буду изучать!
Пример самодостаточен или там где то есть грабли?
22 янв 06, 13:12    [2276328]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 849
там нет просчета футера груп и не тредполагается более 2-х групп.
(у нас футеры групп просто не используются)

для ускорения (если у вас статическая высота строк) можно вместо последнего цикла поставить detail.height * (al_line - 1)

а так этот алгоритм работал.
23 янв 06, 11:19    [2277326]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
2 Dmitry
большое спасибо
23 янв 06, 21:41    [2279845]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
2 Dmitry

Ура" Работает!
Спасибо.
Сразу возник след.вопрос-
аппетит приходит ...
как сделать в run-time прямоугольники в строках ДВ, похожие на поля в ДВ, которые можно растягивать, если тянуть за края этого поля. То есть не только размещать прямоугольники внутри ДВ а как в DESIGN работать с этими прямоугольниками. Работать - чтобы оператор мог растягивать прямоугольники и перемещать?
Если вы конечно этим занимались!
24 янв 06, 12:31    [2281352]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
sboyko
как сделать в run-time прямоугольники в строках ДВ, похожие на поля в ДВ, которые можно растягивать, если тянуть за края этого поля. То есть не только размещать прямоугольники внутри ДВ а как в DESIGN работать с этими прямоугольниками. Работать - чтобы оператор мог растягивать прямоугольники и перемещать?

Свойства:
Moveable - двигать,
Resizeable - изменять размер
можно вручную обрабатывать нажатие и отпускание клавиши мыши...
24 янв 06, 12:50    [2281480]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Локшин Марк
sboyko
как сделать в run-time прямоугольники в строках ДВ, похожие на поля в ДВ, которые можно растягивать, если тянуть за края этого поля. То есть не только размещать прямоугольники внутри ДВ а как в DESIGN работать с этими прямоугольниками. Работать - чтобы оператор мог растягивать прямоугольники и перемещать?

Свойства:
Moveable - двигать,
Resizeable - изменять размер
можно вручную обрабатывать нажатие и отпускание клавиши мыши...

Это понятно в принципе(как сделать пока не знаю). Основной вопрос философии - как зацепиться за края прямоугольника. В обычной жизни - курсор на них(краях) меняется на 2 параллельные полоски. Как это проделать?
24 янв 06, 14:17    [2282029]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
sboyko
Это понятно в принципе(как сделать пока не знаю). Основной вопрос философии - как зацепиться за края прямоугольника. В обычной жизни - курсор на них(краях) меняется на 2 параллельные полоски. Как это проделать?

Не, ну это, Вы в состоянии прочесть написаное?
Локшин Марк
Свойства:
Moveable - двигать,
Resizeable - изменять размер

Закладка Properites, на ней закладка Position...
24 янв 06, 14:43    [2282125]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
sboyko
В обычной жизни - курсор на них(краях) меняется на 2 параллельные полоски. Как это проделать?

SetPointer ( type )
24 янв 06, 14:46    [2282144]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Локшин Марк
sboyko
Это понятно в принципе(как сделать пока не знаю). Основной вопрос философии - как зацепиться за края прямоугольника. В обычной жизни - курсор на них(краях) меняется на 2 параллельные полоски. Как это проделать?

Не, ну это, Вы в состоянии прочесть написаное?
Локшин Марк
Свойства:
Moveable - двигать,
Resizeable - изменять размер

Закладка Properites, на ней закладка Position...

Дело в том что в строках ДВ динамически создаются полоски с нужной координатой и длиной-которые представляют собой рабочее время водителя а само ДВ - нечто вроде календаря. Задача в том чтобы после указания рейса иметь возможность корректировать его по факту и для будущего улучшенного планирования загрузки водителей. То есть уменьшать планируемые простои.
24 янв 06, 14:51    [2282174]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
автор
Дело в том что в строках ДВ динамически создаются полоски с нужной координатой и длиной-которые представляют собой рабочее время водителя а само ДВ - нечто вроде календаря. Задача в том чтобы после указания рейса иметь возможность корректировать его по факту и для будущего улучшенного планирования загрузки водителей. То есть уменьшать планируемые простои.

Чем вас не устраивает предложенное решение? У Вас в каждой строке должна быть независимая длина этой полоски? Ну так сделайте 2 полоски - одну видимую всегда, кроме текущей строки с нужным размером, а вторую растягиваемую, но видимую только в текущей строке и на rowfocuschanging немного обработать.
Можно самому смотреть где мышь, нажата она или нет, и соотв. изменять координаты и форму курсора.
24 янв 06, 15:00    [2282212]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
2 МАРК
Все устраивает. Теоретическая база ясна. А где зюйд зюйд вест неясно. Указующего пальца не хватает. Кроме всего полоски создаются ДИНАМИЧЕСКИ и их несколько штук в строке. И неясно где события типа OnMouseMove, OnMouseOver и событие пересечения границы.
24 янв 06, 15:07    [2282249]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
sboyko
Все устраивает. Теоретическая база ясна. А где зюйд зюйд вест неясно. Указующего пальца не хватает. Кроме всего полоски создаются ДИНАМИЧЕСКИ и их несколько штук в строке.

То что они создаются динамически, и что их несколько штук на строке - ровным счетом ничего не меняет.
sboyko
И неясно где события типа OnMouseMove, OnMouseOver и событие пересечения границы.

pbm_mousemove
pbm_lbuttondown
pbm_lbuttonup
24 янв 06, 15:21    [2282329]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Локшин Марк
sboyko
Все устраивает. Теоретическая база ясна. А где зюйд зюйд вест неясно. Указующего пальца не хватает. Кроме всего полоски создаются ДИНАМИЧЕСКИ и их несколько штук в строке.

То что они создаются динамически, и что их несколько штук на строке - ровным счетом ничего не меняет.
sboyko
И неясно где события типа OnMouseMove, OnMouseOver и событие пересечения границы.

pbm_mousemove
pbm_lbuttondown
pbm_lbuttonup

Вот это и есть руководящая и направляющая роль ГУРУ в жизни советского человека!
Спасибо Марк!
24 янв 06, 15:28    [2282369]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 849
На самом деле я - бы не создавал полоски динамически. я-бы создал статически в детайле с шириной зависимой от какого-то скрытого поля. и ничего не надо рисовать.
ресайз: по правому краю полоски поставить узкую полосочку с курсором SizeWE!
и менеджить указанные события для этой узкой полоски.
24 янв 06, 19:07    [2283537]     Ответить | Цитировать Сообщить модератору
 Re: Слои  [new]
sboyko
Member

Откуда:
Сообщений: 528
Dmitry.
На самом деле я - бы не создавал полоски динамически. я-бы создал статически в детайле с шириной зависимой от какого-то скрытого поля. и ничего не надо рисовать.
ресайз: по правому краю полоски поставить узкую полосочку с курсором SizeWE!
и менеджить указанные события для этой узкой полоски.

Так поначалу и было. НО.. Колчество полосок заранее неизвестно, значит нужно забить по максимуму. Область видимости календаря-то есть количество дней и точность(1 час, полчаса..) тоже неизвестно. Три дня хотя бы часу - уже 72 часа - 72 Computed fields, плюс 36 полосок выполняемых рейсов - мне кажется что СЛИШКОМ много полей на одну страницу. Нужен неплохой компьютер у клиента. Следующие задачи по оптимизации потребуют доп мощности.
Поэтому я и перешел на динамическое формирование объектов и сразу получил вопросы которые вам и задаю. Работает быстрее но возросли трудности - а опыта такого нет.
25 янв 06, 13:01    [2285782]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить