📄 useldir.pas
字号:
//2005-6-21
//由于需要汉化,因此复制源码,重新生成可执行文件.
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ }
{ Copyright (c) 1995-2001 Borland Software Corporation }
{ }
{*******************************************************}
unit uSelDir platform;
{$R-,T-,H+,X+}
interface
uses Windows, Messages, SysUtils, Classes, Controls, Graphics, Forms,
Menus, StdCtrls, Buttons;
const
SSelectDirCap = '请选择目录';
SDirNameCap = '选择目录(&N):';
SDrivesCap = '驱动器(&r):';
SDirsCap = '目录(&D):';
SFilesCap = '文件*.*(&F):';
SNetworkCap = '网络(&t)...';
SOKButton = '确定';
SCancelButton = '取消';
SHelpButton = '帮助(&H)';
SConfirmCreateDir = '指定目录不存在.要创建吗?';
SDefaultFilter = '所有文件 (*.*)|*.*';
type
TFileAttr = (ftReadOnly, ftHidden, ftSystem, ftVolumeID, ftDirectory,
ftArchive, ftNormal);
TFileType = set of TFileAttr;
TDriveType = (dtUnknown, dtNoDrive, dtFloppy, dtFixed, dtNetwork, dtCDROM,
dtRAM);
TDirectoryListBox = class;
TFilterComboBox = class;
TDriveComboBox = class;
{ TFileListBox }
TFileListBox = class(TCustomListBox)
private
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
function GetDrive: char;
function GetFileName: string;
function IsMaskStored: Boolean;
procedure SetDrive(Value: char);
procedure SetFileEdit(Value: TEdit);
procedure SetDirectory(const NewDirectory: string);
procedure SetFileType(NewFileType: TFileType);
procedure SetMask(const NewMask: string);
procedure SetFileName(const NewFile: string);
procedure SetShowGlyphs (Value: Boolean);
procedure ResetItemHeight;
protected
FDirectory: string;
FMask: string;
FFileType: TFileType;
FFileEdit: TEdit;
FDirList: TDirectoryListBox;
FFilterCombo: TFilterComboBox;
ExeBMP, DirBMP, UnknownBMP: TBitmap;
FOnChange: TNotifyEvent;
FLastSel: Integer;
FShowGlyphs: Boolean;
procedure CreateWnd; override;
procedure ReadBitmaps; virtual;
procedure Click; override;
procedure Change; virtual;
procedure ReadFileNames; virtual;
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function GetFilePath: string; virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Update; reintroduce;
procedure ApplyFilePath (const EditText: string); virtual;
property Drive: char read GetDrive write SetDrive;
property Directory: string read FDirectory write ApplyFilePath;
property FileName: string read GetFilePath write ApplyFilePath;
published
property Align;
property Anchors;
property AutoComplete;
property BevelEdges;
property BevelInner;
property BevelKind;
property BevelOuter;
property Color;
property Constraints;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property ExtendedSelect;
property FileEdit: TEdit read FFileEdit write SetFileEdit;
property FileType: TFileType read FFileType write SetFileType default [ftNormal];
property Font;
property ImeMode;
property ImeName;
property IntegralHeight;
property ItemHeight;
property Mask: string read FMask write SetMask stored IsMaskStored;
property MultiSelect;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowGlyphs: Boolean read FShowGlyphs write SetShowGlyphs default False;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
end;
{ TDirectoryListBox }
TDirectoryListBox = class(TCustomListBox)
private
FFileList: TFileListBox;
FDriveCombo: TDriveComboBox;
FDirLabel: TLabel;
FInSetDir: Boolean;
FPreserveCase: Boolean;
FCaseSensitive: Boolean;
function GetDrive: char;
procedure SetFileListBox(Value: TFileListBox);
procedure SetDirLabel(Value: TLabel);
procedure SetDirLabelCaption;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure SetDrive(Value: char);
procedure DriveChange(NewDrive: Char);
procedure SetDir(const NewDirectory: string);
procedure SetDirectory(const NewDirectory: string); virtual;
procedure ResetItemHeight;
protected
ClosedBMP, OpenedBMP, CurrentBMP: TBitmap;
FDirectory: string;
FOnChange: TNotifyEvent;
procedure Change; virtual;
procedure DblClick; override;
procedure ReadBitmaps; virtual;
procedure CreateWnd; override;
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
function ReadDirectoryNames(const ParentDirectory: string;
DirectoryList: TStringList): Integer;
procedure BuildList; virtual;
procedure KeyPress(var Key: Char); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function DisplayCase(const S: String): String;
function FileCompareText(const A, B: String): Integer;
function GetItemPath(Index: Integer): string;
procedure OpenCurrent;
procedure Update; reintroduce;
property Drive: Char read GetDrive write SetDrive;
property Directory: string read FDirectory write SetDirectory;
property PreserveCase: Boolean read FPreserveCase;
property CaseSensitive: Boolean read FCaseSensitive;
published
property Align;
property Anchors;
property AutoComplete;
property BevelEdges;
property BevelInner;
property BevelKind;
property BevelOuter;
property Color;
property Columns;
property Constraints;
property Ctl3D;
property DirLabel: TLabel read FDirLabel write SetDirLabel;
property DragCursor;
property DragMode;
property Enabled;
property FileList: TFileListBox read FFileList write SetFileListBox;
property Font;
property ImeMode;
property ImeName;
property IntegralHeight;
property ItemHeight;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnChange: TNotifyEvent read FOnChange write FOnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDrag;
end;
{ TDriveComboBox }
TTextCase = (tcLowerCase, tcUpperCase);
TDriveComboBox = class(TCustomComboBox)
private
FDirList: TDirectoryListBox;
FDrive: Char;
FTextCase: TTextCase;
procedure SetDirListBox (Value: TDirectoryListBox);
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
procedure SetDrive(NewDrive: Char);
procedure SetTextCase(NewTextCase: TTextCase);
procedure ReadBitmaps;
procedure ResetItemHeight;
protected
FloppyBMP, FixedBMP, NetworkBMP, CDROMBMP, RAMBMP: TBitmap;
procedure CreateWnd; override;
procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); override;
procedure Click; override;
procedure BuildList; virtual;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Text;
property Drive: Char read FDrive write SetDrive;
published
property Anchors;
property AutoComplete;
property AutoDropDown;
property BevelEdges;
property BevelInner;
property BevelKind;
property BevelOuter;
property Color;
property Constraints;
property Ctl3D;
property DirList: TDirectoryListBox read FDirList write SetDirListBox;
property DragMode;
property DragCursor;
property Enabled;
property Font;
property ImeMode;
property ImeName;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property TextCase: TTextCase read FTextCase write SetTextCase default tcLowerCase;
property Visible;
property OnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnDropDown;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnStartDrag;
end;
{ TFilterComboBox }
TFilterComboBox = class(TCustomComboBox)
private
FFilter: string;
FFileList: TFileListBox;
MaskList: TStringList;
function IsFilterStored: Boolean;
function GetMask: string;
procedure SetFilter(const NewFilter: string);
procedure SetFileListBox (Value: TFileListBox);
protected
procedure Change; override;
procedure CreateWnd; override;
procedure Click; override;
procedure BuildList;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Mask: string read GetMask;
property Text;
published
property Anchors;
property AutoComplete;
property AutoDropDown;
property BevelEdges;
property BevelInner;
property BevelKind;
property BevelOuter;
property Color;
property Constraints;
property Ctl3D;
property DragMode;
property DragCursor;
property Enabled;
property FileList: TFileListBox read FFileList write SetFileListBox;
property Filter: string read FFilter write SetFilter stored IsFilterStored;
property Font;
property ImeName;
property ImeMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnChange;
property OnClick;
property OnContextPopup;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnDropDown;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnStartDrag;
end;
procedure ProcessPath (const EditText: string; var Drive: Char;
var DirPart: string; var FilePart: string);
function MinimizeName(const Filename: TFileName; Canvas: TCanvas;
MaxLen: Integer): TFileName;
const
WNTYPE_DRIVE = 1; { from WINNET.H, WFW 3.1 SDK }
type
TSelectDirOpt = (sdAllowCreate, sdPerformCreate, sdPrompt);
TSelectDirOpts = set of TSelectDirOpt;
function SelectDirectory(var Directory: string;
Options: TSelectDirOpts; HelpCtx: Longint): Boolean; overload;
function SelectDirectory(const Caption: string; const Root: WideString;
var Directory: string): Boolean; overload;
function DirectoryExists(const Name: string): Boolean;
{$EXTERNALSYM DirectoryExists}
function ForceDirectories(const Dir: string): Boolean;
{$EXTERNALSYM ForceDirectories}
implementation
uses RTLConsts, Dialogs, ShlObj, ActiveX;
{$R FileCtrl.res}
type
TPathLabel = class(TCustomLabel)
protected
procedure Paint; override;
public
constructor Create(AnOwner: TComponent); override;
published
property Alignment;
property Transparent;
end;
{ TSelectDirDlg }
TSelectDirDlg = class(TForm)
DirList: TDirectoryListBox;
DirEdit: TEdit;
DriveList: TDriveComboBox;
DirLabel: TPathLabel;
OKButton: TButton;
CancelButton: TButton;
HelpButton: TButton;
NetButton: TButton;
FileList: TFileListBox;
procedure DirListChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DriveListChange(Sender: TObject);
procedure NetClick(Sender: TObject);
procedure OKClick(Sender: TObject);
procedure HelpButtonClick(Sender: TObject);
private
{ Private declarations }
FAllowCreate: Boolean;
FPrompt: Boolean;
WNetConnectDialog: function (WndParent: HWND; IType: Longint): Longint;
procedure SetAllowCreate(Value: Boolean);
procedure SetDirectory(const Value: string);
function GetDirectory: string;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
property Directory: string read GetDirectory write SetDirectory;
property AllowCreate: Boolean read FAllowCreate write SetAllowCreate default False;
property Prompt: Boolean read FPrompt write FPrompt default False;
end;
function SlashSep(const Path, S: String): String;
begin
if AnsiLastChar(Path)^ <> '\' then
Result := Path + '\' + S
else
Result := Path + S;
end;
{ TPathLabel }
constructor TPathLabel.Create(AnOwner: TComponent);
begin
inherited Create(AnOwner);
WordWrap := False;
AutoSize := False;
ShowAccelChar := False;
end;
procedure TPathLabel.Paint;
const
Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
Rect: TRect;
Temp: String;
begin
with Canvas do
begin
Rect := ClientRect;
if not Transparent then
begin
Brush.Color := Self.Color;
Brush.Style := bsSolid;
FillRect(Rect);
end;
Brush.Style := bsClear;
Temp := MinimizeName(Caption, Canvas, Rect.Right - Rect.Left);
DrawText(Canvas.Handle, PChar(Temp), Length(Temp), Rect,
DT_NOPREFIX or Alignments[Alignment]);
end;
end;
{ TDriveComboBox }
procedure CutFirstDirectory(var S: TFileName);
var
Root: Boolean;
P: Integer;
begin
if S = '\' then
S := ''
else
begin
if S[1] = '\' then
begin
Root := True;
Delete(S, 1, 1);
end
else
Root := False;
if S[1] = '.' then
Delete(S, 1, 4);
P := AnsiPos('\',S);
if P <> 0 then
begin
Delete(S, 1, P);
S := '...\' + S;
end
else
S := '';
if Root then
S := '\' + S;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -