Вверх ↑
Этот топик читают: Гость
Ответов: 2268
Рейтинг: 677
#16: 2017-03-17 20:19:41 ЛС | профиль | цитата
А как насчет такого варианта?
схемка


Add(PaintBox,4771018,476,126)
{
Left=50
Width=347
Height=263
Layout="ver_02"
HeightScale=100
Point(onResize)
link(onResize,5036814:doWork,[])
}
Add(MainForm,12048663,28,84)
{
Width=753
Height=613
Position=1
}
Add(ChildPanel,3707366,77,133)
{
link(onEvent1,11820223:doExecute,[])
link(onEvent2,8895216:doWork,[])
}
BEGIN_SDK
Add(EditMulti,4109492,21,21)
{
EventCount=2
VarCount=1
link(Var1,11335516:Result,[(27,173)(181,173)])
}
Add(Panel,14820532,35,105)
{
Width=50
Height=295
Layout="parent.gor_01"
}
Add(Button,13743590,119,63)
{
Left=5
Top=5
Width=40
Caption="Open"
link(onClick,4109492:onEvent1,[(158,69)(158,27)])
}
Add(ScrollBar,8815610,119,133)
{
Left=15
Top=65
Width=15
Height=170
Max=1000
Min=-1000
Page=100
Kind=1
link(onPosition,11335516:doCalc,[])
}
Add(MathParse,11335516,175,133)
{
DataCount=1
MathStr="10^(-%1/1000)"
Default=1
link(onResult,4109492:onEvent2,[(214,139)(214,34)])
}
Add(Label,5255694,63,56)
{
Left=17
Top=40
Width=14
Height=24
Font=[MS Sans Serif,12,1,0,1]
Caption="+"
}
Add(Label,7447257,70,63)
{
Left=17
Top=235
Width=10
Height=24
Font=[MS Sans Serif,12,1,0,1]
Caption="-"
}
END_SDK
Add(Img_Loader,11153606,217,133)
{
Point(ImageWidth)
Point(ImageHeight)
link(onLoad,16279260:doWork,[])
}
Add(ODialog,11820223,168,133)
{
link(onExecute,11153606:doLoad,[])
}
Add(Hub,8930385,392,133)
{
OutCount=3
link(onEvent1,4771018:doClear,[])
link(onEvent2,12679565:doDraw,[(421,146)(421,398)])
link(onEvent3,4771018:doRefresh,[(464,153)(464,132)])
}
Add(Img_UseScale,10141595,490,273)
{
Mode=1
link(X,16364785:Var2,[])
link(Y,16364785:Var3,[(510,264)])
}
Add(GetDataEx,16364785,497,259)
{
link(Data,3707366:Var1,[(503,239)(83,239)])
}
Add(Img_UseOffset,13565508,490,343)
{
link(AddTransform,10141595:Transform,[])
link(X,3202856:Result,[(503,319)(622,319)])
link(Y,15031258:Result,[(510,332)(629,332)])
}
Add(ScrollBar,2534278,574,161)
{
Left=50
Top=280
Width=345
Layout="ver_02"
link(onPosition,3202856:doOperation,[])
}
Add(ScrollBar,13416213,581,196)
{
Left=400
Width=15
Height=275
Layout="ver_01"
HeightScale=100
Kind=1
link(onPosition,15031258:doOperation,[])
}
Add(LineBreakEx,2117428,665,196)
{
Caption="draw"
}
Add(LineBreakEx,7368562,658,161)
{
Caption="draw"
}
Add(LineBreakEx,16279260,259,133)
{
Caption="draw"
}
Add(LineBreakEx,8895216,119,140)
{
Caption="draw"
}
Add(LineBreakEx,7858792,336,133)
{
Caption="draw"
Type=1
link(OnEvent,8930385:doEvent1,[])
}
Add(Math,3202856,616,161)
{
OpType=2
Op2=-1
link(onResult,7368562:doWork,[])
}
Add(Math,15031258,623,196)
{
OpType=2
Op2=-1
link(onResult,2117428:doWork,[])
}
Add(VBoxLayout,4249892,686,378)
{
Name="ver_01"
Layout="gor_01"
}
Add(HBoxLayout,7581058,602,420)
{
Name="gor_01"
}
Add(LineBreakEx,5036814,518,133)
{
Caption="draw"
}
Add(LayoutSpacer,6993227,686,420)
{
Left=400
Top=280
Width=15
Height=15
Layout="ver_01"
}
Add(VBoxLayout,10213651,644,378)
{
Name="ver_02"
WidthScale=100
Layout="gor_01"
}
Add(Img_AlphaBmp,12679565,476,392)
{
AlphaMode=1
Point(Transform)
link(Bitmap,4771018:Bitmap,[])
link(AlphaBitmap,11153606:Bitmap,[(489,314)(223,314)])
link(Transform,13565508:Transform,[])
}
Поменял только один элемент, искажения изображении нет. Проверьте кому интересно.
карма: 11

0
Ответов: 1536
Рейтинг: 176
#17: 2017-03-17 21:10:01 ЛС | профиль | цитата
sla8a писал(а):
А как насчет такого варианта?

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

0
Ответов: 8926
Рейтинг: 823
#18: 2017-03-17 21:21:56 ЛС | профиль | цитата
sla8a, а у меня альфа-канал, как у Винни-Пуха правильнописание, работает, но хромает, проверить не могу
карма: 19

0
Ответов: 2268
Рейтинг: 677
#19: 2017-03-17 21:53:39 ЛС | профиль | цитата
ser_davkin, к вашему варианту претензий не было. Варианты Леонид-а и 3042 плохи тем, что к загруженной картинке создается еще одна и при увеличении 10-кратная. Это как мне кажется очень "грубо". Когда тестировал элементы трансформации вариант моей схемы работал быстро и без искажения картинки. Но там вроде были измененные элементы. Потом посмотрю, может получится это исправить.

Редактировалось 1 раз(а), последний 2017-03-17 21:54:18
карма: 11

0
Ответов: 9906
Рейтинг: 351
#20: 2017-03-18 11:44:25 ЛС | профиль | цитата
sla8a, как-то неправильно у Вас вертикальный скролл работает (разбираться не стал)

А, вообще-то, Paint был сделан для рисования по другому (Ваша же схема):

Add(PaintBox,4771018,238,252)
{
Left=50
Width=347
Height=263
Layout="ver_02"
HeightScale=100
ClearBeforeDraw=0
Point(onResize)
link(onBeforeDraw,12679565:doDraw,[])
}
Add(ChildPanel,3707366,70,217)
{
link(onEvent1,11820223:doExecute,[(116,223)(116,258)])
link(onEvent2,3888736:doWork2,[])
}
BEGIN_SDK
Add(EditMulti,4109492,21,21)
{
EventCount=2
VarCount=1
link(Var1,11335516:Result,[(27,173)(181,173)])
}
Add(Panel,14820532,35,105)
{
Width=50
Height=295
Layout="parent.gor_01"
}
Add(Button,13743590,119,63)
{
Left=5
Top=5
Width=40
Caption="Open"
link(onClick,4109492:onEvent1,[(158,69)(158,27)])
}
Add(ScrollBar,8815610,119,133)
{
Left=15
Top=65
Width=15
Height=170
Max=1000
Min=-1000
Page=100
Kind=1
link(onPosition,11335516:doCalc,[])
}
Add(MathParse,11335516,175,133)
{
DataCount=1
MathStr="10^(-%1/1000)"
Default=1
link(onResult,4109492:onEvent2,[(214,139)(214,34)])
}
Add(Label,5255694,63,56)
{
Left=17
Top=40
Width=14
Height=24
Font=[MS Sans Serif,12,1,0,1]
Caption="+"
}
Add(Label,7447257,70,63)
{
Left=17
Top=235
Width=10
Height=24
Font=[MS Sans Serif,12,1,0,1]
Caption="-"
}
END_SDK
Add(Img_Loader,11153606,175,252)
{
Point(ImageWidth)
Point(ImageHeight)
link(onLoad,8030080:doWork2,[])
}
Add(ODialog,11820223,126,252)
{
link(onExecute,11153606:doLoad,[])
}
Add(Img_UseScale,10141595,63,280)
{
Mode=1
link(X,16364785:Var2,[])
link(Y,16364785:Var3,[(83,264)])
}
Add(GetDataEx,16364785,70,259)
{
link(Data,3707366:Var1,[])
}
Add(Img_UseOffset,13565508,315,189)
{
link(AddTransform,10141595:Transform,[(321,180)(167,180)(167,320)(69,320)])
link(X,3202856:Result,[])
link(Y,15031258:Result,[])
}
Add(ScrollBar,2534278,238,77)
{
Left=50
Top=280
Width=345
Layout="ver_02"
link(onPosition,3202856:doOperation,[])
}
Add(ScrollBar,13416213,238,133)
{
Left=400
Width=15
Height=275
Layout="ver_01"
HeightScale=100
Kind=1
link(onPosition,15031258:doOperation,[])
}
Add(Math,3202856,322,77)
{
OpType=2
Op2=-1
link(onResult,7190360:doWork1,[(375,83)])
}
Add(Math,15031258,329,133)
{
OpType=2
Op2=-1
link(onResult,7190360:doWork2,[])
}
Add(VBoxLayout,4249892,182,77)
{
Name="ver_01"
Layout="gor_01"
}
Add(HBoxLayout,7581058,70,77)
{
Name="gor_01"
}
Add(LayoutSpacer,6993227,126,133)
{
Left=400
Top=280
Width=15
Height=15
Layout="ver_01"
}
Add(VBoxLayout,10213651,126,77)
{
Name="ver_02"
WidthScale=100
Layout="gor_01"
}
Add(MainForm,6724623,70,133)
{
Width=753
Height=613
Position=1
}
Add(HubEx,8030080,217,252)
{
link(onEvent,4771018:doRefresh,[])
}
Add(HubEx,7190360,371,133)
{
Angle=1
link(onEvent,3888736:doWork3,[(375,230)])
}
Add(HubEx,3888736,217,224)
{
Angle=1
link(onEvent,8030080:doWork1,[])
}
Add(Img_AlphaBmp,12679565,301,252)
{
AlphaMode=1
Point(Transform)
link(Bitmap,4771018:Bitmap,[(307,243)(286,243)(286,292)(244,292)])
link(AlphaBitmap,11153606:Bitmap,[(314,236)(230,236)(230,292)(181,292)])
link(Transform,13565508:Transform,[])
}
Ну и ждем "расследования" на предмет быстродействия. Из интереса
карма: 9

0
Ответов: 2268
Рейтинг: 677
#21: 2017-03-18 21:05:50 ЛС | профиль | цитата
Galkov писал(а):
А, вообще-то, Paint был сделан для рисования по другому (Ваша же схема):

Galkov, это то мне известно. И сделал отрисовку по другому специально. Но раз вы подняли эту тему, то объясните мне вот такой момент.
Возьмем вашу схему и на связь между PaintBox-ом(onBeforeDraw) и Img_AlphaBmp(doDraw) поставим Debug. Запустим приложение и потаскаем мышкой над окном приложения окно Debug-a. Будет видно что срабатывается многократно onBeforeDraw и Img_AlphaBmp каждый раз рисует заново изображение. На моем стареньком компьютере даже заметно торможение. Так вот зачем эта перерисовка нужна, зачем это лишнее нагрузка на процессор.
Мне известно почему происходит событие onBeforeDraw, мне вот только не понятно, зачем мне его использовать, если мне известно что это может вызывать ненужные перерисовки.
Эти два способа отрисовки нужно использовать так:
1. Если рисуется мелочь (после onBeforeDraw нет ничего серьезного), то можно использовать способ из вашей схемы.
2. Если нужно отрисовать что-то сложное (мат расчеты, много графики, большие рисунки(наш случай)), лучше отказаться от 1 способа и использовать способ из моей схемы (очистить, нарисовать, обновить).
Galkov писал(а):
как-то неправильно у Вас вертикальный скролл работает (разбираться не стал)

А это видели?
sla8a писал(а):
Значение скроллов не расчитывал, дело пустяковое тут самое главное в другом.

карма: 11

0
Ответов: 9906
Рейтинг: 351
#22: 2017-03-19 08:21:18 ЛС | профиль | цитата
sla8a писал(а):
Запустим приложение и потаскаем мышкой над окном приложения окно Debug-a. Будет видно что срабатывается многократно onBeforeDraw и Img_AlphaBmp каждый раз рисует заново изображение.

У меня не видно.
Т.е., точно видно, что НЕ срабатывает многократно onBeforeDraw.
Может, потому что 10-ка.

НО, возможно Вы и правы, если уж мыша перерисовку вызывает ....
карма: 9

0
Ответов: 9906
Рейтинг: 351
#23: 2017-03-19 16:55:40 ЛС | профиль | цитата
sla8a писал(а):
А это видели?

Видел.
Но, Вашу математику я не менял, как легко заметить. А все встало на место.
Почему-то ...
карма: 9

0
Ответов: 9906
Рейтинг: 351
#24: 2017-03-19 18:01:41 ЛС | профиль | цитата
Сразу-то не очень внимание обратил, но вот Вам еще одно наблюдение: моя схема (точнее - ВАША в моем исполнении) работает значительно быстрее, чем Ваша (с тем самым Img_AlphaBmp)
Просто наблюдение, почему - не разбирался

Возможно, когда таскаешь ScrollBar, прилетает значительно больше событий, чем с onBeforeDraw
Не подсчитывал.

Редактировалось 2 раз(а), последний 2017-03-19 18:13:20
карма: 9

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