Вверх ↑
Этот топик читают: Гость
Ответов: 177
Рейтинг: 24
#31: 2015-01-11 15:41:48 ЛС | профиль | цитата
sashaoli писал(а):
code_34896.txt


Спасибо!
------------ Дoбавленo в 15.41:
И вот снова у меня сложности с ChildPanelEx и ToolBarLayout!

Проблема в том что при использовании скролла элементы в сетке перемещаются не ровно, а ступенькой!

Я вижу в чём проблема, запущенный цикл выдаёт параметры для каждого созданного элемента не учитывая наличие и количество колонок, но вот как это поправить не знаю. Хочется чтобы вся группа панелей равномерно скроллилась!

Подскажите как мне быть и в какой стороне искать решение???

Add(MainForm,9267946,77,158)
{
Width=655
Height=407
Point(Width)
Point(onResize)
Point(Height)
link(onResize,11402093:doOperation,[(191,185)(191,334)(30,334)(30,461)])
}
Add(ChildPanelEx,12251538,553,336)
{
}
BEGIN_SDK
Add(EditMultiEx,9328446,21,21)
{
WorkCount=#5:##add|8:##select|5:doTop|
VarCount=#7:##count|6:Height|
Width=454
Height=410
Point(##add)
Point(##count)
Point(##select)
link(doTop,13265667:doTop,[(105,41)(105,160)])
link(Height,13265667:Height,[(34,305)(195,305)])
}
Add(Panel,13265667,189,147)
{
Left=50
Top=3
Width=68
Height=32
Color=255
Layout="parent.hi-hi"
Point(doTop)
Point(Height)
}
END_SDK
Add(Hub,4920542,378,298)
{
link(onEvent1,4521804:doResize,[(403,304)(403,293)])
link(onEvent2,12251538:##add,[(472,311)(472,342)])
}
Add(Timer,14377457,267,298)
{
Interval=15
AutoStop=50
link(onTimer,4920542:doEvent1,[])
}
Add(ToolBarLayout,4521804,553,287)
{
Name="hi-hi"
Space=3
Padding=50
}
Add(For,13104671,287,462)
{
IncludeEnd=1
link(onEvent,3246388:doEvent1,[])
link(End,12251538:##count,[(300,442)(559,442)])
}
Add(Memory,13391711,238,462)
{
link(onData,13104671:doFor,[])
}
Add(Hub,3246388,343,462)
{
link(onEvent1,12251538:##select,[(393,468)(393,349)])
link(onEvent2,13960232:doCalc,[])
}
Add(InfoTip,11880581,28,406)
{
Info=#16:скролл элементов|
Font=[MS Sans Serif,10,0,16711680,1]
Width=519
Height=130
}
Add(MathParse,13960232,406,469)
{
DataCount=3
MathStr="%1 + 30 + %2*%3"
link(onResult,12251538:doTop,[(496,475)(496,356)])
link(X1,13391711:Value,[(412,454)(328,454)(328,506)(244,506)])
link(X3,12251538:Height,[(426,451)(566,451)])
}
Add(ScrollBar,11341662,94,462)
{
Width=20
Height=260
Max=300
Kind=1
Point(doLeft)
Point(doHeight)
link(onPosition,9557966:doOperation,[])
}
Add(Math,11402093,42,455)
{
OpType=1
Op2=60
link(onResult,11341662:doHeight,[(81,461)(81,482)])
link(Op1,9267946:Height,[(48,369)(90,369)])
}
Add(Math,9557966,182,462)
{
OpType=2
Op2=-1
link(onResult,13391711:doValue,[])
}



Пожалуйста не предлагайте использование ChildScrollBox (панели прокрутки), уже пробовала мне она не подходит!
карма: 1

0
Ответов: 8928
Рейтинг: 823
#32: 2015-01-11 16:06:23 ЛС | профиль | цитата
Lora, мудрый Galkov говорил же вам, что в такой ситуации или только Layout, или только самостоятельный расчёт положений и размеров в чём вы и убедились на собственном опыте
карма: 19

0
Ответов: 177
Рейтинг: 24
#33: 2015-01-11 16:32:07 ЛС | профиль | цитата
Леонид писал(а):
Lora, мудрый Galkov говорил же вам, что в такой ситуации или только Layout, или только самостоятельный расчёт положений и размеров в чём вы и убедились на собственном опыте


Использование одного лишь Layout без ChildPanelEx в моей ситуации невозможен, так как конечное значение панелек неизвестно и может кардинально меняться.
Использование ChildPanelEx без Layout (в данном случае ToolBarLayout)тоже не вариант, размер окна меняется и нужно чтобы панельки мостили поле.
Но и без скролла никак, по объективным причинам!!!
Методом исключения остаётся только то что вы и предложили индивидуальный расчёт для каждой панели. Но вот как сделать расчёт? Ведь сама панель не знает в какой колонне она находится и нужно ли ей выстраиваться под предыдущим объектом или нет она не знает! А значит при каждом переустройстве сетки Layout надо подавать панелям данные о их нахождении в сетке! Но как?!

Вот в принципе я понимаю как это сделать теоретически, но воплотить на практике не выходит!
карма: 1

0
Ответов: 2272
Рейтинг: 677
#34: 2015-01-11 17:11:12 ЛС | профиль | цитата
Lora писал(а):
Но как?!
Lora, у каждого интерфейсного элемента есть Handle (нижняя точка). В вкладке Окно есть элементы SizeWindow и PosWindow, которыми можно задать размер и позицию.
Когда произошло: добавление или удаление элемента нужно сделать перерасчет позиций. Если нужно подгонять под размер родительского элемента, то изменить и размеры.
Еще отслеживая изменения родительского элемента (точка onResize), перебираем все дочерние элементы и изменяем позицию и если нужно то и размер.
карма: 11

0
Ответов: 8928
Рейтинг: 823
#35: 2015-01-11 18:35:56 ЛС | профиль | цитата
Lora, алгоритм:
1. Определяем сколько панелек уместится по ширине (располагаемая ширина делить на ширину панелек с учётом просвета -- DIV ), получаем количество колонок;
2. Перебираем панельки с выделением;
3. Номер панельки целочисленно делим на число колонок (MOD), остаток - колонка положения панельки, умножаем на ширину с просветом, прибавляем начальный отступ, получаем отступ слева;
4. Номер панельки целочисленно делим на число колонок (DIV), получаем строку положения панельки, умножаем на высоту с просветом, прибавляем начальный отступ, получаем отступ от верха;
В схеме можно добавить и горизонтальный скрол.
code_34901.txt

карма: 19

1
файлы: 1code_34901.txt [5.4KB] [222]
Голосовали:Lora
Ответов: 177
Рейтинг: 24
#36: 2015-01-11 18:49:47 ЛС | профиль | цитата
Леонид писал(а):
Lora, алгоритм:
1. Определяем сколько панелек уместится по ширине (располагаемая ширина делить на ширину панелек с учётом просвета -- DIV ), получаем количество колонок;


Вот! Я ведь знала что решение где-то тут! Я последние часов 6 только и делала что по всякому высчитывала количество панелек в каждой строке и номер каждой конкретной панельки! И вроде по отдельности всё не сложно и вписывается в элементарные математические действия, а вот в всё вместе у меня никак не хотело работать!
Спасибо большоооое!!!

sla8a писал(а):
Lora, у каждого интерфейсного элемента есть Handle (нижняя точка). В вкладке Окно есть элементы SizeWindow и PosWindow, которыми можно задать размер и позицию.
Когда произошло: добавление или удаление элемента нужно сделать перерасчет позиций. Если нужно подгонять под размер родительского элемента, то изменить и размеры.
Еще отслеживая изменения родительского элемента (точка onResize), перебираем все дочерние элементы и изменяем позицию и если нужно то и размер.


Я это всё понимаю, я просто всё в кучу собрать не могла!
карма: 1

0
36
Сообщение
...
Прикрепленные файлы
(файлы не залиты)