Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизВывод картинок из базы данных Найти похожие ветки
← →
moxx (2003-01-03 15:51) [0]Уважаемые мастера этот код работает, но может его можно оптимизировать и никак не получается вывести из базы картинки в формате Jpeg может кто нибудь подскажет
unit StringGridU;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Spin, ExtCtrls;
type
TFmString = class(TForm)
Panel1: TPanel;
SpinEdit1: TSpinEdit;
DrawGrid1: TDrawGrid;
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure SpinEdit1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
// Лист изображений
slBitMap:TStringList;
// Массив изображений
pic:array of string;
// коэффициент масштабирования
koeff:real;
// Ширина картинки в гриде
DrawShirina:Integer;
// высота картинки в гриде
DrawVisota:Integer;
// количество столбцов
ColStl:Integer;
{ Private declarations }
public
{ Public declarations }
end;
var
FmString: TFmString;
implementation
uses UDM, ServisLib, Udb2;
{$R *.dfm}
procedure TFmString.FormActivate(Sender: TObject);
var
c,k: Integer; // счетчики
ColFoto: Integer; // количество картинок
S:String; // имя файла
begin
DrawGrid1.Align:=alClient;
// масштабируем картинки в процентах
with SpinEdit1 do
begin
Value:=90;
MaxValue:=200;
MinValue:=30;
Increment:=10;
end;
koeff:=1/(SpinEdit1.Value/100);
// если нет записей то выходим
if Table2.RecordCount = 0 then exit;
ColFoto:=Table2.RecordCount;
// получаем ширину и высоту картинки с
//учетом коэффициента масштабирования
//shirina=210 и visota=250 это ширина и высота bmp
//файла в таблице
DrawShirina:= round(shirina/koeff);
DrawVisota:= round(visota/koeff);
// присваиваем их гриду
with DrawGrid1 do
begin
DefaultColWidth:=DrawShirina;
DefaultRowHeight:=DrawVisota;
// получаем количество столбцов
ColStl:=ClientWidth div DrawShirina;
// присваиваем столбцы гриду
ColCount:= ColStl;
// устанавливаем ширину грида
ClientWidth:= ColStl*DrawShirina+10;
// получаем количество рядов
if ColFoto mod ColStl = 0 then
RowCount:=ColFoto div ColStl
else
RowCount:=1 + ColFoto div ColStl;
// устанавливаем длину массива
SetLength(pic,ColStl*RowCount);
end;
Table2.First;
while not Table2.Eof do
begin
c:=Table2.RecNo-1;
// файлы из таблицы в формате bmp
S:= Table2Name_fa.AsString;
pic[c]:=S;
Table2.Next;
end;
// создаем список строк
slBitMap:= TStringList.Create;
// вставляем в него названия файлов и картинки
with slBitMap do
for k:=0 to (ColStl*DrawGrid1.RowCount)-1 do
begin
Add(pic[k]);
Objects[k]:=TBitMap.Create;
// проверка на существование файла
try
// ApplPath это директория экзешного файла
// ApplPath:= ExtractFilePath(Application.ExeName)
if (FileExists(ApplPath + pic[k])=true) then
(Objects[k]as TBitMap).LoadFromFile(applpath+pic[k]);
except
on EInvalidGraphic do
exit;// здесь надо сделать исключение (пока не могу)
end; // try
end;
end;
procedure TFmString.SpinEdit1Click(Sender: TObject);
begin
slBitMap.Free;
pic:=nil;
FormActivate(SpinEdit1);
DrawGrid1.SetFocus;
end;
procedure TFmString.FormDestroy(Sender: TObject);
begin
slBitMap.Free;
pic:=nil;
end;
procedure TFmString.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FmString.Free;
end;
procedure TFmString.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var c:integer;
begin
// пересчитываем координаты ячейки в индекс списка
c:= ColStl*arow+acol;
with DrawGrid1.Canvas,rect,slbitmap do
// рисуем картинку
stretchdraw(rect,(objects[c]as TBitmap));
end;
end.
← →
TTCustomDelphiMaster (2003-01-03 15:54) [1]http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1040991321&n=1
← →
moxx (2003-01-03 17:11) [2]Большое спасибо, но у меня файлы с картинками хранятся в папках, а в таблице прописаны пути к ним и DBGRID для вывода изображений не подходит,так как на экран необходимо вывести только изображения, а по клику на нем показать форму для редактирования этого Изображения.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c