Вниз
Скачать: CL | DM;

Где найти компонент отображающий Thumbnail ?   Найти похожие ветки 

← →
leonidus ©   (2007-08-14 17:34) [0]

Нужен быстрый компонент способный отобразить превьюшки фоток, подскажите где такой найти?


← →
Efir ©   (2007-08-14 18:10) [1]

А GDI+?


← →
leonidus ©   (2007-08-14 22:42) [2]

Ну мне нужен именно компонент


← →
leonidus ©   (2007-08-15 01:58) [3]

Делаю связку ImageList и ListView. В ImageList загружаю готовые превьюшки:

var
i:integer;
btm:tbitmap;
begin
for i:=1 to 10 do
 begin
  btm:=tbitmap.Create;
  btm.LoadFromFile("D:\Pics\"+inttostr(i)+".bmp");
  ImageList1.Add(btm,nil);

  ListView1.Items.Add.Caption:=inttostr(i);
  ListView1.Items.Add.ImageIndex:=i-1;

  btm.Free;
 end;

и они соотв. появляются в ListView, но не получается настроить ViewStyle для того чтобы результат был именно такой как хочется увидеть, то картинки вообще не отображаются, то вместо 10 вижу 20 картинок, черти что. Как же здесь быть?


← →
s7r ©   (2007-08-15 11:16) [4]

Вот код процедуры которая добавляет в ImageThumbs (TImageList) миниатюру файла указанного путем FilePath, и связывает ее с элементом ListView. Работает действительно быстро из за Img.GetThumbnailImage. Для работы необходимо подключить к проекту GDIPAPI, GDIPOBJ.(заголовочные файлы для работы с gdi+).
AddFile(const FilePath, Caption: string);
var
 TempBmp: TBitmap;
 gdiGraphics: TGPGraphics;
 Img, Thumb: TGPImage;
 W, H: double;
begin
 TempBmp:=TBitmap.Create;
 TempBmp.Width:=150;
 TempBmp.Height:=100;

 gdiGraphics:=TGPGraphics.Create();
 Img:=TGPImage.Create();

 Img:=Img.FromFile(FilePath);
 Thumb:=Img.GetThumbnailImage(0, 0, nil, nil);
 if(Img.GetWidth()>Img.GetHeight())then
   begin
     H:=TempBmp.Height;
     W:=(H/Img.GetHeight)*Img.GetWidth();
   end
 else
   begin
     H:=TempBmp.Height;
     W:=(H/Img.GetHeight())*Img.GetWidth();
   end;
 gdiGraphics:=gdiGraphics.FromHDC(TempBmp.Canvas.Handle);
 gdiGraphics.DrawImage(Thumb, trunc(TempBmp.Width/2-W/2), 0, W, H);
 FormMain.ImageThumbs.Add(TempBmp, FilePath);
 ListView.AddItem(Caption, path);
 ListView.Items[ListView.Items.Count-1].ImageIndex:=          FormMain.ImageThumbs.Count-1;
 Img.Free;
 Thumb.Free;
 gdiGraphics.Free;
 TempBmp.Free;
end;


← →
s7r ©   (2007-08-15 11:19) [5]

Да и в imagelist нужно установить Height:=100 и Width:=150.


← →
leonidus ©   (2007-08-15 15:22) [6]

>S7r большое спасибо за код, но подключить GDIPAPI, GDIPOBJ не удалось, не находит .dcu файлы. Что делать?


← →
leonidus ©   (2007-08-15 16:31) [7]

заголовочные файлы подцепил, но компилятор ругается на второй параметр в обеих строчках:

FormMain.ImageThumbs.Add(TempBmp, FilePath);
ListView.AddItem(Caption, path);

помогла замена параметра на nil, но тогда функция на работает. Вызываю ее так:

for i:=1 to 10 do
  AddFile("D:\Pics\"+inttostr(i)+".bmp",inttostr(i));


← →
s7r ©   (2007-08-15 21:40) [8]

FormMain.ImageThumbs.Add(TempBmp, FilePath);
ListView.AddItem(Caption, path);

Да в этих строчках действительно второй параметр может быть nil (В первой в данном случае должен) - это я сам ошибся. Но у меня с соответствующей заменой все работает. В listview нужно еще установить ListView.LargeImages:=ImageThumbs;
ListView.SmallImages:=ImageThumbs;


← →
leonidus ©   (2007-08-15 22:46) [9]

Да, теперь заработало, спасибо еще раз.
Но вот есть одна проблема. Самый удобный для меня режим это vsList, т.к. хочется сделать предпросмотр как в ACDSee, но в этом режиме между столбцами получаются большие расстояния, равные ширине превьюшки. Можно ли как-то от этого избавиться?


← →
leonidus ©   (2007-08-16 19:41) [10]

Методом тыка, пришел к удовлетворительному результату и при стиле равном vsIcon, но и там засада) превьюшки отображаются только в два ряда, даже если окно ListView имеет заведомо большую высоту, т.е. в принципе там могло поместиться и 3 и 4 ряда, но отображается упорно только 2. С чем это может быть связано?


← →
s7r ©   (2007-08-19 16:49) [11]

Для установки расстояния между Items в list view нужно послать следующее сообщение:
SendMessage(ShellListView1.Handle, LVM_SETICONSPACING, 0, MAKELONG(X, Y));
где X и Y -соответственно расстояния по горизонтали и вертикали.


> Методом тыка, пришел к удовлетворительному результату и
> при стиле равном vsIcon, но и там засада) превьюшки отображаются
> только в два ряда, даже если окно ListView имеет заведомо
> большую высоту, т.е. в принципе там могло поместиться и
> 3 и 4 ряда, но отображается упорно только 2. С чем это может
> быть связано?


Попробуйте установить в IconOptions Arrangement=iaTop.


← →
deivan   (2008-07-21 13:41) [12]

c помощью Мастеров Дефи был создан следующий код:
procedure TForm1.Button3Click(Sender: TObject);
var
 jpeg: TJPEGImage;
 bmp:  TBitmap;
 i: Integer;
begin
 if OpenPictureDialog1.Execute
   then
     begin
     jpeg:=TJPEGImage.Create;
     jpeg.LoadFromFile(OpenPictureDialog1.FileName);
     Image1.Picture.Assign(jpeg);
     TJPEGImage(Image1.Picture.Graphic).Scale :=jsEighth;          
     TJPEGImage(Image1.Picture.Graphic).Performance := jpBestSpeed;
     bmp := TBitmap.Create;
     bmp.width:=120; bmp.height:=90;
     bmp.Canvas.StretchDraw(bmp.Canvas.Cliprect, jpeg );
     with ListView1.Items.Add do begin
       Caption:=OpenPictureDialog1.FileName;
       ImageIndex:=ImageList1.Add(bmp,nil);
     end;
     jpeg.Free;
     bmp.Free;
 end;
end;

открываются файлы жпег и помещаются в листвью, туда же идут превьюшки размером 120х90. Элемент Имаже в коде выше - это картинка на форме, которая курупно показывает только что добавленный в листвью жпег.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.008 c
15-1306725161
Andrey)Msk
2011-05-30 07:12
2011.09.18
План закупок оргтехники


15-1305036794
Empleado
2011-05-10 18:13
2011.09.18
MS Skype


8-1187098476
leonidus
2007-08-14 17:34
2011.09.18
Где найти компонент отображающий Thumbnail ?


15-1306816212
Evgeniy_gd
2011-05-31 08:30
2011.09.18
Не согласен с пунктом в должностной инструкции.


2-1306949786
Григорий
2011-06-01 21:36
2011.09.18
помогите накодить штуку(




   Наверх