В DelphiXE я использую tFileOpenDialog, чтобы выбрать папку, а затем перечисляю все файлы * .jpg в этой папке в tListBox.Я разрешаю перетаскивать элементы списка в списке для пользовательской сортировки, чтобы я мог отобразить их по порядку позже.
Я хотел бы иметь возможность рисовать миниатюру изображения рядом симя файла, поэтому при просмотре файлов в представлении «Список», где у вас есть соответствующий значок, расположенный слева от имени файла в той же строке, экран похож на Windows Explorer.
Я нашел несколько старых примеров, которыезаставьте меня поверить, что это возможно с помощью tListBox.onDrawItem, но я не смог заставить его работать.
Какой наилучший подход можно использовать для достижения этой цели с помощью tListBox или каким-либо другим способом?
Спасибо за вашу помощь.
Обновление: вместо этого я работаю над использованием tListView, как и предлагалось.
Я пытался преобразовать примерыот Кена и Андреаса, чтобы использовать реальные изображения вместо динамически создаваемых образцов растровых изображений.Я смог заставить работать основы, но без изменения размера я получаю только верхний левый угол изображения 64 * 64.На данный момент я работаю только с JPG.imagecount - это просто количество моего списка имен файлов в моем списке, на данный момент я не перенес первоначальное создание списка в представление списка.
Это делается с помощью этого кода:
procedure TfrmMain.CreateThumbnails;
var
i: Integer;
FJpeg: TJpegImage;
R: TRect;
begin
for i := 0 to imageCount - 1 do
begin
FJpeg := TJpegImage.Create;
thumbs[i] := TBitmap.Create;
FJpeg.LoadFromFile(Concat(imgFolderlabel.caption,
photoList.Items.Strings[i]));
thumbs[i].Assign(FJpeg);
thumbs[i].SetSize(64, 64);
end;
imgListView.LargeImages := ImageList1;
FJpeg.Free;
end;
Чтобы также правильно изменить размеры и растянуть изображение в пределах эскиза, я пытаюсь реализовать здесь некоторый код: http://delphi.about.com/od/graphics/a/resize_image.htm
Новый код выглядит следующим образом:
<code>
procedure TfrmMain.CreateThumbnails;
var
i: Integer;
FJpeg: TJpegImage;
R: TRect;
begin
for i := 0 to imageCount - 1 do
begin
FJpeg := TJpegImage.Create;
thumbs[i] := TBitmap.Create;
FJpeg.LoadFromFile(Concat(imgFolderlabel.caption,
photoList.Items.Strings[i]));
thumbs[i].Assign(FJpeg);<br>
//resize code
R.Left := 0;
R.Top := 0;
// proportional resize
if thumbs[i].Width > thumbs[i].Height then
begin
R.Right := 64;
R.Bottom := (64 * thumbs[i].Height) div thumbs[i].Width;
end
else
begin
R.Bottom := 64;
R.Right := (64 * thumbs[i].Width) div thumbs[i].Height;
end;
thumbs[i].Canvas.StretchDraw(R, thumbs[i]);
// resize image
//thumbs[i].Width := R.Right;
//thumbs[i].Height := R.Bottom;<br>
thumbs[i].SetSize(64, 64); //all images must be same size for listview<br>
end;
imgListView.LargeImages := ImageList1;
FJpeg.Free;
end;
Это дает мне коллаж из миниатюр изображений с их именами файлов и работает хорошо.
Спасибо.