Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#16: 2012-03-18 00:40:24 ЛС | профиль | цитата
nesco писал(а):
Еще вариант -- использовать DocumentTemplate с новым компонентом PC_TextParametrs

Напомню, что компонент делался специально для упрощения работы с шаблонами документов при их использовании в качестве пользовательского интерфейса. Не зря я попросил nesco добавить туда doEnum, перебором и анализом координат по onMouse через Rect можно достаточно легко контролировать "нажатия" на все текстовые элементы шаблона. Жаль не получилось с другими элементами типа фигур и картинок, если не ошибаюсь, их не так просто перечислить с атрибутами.
карма: 1

0
Ответов: 355
Рейтинг: 2
#17: 2012-03-18 00:56:00 ЛС | профиль | цитата
Так что мне нужно? Что-то вы тут много чего написали всего.. какой выход из моей ситуации?
карма: 1

1
Голосовали:Леонид
Ответов: 3889
Рейтинг: 362
#18: 2012-03-18 01:01:48 ЛС | профиль | цитата
nickware писал(а):
Что-то вы тут много чего написали всего.. какой выход из моей ситуации?

Мы единственные, кто тут что-то писали в направлении выхода из ситуации. Вам же осталось написать, собственно, схему. Мы более чем детально ответили на поставленные вопросы. Рисуйте надписи на картинках, отслеживайте мышь получив событие нажатия от того элемента, на котором, собственно, картинка находится, зная координаты и размеры каждой надписи узнать место нажатия настолько просто, что не имеет смысла делать схему за Вас.
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#19: 2012-03-18 01:01:52 ЛС | профиль | цитата
nickware писал(а):
Так что мне нужно? Что-то вы тут много чего написали всего.. какой выход из моей ситуации?

Какой настырный. На, как вариант. Это то, о чем я говорил

code_27209.txt

Собственно, описание формата строки параметров дано здесь -- PC_TextParameters
В StrList можешь свои координаты прописать, если не хочешь использовать DocumentTemplate, и все выкинуть до StrList-a


карма: 22

0
файлы: 1code_27209.txt [3.9KB] [312]
Ответов: 3889
Рейтинг: 362
#20: 2012-03-18 01:19:53 ЛС | профиль | цитата
nesco, Кстати, интересный элемент - отслеживание совпадений по списку. Мы ему список координат и размеров, плюс координаты для поиска в списке, он нам - номер строки (индекс, начиная с 0), в которой описана первая фигура, в которую попала искомая точка. Для начала с прямоугольниками такое можно реализовать. Этакий RectEx В играх и самописных интерфейсах будет хитом, сэкономит народу кучу логики.
------------ Дoбавленo в 01.19:
Можно делать сложные вложенные интерфейсы. Например, сперва по списку крупных областей выясняем в какую панель на скине ткнули мышкой. Потом - в какую кнопку на этой панели. При этом она может быть полностью нарисована самостоятельно или быть одной большой картинкой из ресурсов. То же самое на штатных элементах так же реализуется, но не будет таким гибким и быстрым. Скины приложений на HiAsm будут выглядеть как списки координат и несколько картинок. Чувствую, расплодится скинованых программ масса, может даже кто сообразит редактор простейший сделать.
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#21: 2012-03-18 01:28:11 ЛС | профиль | цитата
1nd1g0, концепция интересная, но надо бы систематизировать понятийную составляющую на уровне более конкретных формулировок, желательно с примерами. Честно сказать, я понял только смысл, хотя и сделал простейший вариант на дискрете.
В принципе, есть же формулы принадлежности точки многоугольнику, который можно описать координатами. Надо только выработать синтаксис скрипта с указанием всех координат фигуры
карма: 22

0
Ответов: 3889
Рейтинг: 362
#22: 2012-03-18 01:41:40 ЛС | профиль | цитата
Елемент RectEx принимает сверху список строк либо матрицутаблицу шириной 4 столбца

left0,top0,width0,height0
left1,top1,width1,height1
...
А так же принимает две координаты: X, Y.
Его задача найти первую строку, в которой left <=X <= left+width, top <= Y <= top+height и выдать её номер.
------------ Дoбавленo в 01.41:
Дальше человек IndexToChannel предпринимает действия, соответствующие этой фигуре, или из другого списка получает по индексу данные, или обрабатывает "перетаскивание" её (фигуры), или ...
карма: 1

1
Голосовали:Леонид
Разработчик
Ответов: 26170
Рейтинг: 2127
#23: 2012-03-18 01:50:03 ЛС | профиль | цитата
1nd1g0 писал(а):
Елемент RectEx

А почему именно RectEx, тогда уж лучше PointInCoordinate
------------ Дoбавленo в 01.50:
1nd1g0 писал(а):
Его задача найти первую строку, в которой left <=X <= left+width, top <= Y <= top+height и выдать её номер

Те то, что я сделал сейчас на дискрете, ты предлагаешь засунуть в компонент
карма: 22

0
Ответов: 3889
Рейтинг: 362
#24: 2012-03-18 01:50:30 ЛС | профиль | цитата
Не трудно догадаться, что у этого элемента есть "недокументированная" функция - поиск и сравнение по списку любых целых чисел. Комбинируя координаты и размерности числом 0 можно провернуть такие логические трюки, которые ранее можно было делать перебором массивовсписков и кучей логики.
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#25: 2012-03-18 01:56:33 ЛС | профиль | цитата
А ведь такой компонент для одной точки уже есть -- PointInRect, а я про него и забыл совсем
карма: 22

0
Ответов: 3889
Рейтинг: 362
#26: 2012-03-18 02:03:00 ЛС | профиль | цитата
nesco писал(а):
то, что я сделал сейчас на дискрете, ты предлагаешь засунуть в компонент

По сути - да, можно ещё улучшить простейшей оптимизацией поиска. Уж слишком сложная схема получается на дискретных компонентах, а при усложнении логики или добавлении вложенности она станет ешё страшнее.
nesco писал(а):
А почему именно RectEx, тогда уж лучше PointInCoordinate

Я ошибся, естественно, речь о PointInRectEx
------------ Дoбавленo в 02.03:
nesco писал(а):
А ведь такой компонент для одной точки уже есть -- PointInRect , а я про него и забыл совсем

Потому и Ex - в нём как раз не хватало работы со списком, и у него избыточность - работа с координатами уже в формате Y*65536+X, требуется дополнительный перевод, а он разделяет их потом , и (ЕМНИП) нет поддержки отрицательных координат, а они не так редки.
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#27: 2012-03-18 02:05:04 ЛС | профиль | цитата
На компоненте PointInRect получилось не проще, чем на дискрете



Add(MainForm,4411517,49,112)
{
Width=701
Height=507
Name="form"
Position=1
Point(onPaint)
Point(MouseX)
Point(MouseY)
Point(onMouseDown)
link(onCreate,13462110:doTimer,[(128,132)(128,188)])
link(onPaint,279301:doDraw,[])
link(onMouseDown,15634372:doEnum,[(107,146)(107,265)])
}
Add(PC_TextParameters,14690565,273,182)
{
Document="dt_01"
Point(doEnum)
Point(onEnum)
link(onSet,9206212:doRedraw,[(327,188)(327,153)])
link(Parameters,15167980:Text,[])
link(onEnum,15828443:doSplit,[])
}
Add(DocumentTemplate,279301,175,133)
{
DrawSource=2
Name="dt_01"
}
BEGIN_SDK
Add(Print_Text,9200955,35,42)
{
Name="t_01"
X=38
Y=45
Width=150
Height=17
Vertical=1
Horizontal=0
Left=0
Top=0
Right=0
Bottom=0
}
Add(Print_Text,9568590,196,42)
{
Name="t_02"
X=199
Y=45
Width=150
Height=17
Vertical=1
Horizontal=0
Left=0
Top=0
Right=0
Bottom=0
}
Add(Print_Text,14996159,357,42)
{
Name="t_03"
X=360
Y=45
Width=150
Height=17
Vertical=1
Horizontal=0
Left=0
Top=0
Right=0
Bottom=0
}
Add(Print_Text,1720598,-3,161)
{
Y=164
Width=141
Height=17
}
END_SDK
Add(RedrawManager,9206212,350,147)
{
ControlManager="form"
EraseMode=0
}
Add(VisualStrings,15167980,273,56)
{
Lines=#56:t_01|1111111111|0,0,,30|Arial,12,3,128,1|1,,255|1|0,0|10|40:t_02|2222222222|100,50,,30||1,,255|1|1,1|46:t_03|3333333333|200,100,,30||1,,255|1|2,2|,,10|
Width=305
Height=74
}
Add(Timer,13462110,175,182)
{
Interval=50
Enable=1
AutoStop=1
link(onTimer,12956816:doEvent1,[])
}
Add(Hub,12956816,224,182)
{
link(onEvent1,14690565:doSet,[])
link(onEvent2,14690565:doEnum,[])
}
Add(MultiStrData,15828443,350,189)
{
Char="|"
From=2
Count=1
link(onPart1,10633605:doAdd,[])
}
Add(MultiStrPart,6603544,490,259)
{
Char=","
Count=4
link(onSplit,16442048:doCheck,[(536,265)(536,245)(401,245)(401,454)])
}
Add(StrList,10633605,406,189)
{
}
Add(ArrayEnum,15634372,420,259)
{
link(onItem,6603544:doSplit,[])
link(Array,10633605:Array,[])
}
Add(DoData,5521274,539,448)
{
link(onEventData,14696354:doMessage,[])
link(Data,15634372:Index,[(545,322)(433,322)])
}
Add(Message,14696354,595,448)
{
}
Add(PointInRect,16442048,483,448)
{
Point2AsOffset=0
link(onTrue,5521274:doData,[])
link(Point,3069242:Point,[(489,440)(461,440)])
link(RPoint1,2238111:Point,[])
link(RPoint2,15382540:Point,[(503,436)(510,436)])
}
Add(PointXY,3069242,455,392)
{
link(X,4411517:MouseX,[(461,373)(55,373)])
link(Y,4411517:MouseY,[(468,367)(62,367)])
}
Add(PointXY,2238111,490,336)
{
link(X,6603544:Part1,[])
link(Y,6603544:Part2,[])
}
Add(PointXY,15382540,504,392)
{
link(X,6603544:Part3,[])
link(Y,6603544:Part4,[])
}

карма: 22

0
Ответов: 3889
Рейтинг: 362
#28: 2012-03-18 02:07:29 ЛС | профиль | цитата
nesco писал(а):
получилось не проще, чем на дискрете

Так о чём и речь. Не такая редкая задача. Меньше 9 компонентов сделать трудно. Можно, конечно, основную логику сделать на одном MathParse и переборе списка, но...
карма: 1

0
Разработчик
Ответов: 26170
Рейтинг: 2127
#29: 2012-03-18 02:19:54 ЛС | профиль | цитата
1nd1g0 писал(а):
Меньше 9 компонентов сделать трудно

На 8-ми, включая список (я упростил схему, совсем забыл про возможность указания смещения). А со списком получится на двух, или на одном, если список статический
карма: 22

0
Ответов: 3889
Рейтинг: 362
#30: 2012-03-18 02:39:58 ЛС | профиль | цитата
Лично мне нравится DocumentTemplate. С PC_TextParameters и PointInRectEx (PointInRects) на нём можно делать интересные интерфейсные решения, даже визуальные редакторы шаблонов. Жаль перечислять можно только текстовые блоки. А то брали бы мышкой фигуры и картинки, растягивали их прямо в приложении и отправляли на печать или сохраняли картинку (тот же редактор демотиваторов местный, но с нормальным WYSIWYG интерфейсом реализуется простейшим методом при таком подходе). Наконец бухгалтер сможет в Вашей программе передвинуть поле на бланке куда ему нужно мышкой
------------ Дoбавленo в 02.39:
А любителям делать свой HuAsm на HiAsm какой был бы подарок, подумать только. Все иконки рисовались бы в шаблоне, если бы их можно было двигать и отслеживать тыки мышкой по ним
карма: 1

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