Вверх ↑
Этот топик читают: Гость
Ответов: 1535
Рейтинг: 176
#1: 2013-01-21 10:59:05 ЛС | профиль | цитата
Вообщем, в прилагаемом шаблоне, нужно увеличитьуменьшить всю картинку в точке расположения курсора над этой самой картинкой, при помощи скролла (колесо мыши). Т.е. курсор мыши указывает центр масштабирования картинки. Голову уже сломал.
Add(MainForm,11427165,399,63)
{
Width=652
Height=491
}
Add(ChildPanel,3206379,581,63)
{
}
BEGIN_SDK
Add(EditMulti,10106438,28,21)
{
WorkCount=1
Width=657
Height=508
link(doWork1,8531400:doLoad,[(49,27)(49,76)])
}
Add(Panel,9845587,56,105)
{
Left=75
Top=5
Width=569
Height=449
Color=16711680
BorderWidth=0
BevelInner=0
BevelWidth=0
}
Add(Hub,13203121,238,70)
{
OutCount=3
link(onEvent1,7614620:doLoad,[])
link(onEvent2,3567399:doData,[])
link(onEvent3,4697609:doCalc,[(265,90)(265,168)(187,168)(187,307)])
}
Add(Image,7614620,448,70)
{
Width=570
Height=450
Color=12639424
Point(onMouseDown)
Point(onMouseMove)
Point(onMouseWheel)
Point(doSetFocus)
Point(Width)
Point(Height)
Point(Left)
Point(Top)
Point(Handle)
Point(doWidth)
Point(doHeight)
Point(doLeft)
Point(doTop)
Point(MouseX)
Point(MouseY)
link(onMouseDown,7961584:doMove,[])
link(onMouseMove,7614620:doSetFocus,[(521,90)(521,61)(436,61)(436,90)])
link(onMouseWheel,6410142:doCalc,[(535,97)(535,452)(306,452)(306,370)])
}
Add(MoveWindow,7961584,574,77)
{
link(Handle,7614620:Handle,[(580,65)(547,65)(547,132)(489,132)])
}
Add(Img_Loader,8531400,189,70)
{
Point(ImageWidth)
Point(ImageHeight)
link(onLoad,13203121:doEvent1,[])
}
Add(DoData,3567399,273,77)
{
@Hint=#44:Устанавливаем картинку в исходное положение.|
Data=String(560;440;0;0)
link(onEventData,13334793:doSplit,[(324,83)(324,41)])
AddHint(-122,-46,157,26,@Hint)
}
Add(MT_MultiData,1016511,350,91)
{
Count=4
link(onData1,15003113:doWork2,[])
link(onData2,4348091:doWork2,[])
link(onData3,13090885:doWork2,[])
link(onData4,14056429:doWork2,[])
}
Add(HubEx,13090885,399,105)
{
link(onEvent,7614620:doLeft,[])
}
Add(HubEx,14056429,392,112)
{
link(onEvent,7614620:doTop,[])
}
Add(MultiStrData,13334793,350,35)
{
Count=4
link(onPart1,15003113:doWork1,[(417,41)])
link(onPart2,4348091:doWork1,[(410,48)])
link(onPart3,13090885:doWork1,[(403,55)])
link(onPart4,14056429:doWork1,[(396,62)])
}
Add(HubEx,4348091,406,98)
{
link(onEvent,7614620:doHeight,[])
}
Add(HubEx,15003113,413,91)
{
link(onEvent,7614620:doWidth,[])
}
Add(Math,16498202,413,301)
{
OpType=2
ResultType=0
link(onResult,7699264:doCalc,[])
link(Op2,11734163:Var3,[(426,258)])
}
Add(Math,1268462,420,350)
{
OpType=2
ResultType=0
link(onResult,14759686:doCalc,[])
link(Op2,1399574:Var3,[(433,249)])
}
Add(Hub,4830515,371,301)
{
OutCount=3
link(onEvent1,16498202:doOperation,[])
link(onEvent2,1268462:doOperation,[(403,314)(403,356)])
link(onEvent3,2639226:doAdd,[(393,321)(393,419)])
}
Add(MathParse,7699264,455,301)
{
DataCount=3
MathStr="%3-((%1-%2)/2)"
link(X2,141144:Var2,[(468,271)(461,271)])
link(X3,7614620:Left,[])
}
Add(MathParse,14759686,483,350)
{
DataCount=3
MathStr="%3-((%1-%2)/2)"
link(X2,5536969:Var3,[(496,184)])
link(X3,7614620:Top,[(503,165)(482,165)])
}
Add(MT_AddData,2639226,413,413)
{
Count=4
link(onAdd,1016511:doSeparateMT,[(524,419)(524,154)(338,154)(338,97)])
link(Data1,16498202:Result,[])
link(Data2,1268462:Result,[])
link(Data3,7699264:Result,[(433,394)(461,394)])
link(Data4,14759686:Result,[(440,401)(489,401)])
}
Add(MathParse,6410142,322,364)
{
@Hint=#47:Используем скролл для изменения масштаба +-0.01|
MathStr="((%1>0)*(%2+0.01))+
((%1<0)*(%2-0.01))
"
link(onResult,5195672:doWork3,[(366,370)(366,347)(277,347)])
link(X2,13261770:Value,[])
AddHint(-283,84,200,26,@Hint)
}
Add(Memory,13261770,329,301)
{
link(onData,4830515:doEvent1,[])
}
Add(GetDataEx,1399574,231,244)
{
Angle=3
link(Data,8531400:ImageHeight,[(209,249)])
}
Add(If_else,6420539,287,301)
{
@Hint=#32:Ограничиваем уменьшение масштаба|
Type=4
link(onTrue,13261770:doValue,[])
link(Op2,4697609:Result,[(300,289)(262,289)(262,345)(230,345)])
AddHint(-205,113,158,26,@Hint)
}
Add(MathParse,4697609,224,301)
{
@Hint=#56:Создаем исходный коэффициент вписывающий картинку в окно|
DataCount=4
MathStr="min((%1/%2),(%3/%4))"
link(onResult,5195672:doWork2,[])
link(X1,5536969:Var1,[(230,184)])
link(X2,1399574:Var2,[])
link(X3,141144:Var1,[(244,201)])
link(X4,11734163:Var2,[])
AddHint(-172,79,187,26,@Hint)
}
Add(GetDataEx,11734163,245,253)
{
Angle=3
link(Data,8531400:ImageWidth,[(202,258)])
}
Add(GetDataEx,141144,455,196)
{
link(Data,7614620:Width,[])
}
Add(HubEx,5195672,273,301)
{
link(onEvent,6420539:doCompare,[])
}
Add(GetDataEx,5536969,462,179)
{
link(Data,7614620:Height,[])
}
END_SDK
Add(Button,7450850,448,63)
{
Left=15
Top=15
link(onClick,15336679:doExecute,[])
}
Add(ODialog,15336679,511,63)
{
link(onExecute,3206379:doWork1,[])
}

карма: 1
Не так страшна ошибка, как опасность её не заметить.

1
Голосовали:sintet
Ответов: 8926
Рейтинг: 823
#2: 2013-01-21 15:35:29 ЛС | профиль | цитата
ser_davkin, вот:
code_30134.txt
Масштабирование по центру картинки. Для мыши надо протянуть связи и заменить формулу с "%2/2-(%2/2-%3)*%1" на "%2-(%2-%3)*%1" (убрать деление на два)
[flood]А тех пользователей, которые применяют данные/поток без необходимости, надо тупым серпом наказывать [/flood]
карма: 19

2
файлы: 1code_30134.txt [4.7KB] [660]
Голосовали:ser_davkin, sintet
Ответов: 1535
Рейтинг: 176
#3: 2013-01-21 21:47:58 ЛС | профиль | цитата
Леонид, ага, решение с мышью понятна. Было бы, конечно здорово, если бы точка масштабирования под мышью была бы неподвижна (как вкопанная). Но всё равно, спасибо за помощь.
Леонид писал(а):
применяют данные/поток без необходимости
Объясни подробнее.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 8926
Рейтинг: 823
#4: 2013-01-21 23:21:40 ЛС | профиль | цитата
ser_davkin писал(а):
Объясни подробнее
Математические кубики находятся рядышком с кубиком картинки, дстаточно протянуть четыре связи от них для управления размерами и отступом, так нет, надо сцепить их в МТ поток, протянуть ОДНУ связь, разложить МТ поток -- велика экономия: не четыре линии, а одна, а что на два нехилых компонента больше, *.ехе на несколько килобайт больше и процессор грузится, так это издержки (Ведь именно для этой цели целый раздел в палитре "Кабели"! )
ser_davkin писал(а):
точка масштабирования под мышью была бы неподвижна (как вкопанная).

Проще, удобнее для пользователя и логичнее эту точку в центр передвинуть и масштабировать относительно центра.
карма: 19

0
Ответов: 1535
Рейтинг: 176
#5: 2013-01-21 23:38:29 ЛС | профиль | цитата
Леонид, я тебе в ЛС уже говорил, что картинка состоит из ячеек. Каждая ячейка (256Х256)(уже не 100х100) картинки редактируется отдельно. Чтобы в огромном поле ячеек найти нужную, я отдаляю всё поле (картинку) скроллом, навожу на нужную ячейку курсор мыши, приближаю её, выделяю и редактирую. Вот для чего нужно масштабирование по курсору мыши. Поэтому железный гвоздь здесь не помешал бы.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 8926
Рейтинг: 823
#6: 2013-01-21 23:47:27 ЛС | профиль | цитата
ser_davkin, свят, свят, такие размерные картинки на HiAsm-е редактировать, долго, надо в IC делать со вставками на ассемблере (или поступиться принципом и Фотошоп открыть )
карма: 19

0
Ответов: 1535
Рейтинг: 176
#7: 2013-01-22 09:11:13 ЛС | профиль | цитата
Леонид, да, вроде на процессоре не видно, что он как-то на всё это реагирует. Запас ещё ого-го.
------------ Дoбавленo в 09.11:
Леонид, вот, твоя же схема. Я всего-то там окно просмотра сдвинул к началу координат родительской формы, и масштабирование по курсору стало значительно лучше. Как объяснить такое чудо?
Add(MainForm,11427165,112,63)
{
Width=642
Height=480
}
Add(ChildPanel,3206379,259,63)
{
}
BEGIN_SDK
Add(EditMulti,10106438,28,21)
{
WorkCount=1
Width=531
Height=340
link(doWork1,8531400:doLoad,[(46,27)(46,48)])
}
Add(Panel,9845587,476,119)
{
Width=569
Height=449
Color=16711680
BorderWidth=0
BevelInner=0
BevelWidth=0
Point(Width)
Point(Height)
}
Add(Hub,13203121,105,42)
{
link(onEvent1,7614620:doLoad,[])
link(onEvent2,6563661:doCalc,[(131,55)(131,97)(44,97)(44,139)])
}
Add(Image,7614620,252,42)
{
Left=5
Top=5
Width=560
Height=440
Color=12639424
Point(onMouseDown)
Point(onMouseMove)
Point(onMouseWheel)
Point(doSetFocus)
Point(doWidth)
Point(doHeight)
Point(doLeft)
Point(doTop)
Point(ImageWidth)
Point(ImageHeight)
Point(Left)
Point(Top)
Point(Width)
Point(Height)
Point(Handle)
Point(MouseX)
Point(MouseY)
link(onMouseDown,7961584:doMove,[])
link(onMouseMove,7614620:doSetFocus,[(339,62)(339,29)(243,29)(243,62)])
link(onMouseWheel,6410142:doCalc,[(465,69)(465,352)(44,352)(44,188)])
}
Add(MoveWindow,7961584,476,49)
{
link(Handle,7614620:Handle,[(482,37)(394,37)(394,106)(307,106)])
}
Add(Img_Loader,8531400,56,42)
{
link(onLoad,13203121:doEvent1,[])
}
Add(Math,16498202,238,189)
{
OpType=2
ResultType=0
PColor(Op2,16733695)
link(onResult,5558418:Wire1,[])
link(Op2,9514427:Var2,[(251,155)(265,155)])
}
Add(Math,1268462,280,196)
{
OpType=2
ResultType=0
link(onResult,5558418:Wire2,[])
link(Op2,16575302:Var2,[(293,158)(272,158)])
}
Add(Hub,4830515,210,189)
{
OutCount=4
link(onEvent1,16498202:doOperation,[])
link(onEvent2,1268462:doOperation,[])
link(onEvent3,7699264:doCalc,[])
link(onEvent4,14759686:doCalc,[])
}
Add(MathParse,7699264,336,203)
{
DataCount=3
MathStr="%2-(%2-%3)*%1"
ResultType=0
PColor(X3,16711935)
link(onResult,5558418:Wire3,[])
link(X1,10751850:Var2,[])
link(X2,7614620:MouseX,[(349,126)(314,126)])
link(X3,7614620:Left,[(356,149)(279,149)])
}
Add(MathParse,14759686,385,210)
{
DataCount=3
MathStr="%2-(%2-%3)*%1"
ResultType=0
PColor(X3,11184640)
link(onResult,5558418:Wire4,[])
link(X1,10751850:Var3,[(391,176)])
link(X2,7614620:MouseY,[(398,121)(321,121)])
link(X3,7614620:Top,[(405,141)(286,141)])
}
Add(MathParse,6410142,56,182)
{
@Hint=#47:Используем скролл для изменения масштаба +-0.01|
MathStr="((%1>0)*(%2+0.01))+
(((%1<0)and(%2>0.0))*(%2-0.01))
"
Default=1
link(onResult,14657662:doWork2,[])
link(X2,9462090:Var1,[(69,174)(95,174)(95,245)])
AddHint(47,132,200,26,@Hint)
}
Add(Hub,7146596,112,182)
{
link(onEvent1,9344723:doWork2,[])
link(onEvent2,4830515:doEvent1,[])
}
Add(GetDataEx,10751850,336,171)
{
Angle=3
link(Data,7269437:Result,[(323,176)(323,302)(167,302)])
}
Add(MemFifo,8753638,161,203)
{
link(onData,7269437:doOperation,[(200,209)(200,250)(149,250)(149,265)])
}
Add(MathParse,6563661,56,133)
{
DataCount=4
MathStr="min(%2/%1 , %4/%3)"
link(onResult,7262469:doEvent1,[])
link(X1,9514427:Var1,[(62,103)])
link(X2,7614620:Width,[(69,110)(293,110)])
link(X3,16575302:Var1,[(76,117)])
link(X4,7614620:Height,[(83,124)(300,124)])
}
Add(GetDataEx,9514427,259,98)
{
PColor(Data,16733695)
link(Data,7614620:ImageWidth,[])
}
Add(GetDataEx,16575302,266,112)
{
link(Data,7614620:ImageHeight,[])
}
Add(Math,7269437,161,259)
{
OpType=3
link(Op1,9462090:Var2,[])
link(Op2,8753638:Value2,[])
}
Add(GetDataEx,9462090,161,240)
{
link(Data,8753638:Value1,[])
}
Add(HubEx,9344723,144,182)
{
Angle=1
link(onEvent,8753638:doValue,[(148,209)])
}
Add(Hub,7262469,112,133)
{
link(onEvent1,9344723:doWork1,[(148,139)])
link(onEvent2,14657662:doWork1,[(138,146)(138,166)(102,166)])
}
Add(HubEx,14657662,98,182)
{
link(onEvent,7146596:doEvent1,[])
}
Add(CableEvent,11282654,217,63)
{
Count=4
link(Wire1,7614620:doWidth,[])
link(Wire2,7614620:doHeight,[])
link(Wire3,7614620:doLeft,[])
link(Wire4,7614620:doTop,[])
}
Add(CableWork,5558418,434,189)
{
Count=4
link(Cable,11282654:Cable,[(453,195)(453,132)(205,132)(205,69)])
}
END_SDK
Add(Button,7450850,161,63)
{
Left=575
Top=5
Height=40
link(onClick,15336679:doExecute,[])
}
Add(ODialog,15336679,210,63)
{
StartDir="C:UsersLAPictures"
FileName="DSC01692.JPG"
link(onExecute,3206379:doWork1,[])
}
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 8926
Рейтинг: 823
#8: 2013-01-22 10:34:20 ЛС | профиль | цитата
ser_davkin, разумного объяснения не нашёл даже выведя всякие координаты для посмотреть
Заменил формулу масштаба со сложения на умножение.
code_30147.txt
карма: 19

0
файлы: 1code_30147.txt [5.7KB] [655]
Ответов: 1535
Рейтинг: 176
#9: 2013-01-22 12:21:09 ЛС | профиль | цитата
Леонид писал(а):
разумного объяснения не нашёл
Леонид, похоже, эта фича распространяется не только на родителя, но на глобального родителя - экран. Сдвинь форму в крайний правый нижний угол экрана и проверь зум. Я уже ожидаю ответ от nesco, мол, на черта оно мне нужно...
А, правильный зум мне очень нужен.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Разработчик
Ответов: 26153
Рейтинг: 2127
#10: 2013-01-22 12:37:04 ЛС | профиль | цитата
ser_davkin писал(а):
уже ожидаю ответ от nesco

А я тут вообще причем Я в ваши дела не лезу, а меня уже всуе куда попало
карма: 22

0
Ответов: 1535
Рейтинг: 176
#11: 2013-01-22 12:43:45 ЛС | профиль | цитата
nesco, это подтекст, мол, помоги разобраться. Другого активного разработчика я пока не знаю.(у меня ответов:1001 - как 1000 и одна ночь)
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Разработчик
Ответов: 26153
Рейтинг: 2127
#12: 2013-01-22 12:52:09 ЛС | профиль | цитата
ser_davkin писал(а):
активного разработчика я пока не знаю

А разработчик-то тут причем
Есть какие-то претензии к компонентам
карма: 22

0
Ответов: 1535
Рейтинг: 176
#13: 2013-01-22 13:11:12 ЛС | профиль | цитата
nesco писал(а):
А разработчик-то тут причем
Посмотри своим пытливым умом, что я делаю не так, почему при нулевой глобальной координате формы зум картинки работает правильно, а стоит сдвинуть форму, то всё, пипец. Может есть какое-то альтернативное решение.
nesco писал(а):
Есть какие-то претензии к компонентам
nesco, не знаю, возможно.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Разработчик
Ответов: 26153
Рейтинг: 2127
#14: 2013-01-22 13:32:50 ЛС | профиль | цитата
ser_davkin писал(а):
почему при нулевой глобальной координате формы зум картинки работает, а стоит сдвинуть форму, то всё, пипец

Зум работает, но вот картинка пытается принять нулевые координаты
------------ Дoбавленo в 13.32:
Так что должно быть -- обычное зуммирование при скроллинге мыши, независимо от положения мыши на экране или привязано к координатам мыши
карма: 22

0
Ответов: 1535
Рейтинг: 176
#15: 2013-01-22 13:43:29 ЛС | профиль | цитата
nesco писал(а):
обычное зуммирование при скроллинге мыши, независимо от положения мыши на экране
Там, где курсор расположен над картинкой или над отображаемой зоной (окном просмотра), там и должен быть центр зумма, т.е именно эта точка должна зуммироваться. (повторюсь) При нулевых глобальных координатах формы всё работает так, как и должно работать. Стоит только сдвинуть форму в сторону - зум работает неправильно. С чем это связано не понимаю, возможно где-то сидит баг. Не знаю.
nesco писал(а):
или привязано к координатам мыши
Да.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

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