nesco писал(а):
Yuriy, и как работает?Да вот проблема... Хочу сразу пакетно загрузить 6 фоток - не получается... Вот, что я не так сделал?
Add(MainForm,11367671,-8,28)
{
Left=20
Top=105
Width=459
Height=302
Caption="Read-JPG/PNG"
BorderStyle=4
Position=1
}
Add(Button,12242450,41,154)
{
Left=200
Top=245
Width=70
Height=25
TabOrder=-1
Caption="Load jpg"
link(onClick,11855633:doEnum,[])
}
Add(StrList,5123957,118,70)
{
Strings=#26:D:\Фотографии\S3010004.JPG|26:D:\Фотографии\S3010005.JPG|26:D:\Фотографии\S3010006.JPG|26:D:\Фотографии\S3010008.JPG|26:D:\Фотографии\S3010011.JPG|26:D:\Фотографии\S3010017.JPG|
}
Add(Image,9768314,482,98)
{
Left=10
Top=10
Width=140
Height=100
ViewStyle=0
}
Add(InlineCode,5016436,258,161)
{
WorkPoints=#6:doLoad|
EventPoints=#6:onLoad|
DataPoints=#5:Width|6:Height|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|47:uses Share,Debug,Windows,ActiveX,KOLComObj,KOL;|0:|5:const|0:|29: IMGCHG_SIZE = $0001;|29: IMGCHG_VIEW = $0002;|29: IMGCHG_COMPLETE = $0004;|29: IMGCHG_ANIMATE = $0008;|29: IMGCHG_MASK = $000F;|0:|33: IMGLOAD_NOTLOADED = $00100000;|33: IMGLOAD_LOADING = $00200000;|33: IMGLOAD_STOPPED = $00400000;|33: IMGLOAD_ERROR = $00800000;|33: IMGLOAD_COMPLETE = $01000000;|33: IMGLOAD_MASK = $01F00000;|0:|33: IMGBITS_NONE = $02000000;|33: IMGBITS_PARTIAL = $04000000;|33: IMGBITS_TOTAL = $08000000;|33: IMGBITS_MASK = $0E000000;|0:|33: IMGANIM_ANIMATED = $10000000;|33: IMGANIM_MASK = $10000000;|0:|33: IMGTRANS_OPAQUE = $20000000;|33: IMGTRANS_MASK = $20000000;|0:|33: DWN_COLORMODE = $0000003F;|33: DWN_DOWNLOADONLY = $00000040;|33: DWN_FORCEDITHER = $00000080;|33: DWN_RAWIMAGE = $00000100;|0:|4:type|0:|30: IImgCtx = interface(IUnknown)|46: ['{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}']|38: // Initialization/Download methods|66: function Load(pszUrl:PWChar; dwFlags:DWORD): HResult; stdcall;|91: function SelectChanges(ulChgOn:DWORD; ulChgOff:DWORD; fSignal:DWORD): HResult; stdcall;|81: function SetCallback(pCallback:pointer; pUserData:pointer): HResult; stdcall;|42: function Disconnect: HResult; stdcall;|0:|17: // Query methods|93: function GetUpdateRects(prc:PRect; var prcImg:TRect; var pcrc:integer): HResult; stdcall;|102: function GetStateInfo(var pulState:DWORD; var pSize:TSize; fClearChanges:DWORD): HResult; stdcall;|62: function GetPalette(var phpal:HPalette): HResult; stdcall;|0:|24: // Rendering methods|67: function Draw(_hdc:HDC; var prcBounds:TRect): HResult; stdcall;|105: function Tile(_hdc:HDC; var pptBackOrg:TPoint; var prcClip:TRect; var psize:TSize): HResult; stdcall;|118: function StretchBlt(_hdc:HDC; dstX,dstY,dstXE,dstYE,srcX,srcY,srcXE,srcYE:integer; dwROP:DWORD): HResult; stdcall;|5: end;|0:|28: THiAsmClass = class(TDebug)|10: private|17: wsz : integer;|17: hsz : integer;|9: public|22: FImgCtx :IImgCtx;|24: Width :THI_Event;|25: Height :THI_Event; |24: onLoad :THI_Event;|46: procedure doLoad(var dt:TData; idx:word);|5: end;|0:|14:implementation|0:|5:const|64: CLSID_IImgCtx:TGUID = '{3050f3d6-98b5-11cf-bb82-00aa00bdce0b}';|64: IID_IImgCtx:TGUID = '{3050f3d7-98b5-11cf-bb82-00aa00bdce0b}';|0:|63:procedure MyCallback(pCtx:pointer; pUserData:pointer); stdcall;|56:var pCls:THiAsmClass; stat:DWORD; sz:TSize; bmp:PBitmap;|14:// r:TRect;|35:// memDC : HDC; memBM : HBITMAP;|25:// dx, dy : integer;|5:begin|33: pCls := THiAsmClass(pUserData);|41: pCls.FImgCtx.GetStateInfo(stat, sz, 0);|71: if (sz.cx * 100) div sz.cy > (pCls.wsz * 100) div pCls.hsz then begin|74: bmp := NewDIBBitmap(pCls.wsz, (pCls.wsz * sz.cy) div sz.cx, pf32bit);|31: bmp.PixelFormat:= pf32bit;|123: pCls.FImgCtx.StretchBlt(bmp.Canvas.Handle, 0, 0, pCls.wsz, (pCls.wsz * sz.cy) div sz.cx, 0, 0, sz.cx, sz.cy, SRCCOPY);|5: end|12: else begin|74: bmp := NewDIBBitmap((pCls.hsz * sz.cx) div sz.cy, pCls.hsz, pf32bit);|31: bmp.PixelFormat:= pf32bit;|123: pCls.FImgCtx.StretchBlt(bmp.Canvas.Handle, 0, 0, (pCls.hsz * sz.cx) div sz.cy, pCls.hsz, 0, 0, sz.cx, sz.cy, SRCCOPY);|6: end;|75:// bmp := NewDIBBitmap(pCls.wsz - (2 * dx), pCls.hsz - (2 * dy), pf32bit);|30:// bmp.PixelFormat:= pf32bit;|38:// r := MakeRect(0, 0, sz.cx, sz.cy);|38:// memDC := CreateCompatibleDC ( 0 );|72:// memBM := CreateCompatibleBitmap ( bmp.Canvas.Handle, sz.cx, sz.cy );|34:// SelectObject ( memDC, memBM );|32:// pCls.FImgCtx.Draw(memDC, r);|51:// SetStretchBltMode(bmp.Canvas.Handle, HALFTONE);|32: _hi_OnEvent(pCls.onLoad, bmp);|11: bmp.Free;|4:end;|0:|29:procedure THiAsmClass.doLoad;|21:var wName:WideString;|5:begin|31: wsz := ToIntegerEvent(Width);|34: hsz := ToIntegerEvent(Height); |40: if (wsz = 0) or (hsz = 0 ) then exit; |24: wName := ToString(dt);|55: FImgCtx := CreateComObject(CLSID_IImgCtx) as IImgCtx;|33: FImgCtx.Load(PWChar(wName), 0);|50: FImgCtx.SetCallback(@MyCallback, pointer(Self));|45: FImgCtx.SelectChanges(IMGCHG_COMPLETE,0,1);|4:end;|0:|14:initialization|20: CoInitialize(nil);|12:finalization|17: CoUninitialize;|0:|4:end.|
link(onLoad,1660561:doEvent,[])
link(Width,3405297:Value,[])
link(Height,15034556:Value,[])
}
Add(Memory,3405297,258,42)
{
Default=Integer(140)
}
Add(Memory,15034556,265,63)
{
Default=Integer(100)
}
Add(ArrayEnum,11855633,132,154)
{
link(onItem,3841382:doEvent1,[])
link(Array,5123957:Array,[])
}
Add(IndexToChanel,1660561,384,161)
{
Count=6
Point(Index)
link(onEvent1,9768314:doLoad,[(449,167)(449,104)])
link(onEvent2,5295338:doLoad,[(450,174)(450,146)])
link(onEvent3,14742910:doLoad,[(450,181)(450,188)])
link(onEvent4,8735878:doLoad,[(442,188)(442,230)])
link(onEvent5,4148320:doLoad,[(450,195)(450,265)])
link(onEvent6,10722084:doLoad,[(432,202)(432,300)])
link(Index,9232864:Count,[])
}
Add(Image,5295338,482,140)
{
Left=155
Top=10
Width=140
Height=100
ViewStyle=0
}
Add(Image,14742910,482,182)
{
Left=300
Top=115
Width=140
Height=100
ViewStyle=0
}
Add(Image,8735878,482,224)
{
Left=155
Top=115
Width=140
Height=100
ViewStyle=0
}
Add(Image,4148320,482,259)
{
Left=10
Top=115
Width=140
Height=100
ViewStyle=0
}
Add(Image,10722084,482,294)
{
Left=300
Top=10
Width=140
Height=100
ViewStyle=0
}
Add(Hub,3841382,202,154)
{
link(onEvent1,9232864:doNext,[(309,160)(309,90)])
link(onEvent2,5016436:doLoad,[])
}
Add(Counter,9232864,384,84)
{
Min=-1
Max=6
Default=-1
}
Грузится только последнее фото из списка.