unit umain; interface uses Windows, Messages, SysUtils, {$IfNDef VER130} Variants, {$EndIf} Classes, Graphics, Controls, Forms, Dialogs, ieview, iemview, StdCtrls, FileCtrl, hyieutils, ExtCtrls, ImageEnIO, ComCtrls, iexBitmaps; type TMainForm = class(TForm) GroupBox1: TPanel; DriveComboBox1: TDriveComboBox; DirectoryListBox1: TDirectoryListBox; ImageEnMView1: TImageEnMView; chkCustomDraw: TCheckBox; lblPos: TLabel; cmbPosition: TComboBox; lblCheckedCount: TLabel; btnCheckAll: TButton; btnUncheckAll: TButton; chkOnlyAllowJPEG: TCheckBox; lblHorzMargin: TLabel; edtMarginHorz: TEdit; edtMarginVert: TEdit; updMarginVert: TUpDown; updMarginHorz: TUpDown; lblVertMargin: TLabel; btnUpdate: TButton; btnShowChecked: TButton; lblCheckboxes: TLabel; cmbCheckboxes: TComboBox; procedure btnCheckAllClick(Sender: TObject); procedure btnShowCheckedClick(Sender: TObject); procedure btnUncheckAllClick(Sender: TObject); procedure btnUpdateClick(Sender: TObject); procedure cmbCheckboxesChange(Sender: TObject); procedure chkCustomDrawClick(Sender: TObject); procedure cmbPositionChange(Sender: TObject); procedure DirectoryListBox1Change(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ImageEnMView1CheckboxClick(Sender: TObject; idx: Integer; var bChecked: Boolean); procedure ImageEnMView1Click(Sender: TObject); procedure UpdateCheckboxParams; private procedure UpdateCheckboxPosition; procedure UpdateCheckedCountDisplay; { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.DFM} {$R WindowsTheme.res} procedure TMainForm.btnCheckAllClick(Sender: TObject); begin ImageEnMView1.CheckAll; UpdateCheckedCountDisplay; end; procedure TMainForm.btnShowCheckedClick(Sender: TObject); const Max_Display_Count = 20; var sChecked: string; iChecked: Integer; I: Integer; begin sChecked := ''; iChecked := 0; for I := 0 to ImageEnMView1.ImageCount - 1 do if ImageEnMView1.Checked[I] then begin sChecked := sChecked + #13#10 + ExtractFilename(ImageEnMView1.ImageFilename[I]); inc(iChecked); if iChecked > Max_Display_Count then begin sChecked := sChecked + #13#10 + '...'; break; end; end; if sChecked = '' then ShowMessage('No files are checked') else ShowMessage(format('%d files are checked:', [ImageEnMView1.CheckedCount]) + #13#10 + sChecked); end; procedure TMainForm.btnUncheckAllClick(Sender: TObject); begin ImageEnMView1.UncheckAll; UpdateCheckedCountDisplay; end; procedure TMainForm.btnUpdateClick(Sender: TObject); begin UpdateCheckboxParams; end; procedure TMainForm.cmbCheckboxesChange(Sender: TObject); var bHaveCheckboxes: Boolean; begin bHaveCheckboxes := TIEMCheckboxType(cmbCheckboxes.ItemIndex) <> iecbNone; btnShowChecked .Enabled := bHaveCheckboxes; lblCheckedCount .Enabled := bHaveCheckboxes; btnCheckAll .Enabled := bHaveCheckboxes; btnUncheckAll .Enabled := bHaveCheckboxes; chkCustomDraw .Enabled := bHaveCheckboxes; chkOnlyAllowJPEG .Enabled := bHaveCheckboxes; lblVertMargin .Enabled := bHaveCheckboxes; edtMarginVert .Enabled := bHaveCheckboxes; updMarginVert .Enabled := bHaveCheckboxes; btnUpdate .Enabled := bHaveCheckboxes; updMarginHorz .Enabled := bHaveCheckboxes; edtMarginHorz .Enabled := bHaveCheckboxes; lblHorzMargin .Enabled := bHaveCheckboxes; lblPos .Enabled := bHaveCheckboxes; cmbPosition .Enabled := bHaveCheckboxes; UpdateCheckboxPosition; end; procedure TMainForm.chkCustomDrawClick(Sender: TObject); begin UpdateCheckboxParams; end; procedure TMainForm.UpdateCheckboxParams; const CUSTOM_CHECK_WIDTH = 16; CUSTOM_CHECK_HEIGHT = 16; function _CreateCustomCheckboxBmp(bChecked : Boolean) : TBitmap; begin Result := TBitmap.create; Result.Width := CUSTOM_CHECK_WIDTH; Result.Height := CUSTOM_CHECK_HEIGHT; with Result.Canvas do begin Pen.Color := clNavy; Pen.Width := 2; Brush.Color := clWhite; Brush.Style := bsSolid; Rectangle(0, 0, CUSTOM_CHECK_WIDTH + 1, CUSTOM_CHECK_HEIGHT + 1); if bChecked then begin MoveTo(2, 2); LineTo(CUSTOM_CHECK_WIDTH - 3, CUSTOM_CHECK_HEIGHT - 3); MoveTo(CUSTOM_CHECK_WIDTH - 3, 2); LineTo(2, CUSTOM_CHECK_HEIGHT - 3); end; end; end; var CheckedBmp, UncheckedBmp: TBitmap; iMarginHorz, iMarginVert: Integer; begin CheckedBmp := nil; UncheckedBmp := nil; try if chkCustomDraw.checked then begin CheckedBmp := _CreateCustomCheckboxBmp(True); UncheckedBmp := _CreateCustomCheckboxBmp(False); end; iMarginHorz := StrToIntDef(edtMarginHorz.Text, 4); iMarginVert := StrToIntDef(edtMarginVert.Text, 4); // in case non-numbers have been specified edtMarginHorz.Text := IntToStr(iMarginHorz); edtMarginVert.Text := IntToStr(iMarginVert); ImageEnMView1.SetCheckboxParams(iMarginHorz, iMarginVert, CheckedBmp, UncheckedBmp); finally FreeAndNil(CheckedBmp); FreeAndNil(UncheckedBmp); end; end; procedure TMainForm.cmbPositionChange(Sender: TObject); begin UpdateCheckboxPosition; end; procedure TMainForm.FormCreate(Sender: TObject); begin ImageEnMView1.SetModernStyling; ImageEnMView1.EnableLoadEXIFThumbnails := False; cmbPosition.ItemIndex := 0; UpdateCheckboxPosition; // load current directory DirectoryListBox1Change(self); end; // load all images in the directory procedure TMainForm.DirectoryListBox1Change(Sender: TObject); begin ImageEnMView1.Clear; ImageEnMView1.FillFromDirectory(DirectoryListBox1.Directory); ImageEnMView1.SelectedImage := 0; UpdateCheckedCountDisplay; end; procedure TMainForm.ImageEnMView1CheckboxClick(Sender: TObject; idx: Integer; var bChecked: Boolean); begin if bChecked and chkOnlyAllowJPEG.checked then if IEFileIsOfFormat(ImageEnMView1.ImageFilename[idx], ioJPEG) = False then begin MessageBeep(MB_ICONEXCLAMATION); bChecked := False; end; end; procedure TMainForm.ImageEnMView1Click(Sender: TObject); begin UpdateCheckedCountDisplay; end; procedure TMainForm.UpdateCheckboxPosition; begin ImageEnMView1.Checkboxes := TIEMCheckboxType(cmbCheckboxes.ItemIndex); ImageEnMView1.CheckboxPos := TIEMCheckboxPos(cmbPosition.ItemIndex); end; procedure TMainForm.UpdateCheckedCountDisplay; begin lblCheckedCount.Caption := format('Checked Count: %d', [ImageEnMView1.CheckedCount]); end; end.