Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-72347
Sergey Pavl
2003-01-12 15:59
2003.01.23
Обработка изображения, представленного в градациях серого


1-72332
pet
2003-01-11 20:55
2003.01.23
Срочно.Горячие клавиши


1-72228
Джин
2003-01-14 15:31
2003.01.23
Создание компонент


3-72158
Vovkin
2002-12-27 20:28
2003.01.23
dbExpress + Delphi 7 + MSSQL 2000


7-72572
Wolverin
2002-11-08 22:09
2003.01.23
Метка диска





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский