Tad писал(а):
А если не нужно мне загружать изображение, а только узнать размеры ? Как товарищу выше
Да все там нормально работает. CallBack -- асинхронная процедура, надо обязательно дождаться окончания загрузки и перейти в другую очередь событий. Пример я приводил в этом же топике
А для особо нуждающихся я добавил в
Img_Loader на SVN получение только размера, без загрузки изображения. Скрорсть обработки должна возрасти на порядки
------------ Дoбавленo в 22.16:
Вот пример
Add(MainForm,2953706,210,84)
{
}
Add(Img_Loader,1346161,308,119)
{
Point(Busy)
Point(doSize)
Point(onSize)
link(onSize,1010417:doSeparateMT,[])
}
Add(Button,976159,210,126)
{
Left=160
Top=115
TabOrder=-1
Caption="Size"
link(onClick,6607378:doExecute,[])
}
Add(Label,1291571,140,77)
{
Left=10
Top=10
Width=32
Height=17
Caption="width:"
}
Add(Edit,14888062,420,126)
{
Left=50
Top=10
Width=130
Cursor=1
Text=""
}
Add(Label,11735913,147,84)
{
Left=200
Top=10
Width=36
Height=17
Caption="height:"
}
Add(Edit,11747908,420,168)
{
Left=245
Top=10
Width=130
Cursor=1
Text=""
}
Add(ODialog,6607378,259,126)
{
Filter="BMP, GIF, JPG, JPEG, WMF, EMF, PNG, XBM, TIFF files (*.bmp;*.gif;*.wmf;*.emf;*.xbm;*.tiff;*.png;*.jpg;*.jpeg)|.bmp;*.gif;*.ico;*.wmf;*.emf;*.xbm;*.tiff;*.png;*.jpg;*.jpeg|All files (*.*)|*.*"
FileName=""
Select=1
link(onExecute,1346161:doSize,[])
}
Add(MT_MultiData,1010417,357,126)
{
link(onData1,14888062:doText,[])
link(onData2,11747908:doText,[(405,139)(405,174)])
}
------------ Дoбавленo в 22.22:
Tad писал(а):
и устанавливаем sg=false
А вот это чушь собачья. Выход из метода
doLoad происходит сразу, отдавая управление системе, тк эти операции асинхронны, не зря же мы прописываем адрес функции обратного вызова, этот адрес нужен системе, после того, как она начнет обработку загрузки, что бы знать куда выдать результат. А потому sg=false выставляется до вызова функции CallBack. Тут прикол в том, что большие картинки грузятся в несколько циклов, а управление отдано системе, почему и надо дожидаться окончания загрузки на точке
Busy