Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.06.2014, 19:35
Styg Styg вне форума
Прохожий
 
Регистрация: 21.06.2014
Сообщения: 3
Версия Delphi: 2010
Репутация: 10
По умолчанию Отображение картинок по данным из базы

Всем привет!

Есть такая задачка.

Есть база данных, например,
CAR_NAME - название авто,
IMAGE_FILE_NAME - и путь к ее картинке на сервере.

Когда пользователь выбирает машину, картинка подгружается в локальный кэш на диск и отображается в программе. В следующий раз картинка не качается, а берется из кэша. Все просто, когда речь идет о выводе данных по одной машине.

Теперь собственно задача. Нужно выводить на форму картинки машин списком. Ну как выводятся товары в интернет-магазинах. По сути задача сводится к созданию интерфейса наподобие ACDSee. Там программа тоже считывает файлы с диска и показывает их миниатюры. Тут миниатюры делать не нужно, там размеры файлов уже фиксированы, но нужно выводить списком картинки.

Так вот вопрос: какой компонент на ваш взгляд для этого лучше использовать?

Я пока что вижу следующее решение:
1. Получить размеры формы
2. Динамически создать нужное количество компонентов TImage и позиционировать их на форме, чтобы получился аналог сетки
3. В каждый компонент TImage в потоках загружать фотки, чтобы приложение не висло в момент загрузки и скроллинга
4. При скроллинге использовать графический буфер, чтобы не было мерцания

Но что-то мне подсказывает, что уже есть готовые решения, ведь задача типовая...
Может кто подскажет компонент или решение?
Ответить с цитированием
  #2  
Старый 21.06.2014, 20:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я использовал EasyListView из пакета MustangPeak.
Вообще, DevExpress тоже в своем гриде такое умеет.
Можно и свой такой компонент написать (тоже делал), там не так сложно, как кажется...
Ответить с цитированием
  #3  
Старый 22.06.2014, 00:09
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А вот так не устроит?
Код:
unit Unit27;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls;

type
  TForm27 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const
  HtmTemplate: String = '<html><body style="margin:0">%s</body></html>';

var
  Form27: TForm27;

implementation

uses ActiveX, IOUtils, Types;

{$R *.dfm}

procedure TForm27.Button1Click(Sender: TObject);
Var
  Htm: TStringStream;
  HtmBody: TStringList;
  Dir: TDirectory;
  Files: TStringDynArray;
  i: Integer;
begin
 WebBrowser1.Navigate('about:blank');
 Htm := TStringStream.Create;
 HtmBody := TStringList.Create;
 Files := Dir.GetFiles('D:\Install\GlyFx\BigPicture\', '*.png');
 for i := 0 to Length(Files) - 1
 do begin
    if ExtractFileExt(Files[i]) = '.png'
    then HtmBody.Add('<img src="' + Files[i] + '">');
    if i = 30 then Break;
    end;
 Htm.WriteString(Format(HtmTemplate, [HtmBody.Text]));
 Htm.Position := 0;
 (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(Htm));
 HtmBody.Free;
 Htm.Free;
end;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 24.06.2014, 15:48
Styg Styg вне форума
Прохожий
 
Регистрация: 21.06.2014
Сообщения: 3
Версия Delphi: 2010
Репутация: 10
По умолчанию

Спасибо за ответы

Не удержалася и вместо того, чтобы дождаться ответа, просто сделал как планировал.

В итоге потоки не потребовались, в принципе итак работает нормально.
Так же как и графический буфер.
В общем, решение через несколько TImage вполне подходит.

Вот тут видео, как это работает.
https://yadi.sk/i/KNA6l9UbUgYct
Фотки каждая размером примерно 50 кб.

К сожалению, с MustangPeak ознакомиться не удалось, их официальный сайт, похоже не работает. Жаль, надеялся на хорошую библиотеку.
C DevExpress все никак не разберусь, как-то все у них мутно... Вроде картинки красивые, но как это сделать - нужно долго и нудно разбираться.

А насчет использования браузера - интересный прием, который не приходил мне в голову. Когда-нибудь использую
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter