unit umain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, ieview, ImageEnView, FileCtrl, StdCtrls, ImageEnIO, ComCtrls, ExtCtrls, hyieutils, iexBitmaps, hyiedefs, iesettings, iexLayers, iexRulers; type TForm1 = class(TForm) StringGrid1: TStringGrid; Panel2: TPanel; ImageEnView1: TImageEnView; ProgressBar1: TProgressBar; DriveComboBox1: TDriveComboBox; DirectoryListBox1: TDirectoryListBox; FileListBox1: TFileListBox; btnSaveChanges: TButton; btnClearIPTC: TButton; procedure FormCreate(Sender: TObject); procedure FileListBox1Change(Sender: TObject); procedure ImageEnView1Progress(Sender: TObject; per: Integer); procedure btnSaveChangesClick(Sender: TObject); procedure btnClearIPTCClick(Sender: TObject); procedure ImageEnView1FinishWork(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} {$R WindowsTheme.res} uses iexMetaHelpers; // Initialize properties grid procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.NewGridForIPTC; end; // Load a file procedure TForm1.FileListBox1Change(Sender: TObject); begin if IsKnownFormat(FileListBox1.FileName) then begin // we need only a thumbnail (fast load) ImageEnView1.io.Params.Width := ImageEnView1.Width; ImageEnView1.io.Params.Height := ImageEnView1.Height; ImageEnView1.io.Params.JPEG_Scale := ioJPEG_AUTOCALC; ImageEnView1.io.LoadFromFile(FileListBox1.FileName); // read IPTC StringGrid1.ReadGridFromIPTC(ImageEnView1.io.Params); end; end; // Show progress procedure TForm1.ImageEnView1Progress(Sender: TObject; per: Integer); begin ProgressBar1.Position := per; end; // Reset progress procedure TForm1.ImageEnView1FinishWork(Sender: TObject); begin ProgressBar1.Position := 0; end; // Save changes procedure TForm1.btnSaveChangesClick(Sender: TObject); var bIPTCChanged: Boolean; begin bIPTCChanged := StringGrid1.WriteGridToIPTC( ImageEnView1.IO.Params ); if bIPTCChanged then case ImageEnView1.io.Params.FileType of ioJPEG: // inject iptc in jpeg ImageEnView1.io.InjectJpegIPTC(FileListBox1.FileName); ioTIFF: // save iptc in TIFF ImageEnView1.io.SaveToFile(FileListBox1.FileName); end; end; // Clear grid procedure TForm1.btnClearIPTCClick(Sender: TObject); begin ImageEnView1.io.Params.IPTC_Info.Clear; StringGrid1.ClearGridFields; end; end.