Вверх ↑
Этот топик читают: Гость
Ответов: 139
Рейтинг: 0
#1: 2008-03-17 23:36:48 ЛС | профиль | цитата
Вот этот дельфи код отрисовывает PNG. На безрыбье довольно удобно. Однако:
Этот дельфи-кусок действует "асинхронно". Программа совершенно не ждёт всего того, что происходит за точкой doLoad. Это создаёт серьёзные проблеммы при передаче ему картинок по очереди.
Кто то знает как оперативно исправить???
code_8649.txt
карма: 0

0
файлы: 1code_8649.txt [3.5KB] [148]
Разработчик
Ответов: 26163
Рейтинг: 2127
#2: 2008-03-17 23:42:56 ЛС | профиль | цитата
Danya. Аууу -- проснись. Уже в версию b168 вошел новый компонент ImageLoader, сделанный именно на этом коде.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#3: 2008-03-18 00:35:09 ЛС | профиль | цитата
Danya писал(а):
Это создаёт серьёзные проблеммы при передаче ему картинок по очереди

Не создает, а в приведенном Вами примере и множественный выбор не организован


------------ Дoбавленo:

Add(Hub,3096495,455,252)
{
link(onEvent1,13501963:doLoad,[])
link(onEvent2,15458636:doTimer,[(505,265)(505,346)(317,346)(317,307)])
}
Add(ODialog,9791542,273,245)
{
Title="Откройте PNG"
Select=1
link(onExecute,3542365:doEvent1,[])
}
Add(Image,13501963,525,252)
{
Width=663
Height=385
Align=5
}
Add(ImageLoader,6739345,399,245)
{
DrawSource=2
link(onLoad,6739345:doDraw,[(440,251)(440,231)(387,231)(387,258)])
link(onDraw,3096495:doEvent1,[])
}
Add(Hub,3542365,329,245)
{
link(onEvent1,6739345:doLoad,[])
link(onEvent2,11789056:doRepeat,[(380,258)(380,300)])
}
Add(Repeat,11789056,399,294)
{
Check=1
link(onRepeat,13523041:doProcessMessages,[])
}
Add(Application,13523041,455,294)
{
}
Add(Timer,15458636,329,301)
{
Enable=1
AutoStop=1
link(onTimer,11789056:doStop,[])
}
Add(Timer,5919293,217,245)
{
Interval=0
AutoStop=1
link(onTimer,9791542:doExecute,[])
}
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#4: 2008-03-18 01:05:27 ЛС | профиль | цитата
Galkov, а таймер-то там на кой, там же точка Busy есть

У меня есть пример на мультизагрузку картинок, прекрасно работает



Add(MainForm,11367671,133,238)
{
Left=20
Top=105
Width=459
Height=281
Ctl3D=0
Caption="ImageLoader -- BMP, GIF, JPG, JPEG, ICO, WMF, EMF, PNG, XBM, TIFF"
BorderStyle=4
Position=1
}
Add(Button,12242450,133,280)
{
Left=195
Top=225
Width=70
Height=25
TabOrder=-1
Caption="Load Files"
link(onClick,13268199:doEvent1,[])
}
Add(Repeat,5895942,448,413)
{
Op1=Integer(1)
link(onRepeat,5295562:doProcessMessages,[])
link(Op2,1836674:Busy,[])
}
Add(Image,9768314,455,210)
{
@Hint=#1:1|
Left=10
Top=10
Width=140
Height=100
Color=16777215
TabOrder=-1
Point(Handle)
}
Add(ImageLoader,1836674,455,364)
{
DrawSource=1
Point2AsOffset=0
link(onLoad,1836674:doDraw,[(498,370)(498,342)(443,342)(443,377)])
link(onDraw,14245188:doCapture,[])
link(Bitmap,5283587:Var2,[])
}
Add(Application,5295562,511,413)
{
Wait=1
}
Add(Image,5295338,462,217)
{
@Hint=#1:2|
Left=155
Top=10
Width=140
Height=100
Color=16777215
TabOrder=-1
Point(Handle)
}
Add(Hub,13268199,182,280)
{
OutCount=3
link(onEvent1,5281720:doEvent1,[(226,286)(226,223)])
link(onEvent2,9232864:doReset,[(226,293)(226,314)])
link(onEvent3,6607378:doExecute,[])
}
Add(ODialog,6607378,238,294)
{
Filter="BMP, GIF, JPG, JPEG, ICO, WMF, EMF, PNG, XBM, TIFF files (*.bmp;*.gif;*.ico;*wmf;*.emf;*.xbm;*.tiff;*.png;*.jpg;*.jpeg)|.bmp;*.gif;*.ico;*wmf;*.emf;*.xbm;*.tiff;*.png;*.jpg;*.jpeg|All files (*.*)|*.*"
FileName=""
Select=1
link(onExecute,10171142:doEvent1,[])
}
Add(Counter,9232864,350,294)
{
Min=-1
Max=5
Default=-1
link(onNext,8588083:doIndex,[])
}
Add(LineBreakEx,14472841,266,168)
{
Caption="LoadBmp"
Type=1
link(OnEvent,5198947:doEvent,[])
}
Add(Hub,5281720,350,217)
{
OutCount=6
link(onEvent1,9768314:doClear,[])
link(onEvent2,5295338:doClear,[])
link(onEvent3,10722084:doClear,[])
link(onEvent4,4148320:doClear,[])
link(onEvent5,8735878:doClear,[])
link(onEvent6,14742910:doClear,[])
}
Add(GetIndexData,8588083,462,294)
{
Count=6
link(Data1,9768314:Handle,[])
link(Data2,5295338:Handle,[])
link(Data3,10722084:Handle,[])
link(Data4,4148320:Handle,[])
link(Data5,8735878:Handle,[])
link(Data6,14742910:Handle,[])
}
Add(Image,10722084,469,224)
{
@Hint=#1:3|
Left=300
Top=10
Width=140
Height=100
Color=16777215
TabOrder=-1
Point(Handle)
}
Add(Image,4148320,476,231)
{
@Hint=#1:4|
Left=10
Top=115
Width=140
Height=100
Color=16777215
TabOrder=-1
Point(Handle)
}
Add(Image,8735878,483,238)
{
@Hint=#1:5|
Left=155
Top=115
Width=140
Height=100
Color=16777215
TabOrder=-1
Point(Handle)
}
Add(Image,14742910,490,245)
{
@Hint=#1:6|
Left=300
Top=115
Width=140
Height=100
Color=16777215
TabOrder=-1
Point(Handle)
}
Add(Hub,10171142,287,294)
{
link(onEvent1,9232864:doNext,[])
link(onEvent2,10771975:doEvent1,[(335,307)(335,370)])
}
Add(IndexToChanel,5198947,350,168)
{
Count=6
Point(Index)
link(onEvent1,9768314:doLoad,[(418,174)(418,216)])
link(onEvent2,5295338:doLoad,[(422,181)(422,223)])
link(onEvent3,10722084:doLoad,[(426,188)(426,230)])
link(onEvent4,4148320:doLoad,[(429,195)(429,237)])
link(onEvent5,8735878:doLoad,[(432,202)(432,244)])
link(onEvent6,14742910:doLoad,[(436,209)(436,251)])
link(Index,8973991:getVar,[])
}
Add(Hub,10771975,350,364)
{
link(onEvent1,1836674:doLoad,[])
link(onEvent2,5895942:doRepeat,[(415,377)(415,419)])
}
Add(ScreenShort,14245188,511,371)
{
link(Handle,5283587:Var3,[(517,352)])
link(onCapture,6345020:doWork,[])
}
Add(GetDataEx,5283587,455,343)
{
link(Data,8588083:Var,[])
}
Add(LineBreakEx,15524595,350,343)
{
Caption="Idx"
Type=3
link(_Data,9232864:Count,[])
}
Add(LineBreakEx,8973991,350,140)
{
Caption="Idx"
Type=2
}
Add(LineBreakEx,6345020,560,371)
{
Caption="LoadBmp"
}

карма: 22

0
Ответов: 9906
Рейтинг: 351
#5: 2008-03-18 02:02:02 ЛС | профиль | цитата
nesco писал(а):
а таймер-то там на кой, там же точка Busyесть

Сам-то хоть понял, что спросил
Таймер к точке Busy не имеет никакого отношения
------------ Дoбавленo:

Блин....
А вот что у нас при Application.Wait=true грузится проц на всю катушку (100%) от Application.doProcessMessages - никто до сих пор и не заметил
карма: 9

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#6: 2008-03-18 02:16:34 ЛС | профиль | цитата
Galkov писал(а):
Таймер к точке Busy не имеет никакого отношения

Ну так объясни зачем он там, тоже интересно

Galkov писал(а):
А вот что у нас при Application.Wait=true грузится проц на всю катушку от Application.doProcessMessages - никто до сих пор и не заметил

А у меня твоя схема нифига проц не грузит, или ты на другой проверял Я специльно загрузил 50 Mb картинку и пару секунд смотрел, как проц грузится.
карма: 22

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