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, hyiedefs, iesettings, iexDBBitmaps, DBCtrls; type TMainForm = class(TForm) Table1: TTable; DataSource1: TDataSource; ImageEnMView1: TImageEnMView; Panel1: TPanel; Label1: TLabel; Edit1: TEdit; btnAppend: TButton; btnDelete: TButton; btnRotate: TButton; btnEffects: TButton; dlgOpenImage: TOpenImageEnDialog; Splitter1: TSplitter; ImageEnView1: TImageEnView; procedure btnAppendClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure btnEffectsClick(Sender: TObject); procedure btnRotateClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Table1AfterScroll(DataSet: TDataSet); private { Private declarations } fDBBitmap : TIEDBBitmap; fDBMultiBitmap : TIEDBMultiBitmap; public { Public declarations } end; var MainForm: TMainForm; implementation uses imageenproc; {$R *.DFM} {$R WindowsTheme.res} procedure TMainForm.btnAppendClick(Sender: TObject); begin if dlgOpenImage.Execute then fDBMultiBitmap.AppendImage( dlgOpenImage.Filename ); end; procedure TMainForm.btnDeleteClick(Sender: TObject); var idx: Integer; begin idx := ImageEnMView1.SelectedImage; if idx < 0 then exit; fDBMultiBitmap.DeleteImage( ImageEnMView1.SelectedImage ); ImageEnMView1.SelectedImage := idx - 1; end; procedure TMainForm.btnEffectsClick(Sender: TObject); var bmp: TIEBitmap; proc: TImageEnProc; bChanged: Boolean; begin if ImageEnMView1.SelectedImage < 0 then exit; bmp := fDBMultiBitmap.GetTIEBitmap( ImageEnMView1.SelectedImage ); proc := TImageEnProc.CreateFromBitmap( bmp ); proc.PreviewsParams := proc.PreviewsParams + [ prppDefaultLockPreview ]; bChanged := proc.DoPreviews(); fDBMultiBitmap.ReleaseBitmap( ImageEnMView1.SelectedImage, bChanged ); FreeAndNil( proc ); end; procedure TMainForm.btnRotateClick(Sender: TObject); begin if ImageEnMView1.SelectedImage >= 0 then fDBMultiBitmap.Rotate( ImageEnMView1.SelectedImage, -90 ); end; procedure TMainForm.FormCreate(Sender: TObject); begin ImageEnMView1.SetModernStyling; ImageEnMView1.DefaultBottomText := iedtFilename; // Open our database table Table1.DatabaseName := ExtractFilePath(application.exename); Table1.Open; Edit1Change(self); // Create our DB Multi-Bitmap and point to our table which contains display name and image blob fields fDBMultiBitmap := TIEDBMultiBitmap.create( DataSource1, 'Photo', 'Name' ); { Note: If the table actually pointed to local files we might call like this: fDBMultiBitmap := TIEDBMultiBitmap.create( DataSource1, '', 'Filename' ); fDBMultiBitmap.ImagePath := 'C:\My Image Folder\'; } // Now make our ImageEnMView1 use our DB Multi-Bitmap as its image container ImageEnMView1.SetExternalMBitmap( fDBMultiBitmap ); // Make ImageEnMView1 follow cursor movement fDBMultiBitmap.FollowDBCursor := True; // Create our DB Bitmap and point to our table which contains display name and image blob fields fDBBitmap := TIEDBBitmap.create( DataSource1, 'Photo', 'Name' ); // Now make our ImageEnView1 use our DB Bitmap as its image container ImageEnView1.SetExternalBitmap( fDBBitmap ); end; procedure TMainForm.FormDestroy(Sender: TObject); begin FreeAndNil( fDBBitmap ); FreeAndNil( fDBMultiBitmap ); end; procedure TMainForm.Edit1Change(Sender: TObject); begin if Edit1.Text <> '' then begin Table1.FilterOptions := [ foCaseInsensitive ]; Table1.Filter := 'Name=''' + Edit1.text + '*'''; Table1.Filtered := true; end else Table1.Filtered := false; end; procedure TMainForm.Table1AfterScroll(DataSet: TDataSet); begin Caption := 'TIEDBMultiBitmap Demo - www.ImageEn.com' + '-' + Table1.FieldByName( 'Name' ).AsString; end; end.