253 lines
6.6 KiB
Plaintext
253 lines
6.6 KiB
Plaintext
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.
|