278 lines
7.2 KiB
Plaintext
278 lines
7.2 KiB
Plaintext
unit umain;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, FileCtrl, StdCtrls, ExtCtrls,
|
|
hyieutils, ieopensavedlg, imageenview, iemio, ieview, iemview, iexBitmaps, hyiedefs, iesettings;
|
|
|
|
type
|
|
TMainForm = class(TForm)
|
|
Panel1: TPanel;
|
|
DriveComboBox1: TDriveComboBox;
|
|
DirectoryListBox1: TDirectoryListBox;
|
|
FileListBox1: TFileListBox;
|
|
Label1: TLabel;
|
|
edtPage: TEdit;
|
|
updPage: TUpDown;
|
|
lblMax: TLabel;
|
|
Button1: TButton;
|
|
Button5: TButton;
|
|
Button6: TButton;
|
|
ProgressBar1: TProgressBar;
|
|
OpenImageEnDialog1: TOpenImageEnDialog;
|
|
btnAddPage: TButton;
|
|
IEMView1: TImageEnMView;
|
|
chkShowContent: TCheckBox;
|
|
SaveImageEnDialog1: TSaveImageEnDialog;
|
|
btnInsertPage: TButton;
|
|
btnMovePage: TButton;
|
|
edtTIFFImageDescription: TEdit;
|
|
edtTIFFPageName: TEdit;
|
|
cmbTIFFCompression: TComboBox;
|
|
lblCompression: TLabel;
|
|
lblPageName: TLabel;
|
|
lblDescription: TLabel;
|
|
btnUpdate: TButton;
|
|
btnAdjustParams: TButton;
|
|
btnRotate: TButton;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FileListBox1Change(Sender: TObject);
|
|
procedure updPageClick(Sender: TObject; Button: TUDBtnType);
|
|
procedure Button1Click(Sender: TObject);
|
|
procedure Button5Click(Sender: TObject);
|
|
procedure Button6Click(Sender: TObject);
|
|
procedure btnAddPageClick(Sender: TObject);
|
|
procedure btnAdjustParamsClick(Sender: TObject);
|
|
procedure btnInsertPageClick(Sender: TObject);
|
|
procedure btnMovePageClick(Sender: TObject);
|
|
procedure btnRotateClick(Sender: TObject);
|
|
procedure btnUpdateClick(Sender: TObject);
|
|
procedure chkShowContentClick(Sender: TObject);
|
|
procedure cmbTIFFCompressionChange(Sender: TObject);
|
|
procedure IEMIO1FinishWork(Sender: TObject);
|
|
procedure IEMIO1Progress(Sender: TObject; per: Integer);
|
|
procedure IEMView1Click(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
fIEMultiBitmap : TIEMultiBitmap;
|
|
procedure UpdateDisplay(bUpdateImages : Boolean = False);
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
uses
|
|
ushowpage, imageenio;
|
|
|
|
{$R *.DFM}
|
|
{$R WindowsTheme.res}
|
|
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
begin
|
|
fIEMultiBitmap := TIEMultiBitmap.Create;
|
|
|
|
// Make our multi-bitmap store its own IO parameters list
|
|
fIEMultiBitmap.ParamsEnabled := True;
|
|
|
|
// Improve styling of TImageEnMView
|
|
IEMView1.SetModernStyling( True, 180, 150 );
|
|
end;
|
|
|
|
procedure TMainForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
FreeAndNil( fIEMultiBitmap );
|
|
end;
|
|
|
|
procedure TMainForm.FileListBox1Change(Sender: TObject);
|
|
begin
|
|
// Load selected image into Multi-Bitmap
|
|
fIEMultiBitmap.Clear;
|
|
fIEMultiBitmap.Read( FileListBox1.FileName );
|
|
UpdateDisplay( True );
|
|
end;
|
|
|
|
|
|
procedure TMainForm.updPageClick(Sender: TObject; Button: TUDBtnType);
|
|
begin
|
|
UpdateDisplay;
|
|
end;
|
|
|
|
|
|
// Save
|
|
procedure TMainForm.Button1Click(Sender: TObject);
|
|
begin
|
|
SaveImageEnDialog1.AutoSetFilterFileType := ioTIFF;
|
|
if SaveImageEnDialog1.execute then
|
|
fIEMultiBitmap.Write( SaveImageEnDialog1.Filename );
|
|
end;
|
|
|
|
// Delete Page
|
|
procedure TMainForm.Button5Click(Sender: TObject);
|
|
begin
|
|
fIEMultiBitmap.DeleteImage( updPage.Position );
|
|
UpdateDisplay( True );
|
|
end;
|
|
|
|
// Show Page
|
|
procedure TMainForm.Button6Click(Sender: TObject);
|
|
var
|
|
tmp:TMemoryStream;
|
|
begin
|
|
tmp := TMemoryStream.Create;
|
|
fIEMultiBitmap.Write( tmp, ioTIFF );
|
|
tmp.Position := 0;
|
|
|
|
fshowpage.ImageEnView1.IO.Params.TIFF_ImageIndex := updPage.Position;
|
|
fshowpage.ImageEnView1.IO.LoadFromStreamTIFF( tmp );
|
|
|
|
tmp.free;
|
|
|
|
fshowpage.ImageEnView1.Fit;
|
|
fshowpage.ShowModal;
|
|
end;
|
|
|
|
// Add/Insert page
|
|
// This inserts a single page loaded from a supported file
|
|
procedure TMainForm.btnAddPageClick(Sender: TObject);
|
|
var
|
|
IdxStr: string;
|
|
begin
|
|
// Select file to insert
|
|
if OpenImageEnDialog1.Execute then
|
|
begin
|
|
// Choose the inserting page
|
|
IdxStr := IntToStr( fIEMultiBitmap.Count );
|
|
if InputQuery('Page Insertion Index','Specify the index of the new image', IdxStr ) = False then
|
|
exit;
|
|
|
|
// Insert the file
|
|
fIEMultiBitmap.InsertImage( StrToIntDef( IdxStr, 0 ), OpenImageEnDialog1.FileName );
|
|
|
|
// Update
|
|
UpdateDisplay( True );
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.btnAdjustParamsClick(Sender: TObject);
|
|
var
|
|
mio : TImageEnMIO;
|
|
begin
|
|
// Attach our Multi-Bitmap to access its methods
|
|
mio := TImageEnMIO.CreateFromIEMBitmap( fIEMultiBitmap );
|
|
if mio.DoPreviews( updPage.Position ) then
|
|
UpdateDisplay( True );
|
|
mio.Free;
|
|
end;
|
|
|
|
procedure TMainForm.btnInsertPageClick(Sender: TObject);
|
|
begin
|
|
// Select file to insert
|
|
if OpenImageEnDialog1.Execute then
|
|
begin
|
|
// Append the file
|
|
fIEMultiBitmap.AppendImage( OpenImageEnDialog1.FileName );
|
|
// update
|
|
UpdateDisplay( True );
|
|
end;
|
|
end;
|
|
|
|
procedure TMainForm.btnMovePageClick(Sender: TObject);
|
|
var
|
|
IdxStr: string;
|
|
begin
|
|
// Choose the inserting page
|
|
IdxStr := IntToStr( fIEMultiBitmap.Count );
|
|
if InputQuery('Page Destination Index','Specify the new index of this page', IdxStr ) = False then
|
|
exit;
|
|
|
|
// Insert the file
|
|
fIEMultiBitmap.MoveImage( updPage.Position, StrToIntDef( IdxStr, 0 ));
|
|
|
|
// Update
|
|
UpdateDisplay( True );
|
|
end;
|
|
|
|
procedure TMainForm.btnRotateClick(Sender: TObject);
|
|
begin
|
|
// Rotate all frames of the Multi-Bitmap
|
|
fIEMultiBitmap.RotateAll( 270 ); // 270 = 90 CW
|
|
UpdateDisplay( True );
|
|
end;
|
|
|
|
procedure TMainForm.btnUpdateClick(Sender: TObject);
|
|
var
|
|
idx: Integer;
|
|
begin
|
|
// Set I/O params of the specified frame
|
|
idx := updPage.Position;
|
|
fIEMultiBitmap.Params[ idx ].TIFF_Compression := TIOTIFFCompression( cmbTIFFCompression.ItemIndex );
|
|
fIEMultiBitmap.Params[ idx ].TIFF_ImageDescription := edtTIFFImageDescription.Text;
|
|
fIEMultiBitmap.Params[ idx ].TIFF_PageName := edtTIFFPageName.Text;
|
|
end;
|
|
|
|
procedure TMainForm.chkShowContentClick(Sender: TObject);
|
|
begin
|
|
UpdateDisplay( True );
|
|
end;
|
|
|
|
procedure TMainForm.cmbTIFFCompressionChange(Sender: TObject);
|
|
begin
|
|
btnUpdate.Enabled := True;
|
|
end;
|
|
|
|
procedure TMainForm.IEMIO1FinishWork(Sender: TObject);
|
|
begin
|
|
ProgressBar1.Visible := False;
|
|
end;
|
|
|
|
procedure TMainForm.IEMIO1Progress(Sender: TObject; per: Integer);
|
|
begin
|
|
ProgressBar1.Position := per;
|
|
ProgressBar1.Visible := True;
|
|
end;
|
|
|
|
procedure TMainForm.IEMView1Click(Sender: TObject);
|
|
begin
|
|
updPage.Position := IEMView1.SelectedImage;
|
|
UpdateDisplay;
|
|
end;
|
|
|
|
procedure TMainForm.UpdateDisplay(bUpdateImages : Boolean = False);
|
|
var
|
|
idx: Integer;
|
|
begin
|
|
if bUpdateImages then
|
|
begin
|
|
lblMax.Caption := Format( 'of %d', [ fIEMultiBitmap.Count ]);
|
|
if chkShowContent.Checked then
|
|
IEMView1.AssignEx( fIEMultiBitmap )
|
|
else
|
|
IEMView1.clear;
|
|
end;
|
|
|
|
if updPage.Position >= fIEMultiBitmap.Count then
|
|
updPage.Position := fIEMultiBitmap.Count - 1;
|
|
|
|
if chkShowContent.checked then
|
|
IEMView1.SelectedImage := updPage.Position;
|
|
|
|
if fIEMultiBitmap.Count > 0 then
|
|
begin
|
|
// Read I/O params of the specified frame
|
|
idx := updPage.Position;
|
|
cmbTIFFCompression.ItemIndex := ord( fIEMultiBitmap.Params[ idx ].TIFF_Compression );
|
|
edtTIFFImageDescription.Text := fIEMultiBitmap.Params[ idx ].TIFF_ImageDescription;
|
|
edtTIFFPageName.Text := fIEMultiBitmap.Params[ idx ].TIFF_PageName;
|
|
end;
|
|
btnUpdate.Enabled := False;
|
|
end;
|
|
|
|
end.
|