-
Есть необходимость прочитать сабж. Никто не писал код на Delphi? Я понимаю все превосходство гугля, но он кроме с# кода и прочего, где используются _родные_LIB-ы_среды_ не дает. Хотелось хотябы заголовки узнать, а нарываюсь на код по использованию готовых классов. Может кто подскажет где прочитать,а? Спасибо.
-
Странно, я не поленился, спросил у яху и он мне в первой же ссылке пример с описанием на делфи выдал.
-
> Плохиш © (15.09.08 12:51) [1]
ни в коем случае не говори какая ссылка
-
Написано на основе C# ThumbDBLib by Gustavo Cerati.
interface Uses windows, ActiveX, sysutils;
function OpenThumbsStorage(Const FName : WideString; Size : PPoint = nil): Integer; // Возвращает кол-во тумбов function GetThumbData(Index : Integer; Out DataBuf : PByte): Integer; // В DataBuf возвращает данные (Jpeg), в Result размер. // После использования DataBuf нужно освободить! FreeMem(DataBuf); procedure CloseThumbsStorage;
implementation
Type TCatalogHeader = record Num1, Num2 : Word; thumbCount, thumbWidth, thumbHeight : Integer; end;
TCatalogItem = record Num1 : Integer; ItemID : Integer; Num3, Num4, Num5, Num6 : Word; // FName : PChar; // Num7 : Word; end;
TThumbItem = record Num1 : Integer; Index, Size : Integer; end;
TThumbFile = record Name : String; ItemID : Integer; end; TThumbFileArr = array of TThumbFile;
const MY_STGM_OPEN = STGM_DIRECT or STGM_SHARE_EXCLUSIVE or STGM_READWRITE; MY_STGM_CREATE = STGM_DIRECT or STGM_SHARE_EXCLUSIVE or STGM_READWRITE or STGM_CREATE; CLSID_NULL : TGUID = '{00000000-0000-0000-0000-000000000000}';
Var ThumbStorage : IStorage; Thumbs : TThumbFileArr;
function OpenThumbsStorage(Const FName : WideString; Size : PPoint = nil): Integer; Const CatalogName : WideString = 'Catalog'; Var Hr : HResult; Stream : IStream; Hdr : TCatalogHeader; Item : TCatalogItem; Res : DWord; n, m : Integer; w : WideChar; Name : WideString; begin Result := 0; Finalize(Thumbs); ThumbStorage := nil;
If (not FileExists(FName)) then Exit;
Hr := StgIsStorageFile( PWideChar(FName) ); If (Hr <> S_OK) then Exit;
Hr := StgOpenStorage( PWideChar(FName), nil, MY_STGM_OPEN, nil, 0, ThumbStorage);
If ( not SUCCEEDED( Hr ) ) then begin ThumbStorage := nil; Exit; end;
Hr := ThumbStorage.OpenStream( PWideChar(CatalogName), nil, MY_STGM_OPEN, 0, Stream);
If ( not SUCCEEDED( Hr ) ) then begin Stream := nil; ThumbStorage := nil; Exit; end;
Stream.Read(@Hdr, SizeOf(Hdr), @Res);
If (Size <> nil) then begin Size.x := Hdr.thumbWidth; Size.y := Hdr.thumbHeight; end;
SetLength(Thumbs, Hdr.thumbCount);
For n:=0 to Hdr.thumbCount-1 do begin Stream.Read(@Item, SizeOf(Item), @Res); Name := ''; Repeat Stream.Read(@w, 2, @Res); If (w <> #0) then Name := Name + w; Until (w = #0); Stream.Read(@w, 2, @Res);
Thumbs[n].Name := Name; Thumbs[n].ItemID := Item.ItemID; end; Stream := nil; Result := Hdr.thumbCount; end;
function GetThumbData(Index : Integer; Out DataBuf : PByte): Integer; Var n : Integer; Hr : HResult; Thumb : TThumbItem; Res : DWord; Stream : IStream; Name : WideString; s : String; begin Result := 0; If (ThumbStorage = nil) then Exit; If (Index < 0) or (Index >= Length(Thumbs)) then Exit;
s := InttoStr(Thumbs[Index].ItemID); Name := ''; Index := Length(s); For n:=1 to Index do Name := Name + s[Index-n+1];
Hr := ThumbStorage.OpenStream( PWideChar(Name), nil, MY_STGM_OPEN, 0, Stream); If ( not SUCCEEDED( Hr ) ) then begin Stream := nil; Exit; end;
hr := Stream.Read(@Thumb, SizeOf(Thumb), @Res); If (hr = 0) and (Res = SizeOf(Thumb)) then begin GetMem(DataBuf, Thumb.Size); hr := Stream.Read(DataBuf, Thumb.Size, @Res); If (hr = 0) and (Res = Thumb.Size) then Result := Res else begin FreeMem(DataBuf); DataBuf := nil; end; end; end;
procedure CloseThumbsStorage; begin Finalize(Thumbs); ThumbStorage := nil; end;
-
study ,thanks
-
</CODE
>
> > <CODE><CODE><I>
> > > <CODE><I><I><I><I
><
I>< I> <I><I><
U><I>><CODE></CODE><CODE></CODE><U></U> </U><I></I><B></B>
|