BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Database/DBMultiBitmap/umain.pas

152 lines
4.0 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, 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.