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.