157 lines
3.8 KiB
Plaintext
157 lines
3.8 KiB
Plaintext
unit umain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ieview, iemview,
|
|
Db, Grids, DBGrids, DBTables, hyieutils, imageenview, ImageEnIO, StdCtrls, ExtCtrls, ComCtrls,
|
|
ieopensavedlg, iexBitmaps;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
Table1: TTable;
|
|
DataSource1: TDataSource;
|
|
ImageEnMView1: TImageEnMView;
|
|
Panel1: TPanel;
|
|
Label1: TLabel;
|
|
Edit1: TEdit;
|
|
btnAppend: TButton;
|
|
dlgOpenImage: TOpenImageEnDialog;
|
|
procedure btnAppendClick(Sender: TObject);
|
|
procedure ImageEnMView1ImageIDRequestEx(Sender: TObject; Index, ID: Integer; var Bitmap: TIEBitmap);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure Edit1Change(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
fBitmap : TIEBitmap;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
{$R WindowsTheme.res}
|
|
|
|
procedure TMainForm.btnAppendClick(Sender: TObject);
|
|
var
|
|
aBitmap: TIEBitmap;
|
|
aMemStream: TMemoryStream;
|
|
aBlobStream: TBlobStream;
|
|
sName: string;
|
|
Idx: Integer;
|
|
begin
|
|
if dlgOpenImage.Execute = False then
|
|
exit;
|
|
|
|
try
|
|
Table1.Append;
|
|
|
|
// Naturally, in this situation it would be more effective to load the blob directly from the file,
|
|
// but here I am illustrating loading via a TIEBitmap
|
|
|
|
aBitmap := TIEBitmap.create;
|
|
aMemStream := TMemoryStream.Create;
|
|
try
|
|
// Transfer the image from file to our memory stream
|
|
aBitmap.Read(dlgOpenImage.Filename);
|
|
aBitmap.Write(aMemStream, ioJPEG);
|
|
aMemStream.Position := 0;
|
|
|
|
// Transfer from the memory stream to the blobstream
|
|
aBlobStream := TBlobStream.create((Table1.FieldByName('Photo') as TBlobField), bmWrite);
|
|
try
|
|
aMemStream.SaveToStream(aBlobStream);
|
|
finally
|
|
aBlobStream.Free;
|
|
end;
|
|
|
|
// Assign a name
|
|
sName := ChangeFileExt(ExtractFilename(dlgOpenImage.Filename), '');
|
|
Table1.FieldByName('Name').AsString := sName;
|
|
|
|
Table1.Post;
|
|
|
|
// Add it to our TImageEnMView
|
|
Idx := ImageEnMView1.AppendImage;
|
|
ImageEnMView1.ImageID[ Idx ] := Table1.RecNo;
|
|
|
|
finally
|
|
aMemStream.free;
|
|
aBitmap.free;
|
|
end;
|
|
except
|
|
Table1.Cancel;
|
|
raise;
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.ImageEnMView1ImageIDRequestEx(Sender: TObject; Index, ID: Integer; var Bitmap: TIEBitmap);
|
|
var
|
|
ms:TMemoryStream;
|
|
begin
|
|
// Go to the record of this ID
|
|
Table1.RecNo := ID;
|
|
|
|
// Load the blob into our Bitmap
|
|
ms := TMemoryStream.Create;
|
|
try
|
|
(Table1.FieldByName('Photo') as TBlobField).SaveToStream( ms );
|
|
ms.Position := 0;
|
|
fBitmap.Read( ms );
|
|
finally
|
|
ms.free;
|
|
end;
|
|
|
|
// Assign data to the TImageEnMView
|
|
Bitmap := fBitmap;
|
|
ImageEnMView1.ImageBottomText[ Index ] := Table1.FieldByName('Name').AsString;
|
|
end;
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
ImageEnMView1.SetModernStyling;
|
|
fBitmap := TIEBitmap.create;
|
|
Table1.DatabaseName := ExtractFilePath(application.exename);
|
|
Table1.Open;
|
|
Edit1Change(self);
|
|
end;
|
|
|
|
procedure TMainForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
FreeAndNil(fBitmap);
|
|
end;
|
|
|
|
// setup correspondence between TImageEnMView and the dataset
|
|
procedure TMainForm.Edit1Change(Sender: TObject);
|
|
var
|
|
Idx : integer;
|
|
begin
|
|
if Edit1.Text <> '' then
|
|
begin
|
|
Table1.FilterOptions := [foCaseInsensitive];
|
|
Table1.Filter := 'Name='''+Edit1.text+'*''';
|
|
Table1.Filtered := true;
|
|
end
|
|
else
|
|
Table1.Filtered := false;
|
|
|
|
ImageEnMView1.Clear;
|
|
Table1.First;
|
|
while not Table1.Eof do
|
|
begin
|
|
Idx := ImageEnMView1.AppendImage;
|
|
|
|
// NOTE: Some queries and datasets do not support navigation via RecNo
|
|
// In that case, you should use an indexed field to identify and navigate records
|
|
ImageEnMView1.ImageID[ Idx ] := Table1.RecNo;
|
|
Table1.Next;
|
|
end;
|
|
end;
|
|
|
|
end.
|