Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.23;
Скачать: CL | DM;

Вниз

Вывод картинок из базы данных   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
1-72362
петр3
2003-01-12 23:43
2003.01.23
memo


3-72095
Fostr
2002-12-29 01:49
2003.01.23
Help! Помогите с индексами!


1-72221
zolotov
2003-01-14 12:35
2003.01.23
F1Book


1-72271
Alek_1
2003-01-15 00:53
2003.01.23
Jpg и Image


1-72186
Boris Tyumnev
2003-01-13 02:58
2003.01.23
Потоки виснут