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.