BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Multi/Checkboxes/umain.pas

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.