BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Multi/FolderMView/Main.pas

485 lines
16 KiB
Plaintext

unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ieview,
iexFolderMView, iemView, StdCtrls, ExtCtrls, iemio, imageenview, iexActionsFolder, ActiveX,
ComCtrls, ShlObj, Menus, ActnList, hyieutils, iexBitmaps, hyiedefs, iesettings,
iexLayers, iexRulers;
type
TForm1 = class(TForm)
IEFolderMView: TImageEnFolderMView;
pnlRight: TPanel;
tmrUpdatePreview: TTimer;
Splitter1: TSplitter;
grpFolder: TGroupBox;
edtFolder: TEdit;
grpThumbSettings: TGroupBox;
chkSoftShadow: TCheckBox;
lblThumbnailClipping: TLabel;
lblPercent: TLabel;
btnSetClipping: TButton;
lblTopText: TLabel;
lblFileTypes: TLabel;
cmbFileTypes: TComboBox;
lblMask: TLabel;
edtFileMask: TEdit;
cmbTopText: TComboBox;
lblInfoText: TLabel;
cmbInfoText: TComboBox;
lblBottomText: TLabel;
cmbBottomText: TComboBox;
btnRefresh: TButton;
grpPreview: TGroupBox;
chkShowHiddenFiles: TCheckBox;
lblThumbSize: TLabel;
lblX: TLabel;
chkShowFileHint: TCheckBox;
chkShowFolders: TCheckBox;
btnSelectFolder: TButton;
lblExample: TLabel;
grpFolderSettings: TGroupBox;
chkAscending: TCheckBox;
lblSorting: TLabel;
chkMonitorFolder: TCheckBox;
chkUseSystemPopup: TCheckBox;
chkDragDrop: TCheckBox;
cmbSorting: TComboBox;
grpFileOpSettings: TGroupBox;
chkShowConfirmation: TCheckBox;
chkShowProgress: TCheckBox;
chkVerboseErrors: TCheckBox;
chkSendToRecycleBin: TCheckBox;
popSettings: TPopupMenu;
pupLoadSettings: TMenuItem;
popSaveSettings: TMenuItem;
pnlPreview: TPanel;
chkPreview: TCheckBox;
ImageEnView1: TImageEnView;
edtThumbWidth: TEdit;
updThumbWidth: TUpDown;
edtThumbHeight: TEdit;
updThumbHeight: TUpDown;
edtClipping: TEdit;
updClipping: TUpDown;
popThumbOptionsEx: TPopupMenu;
pitShowIconForUnknownFormat: TMenuItem;
pitShowIconWhileLoading: TMenuItem;
pitShowShadowForIcons: TMenuItem;
pitShowShadowForFolders: TMenuItem;
lblThumbOptionsEx: TLabel;
chkEnableSpecialFolders: TCheckBox;
lblAlso: TLabel;
btnOpenParent: TButton;
N2: TMenuItem;
pupIncludeSubFolders: TMenuItem;
procedure btnOpenParentClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnRefreshClick(Sender: TObject);
procedure btnSelectFolderClick(Sender: TObject);
procedure btnSetClippingClick(Sender: TObject);
procedure chkAscendingClick(Sender: TObject);
procedure chkDragDropClick(Sender: TObject);
procedure chkEnableSpecialFoldersClick(Sender: TObject);
procedure chkMonitorFolderClick(Sender: TObject);
procedure chkPreviewClick(Sender: TObject);
procedure chkShowFileHintClick(Sender: TObject);
procedure chkShowFoldersClick(Sender: TObject);
procedure chkShowHiddenFilesClick(Sender: TObject);
procedure chkSoftShadowClick(Sender: TObject);
procedure chkUseSystemPopupClick(Sender: TObject);
procedure cmbBottomTextChange(Sender: TObject);
procedure cmbFileTypesChange(Sender: TObject);
procedure cmbInfoTextChange(Sender: TObject);
procedure cmbSortingChange(Sender: TObject);
procedure cmbTopTextChange(Sender: TObject);
procedure FileOpCtrlClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure IEFolderMViewFolderChanged(Sender: TObject);
procedure IEFolderMViewImageSelect(Sender: TObject; idx: Integer);
procedure lblThumbOptionsExMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure pitShowShadowForFoldersClick(Sender: TObject);
procedure popSaveSettingsClick(Sender: TObject);
procedure popThumbOptionsExPopup(Sender: TObject);
procedure pupIncludeSubFoldersClick(Sender: TObject);
procedure pupLoadSettingsClick(Sender: TObject);
procedure spnClippingChange(Sender: TObject);
procedure tmrUpdatePreviewTimer(Sender: TObject);
private
fSettingOps : Boolean;
procedure ReadFolderSettings;
procedure UpdateSelection;
procedure InitializeControls;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{$R WindowsTheme.res}
uses
iexHelperfunctions, iexRegistryFunctions;
procedure TForm1.btnOpenParentClick(Sender: TObject);
begin
IEFolderMView.OpenParentFolder;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// The folder that will be shown on start up
IEFolderMView.DefaultFolder := iedfMyPictures;
// Or display a specific folder: IEFolderMView.Folder := 'C:\My Folder\';
// Allow dragging and dropping to/from Windows Explorer
IEFolderMView.AutoDragFiles := [iedaMove, iedaCopy];
IEFolderMView.AutoDropFiles := [iedaMove, iedaCopy];
// Options for moving, copying, deleting and pasting files
IEFolderMView.FileOperationOptions := [ieioShowConfirmation, ieioSendToRecycleBin, ieioShowProgress, ieioVerboseErrors];
// Quality of displayed thumbnails
IEFolderMView.ThumbnailResampleFilter := rfNone;
IEFolderMView.ThumbnailDisplayFilter := rfFastLinear;
// What common folder behaviours should ImageEnFolderMView handle itself?
IEFolderMView.FolderInteract := [ieboOpenFoldersOnDblClick, ieboLaunchImagesOnDblClick, ieboLaunchFilesOnDblClick, ieboEnableFolderShortcuts, ieboEnableFileShortcuts, ieboClickToSortColumns];
// Size of thumbnail
IEFolderMView.ThumbWidth := 130;
IEFolderMView.ThumbHeight := 130;
// Gives best quality when loading files on demand
IEFolderMView.StoreType := ietFastThumb;
// Any files types to exlude, e.g. 'DOC'
IEFolderMView.ExclusionMask := '';
// EXIF thumbnails can be faster, but quality cannot be guaranteed
IEFolderMView.EnableLoadEXIFThumbnails := False;
IEFolderMView.MultiSelectionOptions := [iemoRegion, iemoSelectOnRightClick, iemoOptimizeForDragging];
// File extensions to display if FileTypes = iefCustom
IEFolderMView.FileTypesMask := 'jpg,jpeg,jpe';
// Sort order
IEFolderMView.SortOrder := iesbFilenameWithoutPath;
// Showing Folders, but not hidden files
IEFolderMView.ShowFolders := True;
IEFolderMView.ShowHiddenFiles := False;
// Allow navigation up to desktop
IEFolderMView.EnableSpecialFolders := True;
// Use Windows Explorer Thumbnails for speed and caching
IEFolderMView.EnableLoadExplorerThumbnails := True;
// But ensure we have file params in case user display the image info
IEFolderMView.IOOptionsEx := IEFolderMView.IOOptionsEx + [ ieixWantParams ];
// Speed up loading and filling by using the file extension rather than analyzing the content to determine its type
IEFolderMView.IOOptionsEx := IEFolderMView.IOOptionsEx + [ ieixLoadOnlyByFileExt ];
// Make mouse wheel behave like Windows Explorer. Scrolls the control, or if Ctrl is pressed it changes the view
IEFolderMView.MouseWheelParams.Action := iemwVScroll;
IEFolderMView.MouseWheelParamsAlt.Action := iemwZoomView;
end;
procedure TForm1.btnRefreshClick(Sender: TObject);
begin
ReadFolderSettings;
IEFolderMView.RefreshFileList;
end;
procedure TForm1.btnSelectFolderClick(Sender: TObject);
begin
ReadFolderSettings;
IEFolderMView.PromptForFolder;
end;
procedure TForm1.btnSetClippingClick(Sender: TObject);
begin
IEFolderMView.ThumbWidth := StrToIntDef(edtThumbWidth.Text , IEFolderMView.ThumbWidth );
IEFolderMView.ThumbHeight := StrToIntDef(edtThumbHeight.Text , IEFolderMView.ThumbHeight );
IEFolderMView.ThumbnailClipping := StrToIntDef(edtClipping.Text , IEFolderMView.ThumbnailClipping );
btnSetClipping.Enabled := False;
end;
procedure TForm1.chkAscendingClick(Sender: TObject);
begin
IEFolderMView.SortAscending := chkAscending.checked;
end;
procedure TForm1.chkDragDropClick(Sender: TObject);
begin
if chkDragDrop.checked then
begin
IEFolderMView.AutoDragFiles := [iedaMove, iedaCopy];
IEFolderMView.AutoDropFiles := [iedaMove, iedaCopy];
end
else
begin
IEFolderMView.AutoDragFiles := [];
IEFolderMView.AutoDropFiles := [];
end
end;
procedure TForm1.chkEnableSpecialFoldersClick(Sender: TObject);
begin
IEFolderMView.EnableSpecialFolders := chkEnableSpecialFolders.checked;
end;
procedure TForm1.chkMonitorFolderClick(Sender: TObject);
begin
IEFolderMView.AutoRefresh := chkMonitorFolder.checked;
end;
procedure TForm1.chkPreviewClick(Sender: TObject);
begin
if chkPreview.checked then
IEFolderMView.FolderInteract := IEFolderMView.FolderInteract - [ieboLaunchImagesOnDblClick]
else
IEFolderMView.FolderInteract := IEFolderMView.FolderInteract + [ieboLaunchImagesOnDblClick];
UpdateSelection;
end;
procedure TForm1.chkShowFileHintClick(Sender: TObject);
begin
IEFolderMView.ShowThumbnailHint := chkShowFileHint.checked;
end;
procedure TForm1.chkShowFoldersClick(Sender: TObject);
begin
IEFolderMView.ShowFolders := chkShowFolders.checked;
end;
procedure TForm1.chkShowHiddenFilesClick(Sender: TObject);
begin
IEFolderMView.ShowHiddenFiles := chkShowHiddenFiles.checked;
end;
procedure TForm1.chkSoftShadowClick(Sender: TObject);
begin
IEFolderMView.SoftShadow.Enabled := chkSoftShadow.checked;
if IEFolderMView.SoftShadow.Enabled then
begin
IEFolderMView.SideGap := 0;
IEFolderMView.UpperGap := 0;
IEFolderMView.BottomGap := 0;
end
else
begin
IEFolderMView.SideGap := 6;
IEFolderMView.UpperGap := 6;
IEFolderMView.BottomGap := 6;
end;
IEFolderMView.RefreshFileList;
end;
procedure TForm1.chkUseSystemPopupClick(Sender: TObject);
begin
IEFolderMView.PopupMenuUseSystem := chkUseSystemPopup.Checked;
end;
procedure TForm1.cmbBottomTextChange(Sender: TObject);
begin
IEFolderMView.DefaultBottomText := TIEImageEnMViewDefaultText(cmbBottomText.ItemIndex);
end;
procedure TForm1.cmbFileTypesChange(Sender: TObject);
begin
edtFileMask.Enabled := TIEFolderFileTypes(cmbFileTypes.ItemIndex) = iefCustom;
lblMask.Enabled := edtFileMask.Enabled;
IEFolderMView.FileTypes := TIEFolderFileTypes(cmbFileTypes.ItemIndex);
end;
procedure TForm1.cmbInfoTextChange(Sender: TObject);
begin
IEFolderMView.DefaultInfoText := TIEImageEnMViewDefaultText(cmbInfoText.ItemIndex);
end;
procedure TForm1.cmbSortingChange(Sender: TObject);
begin
IEFolderMView.SortOrder := TIEImageEnMViewSortBy(cmbSorting.ItemIndex);
end;
procedure TForm1.cmbTopTextChange(Sender: TObject);
begin
IEFolderMView.DefaultTopText := TIEImageEnMViewDefaultText(cmbTopText.ItemIndex);
end;
procedure TForm1.FileOpCtrlClick(Sender: TObject);
var
FileOps : TIEFileOperationOptions;
begin
if fSettingOps then
exit;
FileOps := [];
if chkShowConfirmation.checked then
FileOps := FileOps + [ieioShowConfirmation];
if chkSendToRecycleBin.checked then
FileOps := FileOps + [ieioSendToRecycleBin];
if chkShowProgress.checked then
FileOps := FileOps + [ieioShowProgress];
if chkVerboseErrors.checked then
FileOps := FileOps + [ieioVerboseErrors];
IEFolderMView.FileOperationOptions := FileOps;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
InitializeControls;
end;
procedure TForm1.InitializeControls;
begin
fSettingOps := True;
try
chkMonitorFolder.checked := IEFolderMView.AutoRefresh;
chkUseSystemPopup.Checked := IEFolderMView.PopupMenuUseSystem;
chkAscending.checked := IEFolderMView.SortAscending;
cmbBottomText.ItemIndex := Ord(IEFolderMView.DefaultBottomText);
cmbInfoText.ItemIndex := Ord(IEFolderMView.DefaultInfoText);
cmbTopText.ItemIndex := Ord(IEFolderMView.DefaultTopText);
cmbSorting.ItemIndex := Ord(IEFolderMView.SortOrder);
cmbFileTypes.ItemIndex := Ord(IEFolderMView.FileTypes);
edtFileMask.Text := IEFolderMView.FileTypesMask;
chkShowHiddenFiles.checked := IEFolderMView.ShowHiddenFiles;
edtThumbWidth.Text := IntToStr(IEFolderMView.ThumbWidth);
edtThumbHeight.Text := IntToStr(IEFolderMView.ThumbHeight);
edtClipping.Text := IntToStr(IEFolderMView.ThumbnailClipping);
chkShowFileHint.checked := IEFolderMView.ShowThumbnailHint;
chkShowFolders.checked := IEFolderMView.ShowFolders;
chkDragDrop.checked := IEFolderMView.AutoDragFiles <> [];
chkShowConfirmation.checked := ieioShowConfirmation in IEFolderMView.FileOperationOptions;
chkSendToRecycleBin.checked := ieioSendToRecycleBin in IEFolderMView.FileOperationOptions;
chkShowProgress.checked := ieioShowProgress in IEFolderMView.FileOperationOptions;
chkVerboseErrors.checked := ieioVerboseErrors in IEFolderMView.FileOperationOptions;
btnSetClipping.Enabled := False;
finally
fSettingOps := False;
end;
end;
procedure TForm1.IEFolderMViewFolderChanged(Sender: TObject);
begin
edtFolder.Text := IEFolderMView.Folder;
btnOpenParent.Enabled := IEFolderMView.CanOpenParentFolder;
end;
procedure TForm1.IEFolderMViewImageSelect(Sender: TObject; idx: Integer);
begin
UpdateSelection;
end;
procedure TForm1.lblThumbOptionsExMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
lPoint: TPoint;
begin
lPoint := lblThumbOptionsEx.ClientToScreen(Point(0, lblThumbOptionsEx.Height));
popThumbOptionsEx.PopUp(lPoint.X, lPoint.Y);
end;
procedure TForm1.pitShowShadowForFoldersClick(Sender: TObject);
var
AItem : TIEMThumbnailOptionsExItems;
begin
AItem := TIEMThumbnailOptionsExItems(TControl(Sender).Tag);
if AItem in IEFolderMView.ThumbnailOptionsEx then
IEFolderMView.ThumbnailOptionsEx := IEFolderMView.ThumbnailOptionsEx - [AItem]
else
IEFolderMView.ThumbnailOptionsEx := IEFolderMView.ThumbnailOptionsEx + [AItem];
IEFolderMView.Update;
end;
procedure TForm1.popSaveSettingsClick(Sender: TObject);
begin
{$IFDEF Delphi2005orNewer}
IEFolderMView.SaveToRegistry('Software\ImageEn\IEFolderMViewDemo');
{$ENDIF}
end;
procedure TForm1.popThumbOptionsExPopup(Sender: TObject);
begin
pitShowIconForUnknownFormat .Tag := ord(ietxShowIconForUnknownFormat);
pitShowIconWhileLoading .Tag := ord(ietxShowIconWhileLoading );
pitShowShadowForIcons .Tag := ord(ietxShowShadowForIcons );
pitShowShadowForFolders .Tag := ord(ietxShowShadowForFolders );
pitShowIconForUnknownFormat .Checked := TIEMThumbnailOptionsExItems(pitShowIconForUnknownFormat.Tag) in IEFolderMView.ThumbnailOptionsEx;
pitShowIconWhileLoading .Checked := TIEMThumbnailOptionsExItems(pitShowIconWhileLoading .Tag) in IEFolderMView.ThumbnailOptionsEx;
pitShowShadowForIcons .Checked := TIEMThumbnailOptionsExItems(pitShowShadowForIcons .Tag) in IEFolderMView.ThumbnailOptionsEx;
pitShowShadowForFolders .Checked := TIEMThumbnailOptionsExItems(pitShowShadowForFolders .Tag) in IEFolderMView.ThumbnailOptionsEx;
pitShowShadowForIcons .Enabled := chkSoftShadow.checked;
pitShowShadowForFolders .Enabled := chkSoftShadow.checked;
end;
procedure TForm1.pupIncludeSubFoldersClick(Sender: TObject);
begin
pupIncludeSubFolders.checked := not pupIncludeSubFolders.checked;
IEFolderMView.IncludeSubFolders := pupIncludeSubFolders.checked;
end;
procedure TForm1.pupLoadSettingsClick(Sender: TObject);
begin
{$IFDEF Delphi2005orNewer}
IEFolderMView.LoadFromRegistry('Software\ImageEn\IEFolderMViewDemo');
InitializeControls;
{$ENDIF}
end;
procedure TForm1.ReadFolderSettings;
begin
IEFolderMView.FileTypesMask := edtFileMask.Text;
end;
procedure TForm1.spnClippingChange(Sender: TObject);
begin
btnSetClipping.Enabled := True;
end;
procedure TForm1.tmrUpdatePreviewTimer(Sender: TObject);
begin
tmrUpdatePreview.Enabled := False;
if chkPreview.checked = False then
ImageEnView1.Blank
else
if ImageEnView1.IO.Params.Filename <> IEFolderMView.SelectedFilename then
begin
if IEFolderMView.SelectedFilename = '' then
ImageEnView1.Blank
else
ImageEnView1.IO.LoadFromFile(IEFolderMView.SelectedFilename);
end;
end;
procedure TForm1.UpdateSelection;
begin
tmrUpdatePreview.Enabled := False;
tmrUpdatePreview.Enabled := True;
end;
end.