這在TabSet的OnDrawTab事件處理過程中完成
procedure TFMForm
R: TRect; Index: Integer; Selected: Boolean)
var
Bitmap: TBitmap;
begin
Bitmap := TBitmap(DriveTabSet
with TabCanvas do
begin
Draw(R
TextOut(R
end;
end;
在子窗口的File菜單中
● Open :打開或運行一個文件(從文件列表框雙擊該文件可實現同樣效果)
● Move :文件在不同目錄間的移動
● Copy :文件拷貝
● Delete :文件刪除
● Rename :文件更名
● Properties :顯示文件屬性
文件打開功能可以運行一個可執行文件
文件打開功能實現的關鍵是利用了Windows API函數ShellExecute
function ExecuteFile(const FileName
ShowCmd: Integer)
var
zFileName
begin
Result := ShellExecute(Application
StrPCopy(zFileName
StrPCopy(zDir
end;
以上函數在fmxutils單元中定義
有關ShellExecute中各參數的具體含義讀者可查閱聯機Help文件
StrPCopy把一個Pascal類型的字符串拷貝到一個無結束符的PChar類型字符串中
在子窗口的Open
procedure TFMForm
begin
with FileList do
ExecuteFile(FileName
end;
如果FileList允許顯示目錄的話(即FileType屬性再增加一項ftDirectory)
procefure TFMForm
begin
With FileList do
begin
if HasAttr(FileName
DirectoryOutline
else
ExecuteFile(FileName
end;
end;
其中HasAttr是一個fmxutils單元中的自定義函數
function HasAttr(const FileName: String; Attr: Word)
begin
Result := (FileGetAttr(FileName) and Attr) = Attr;
end;
文件拷貝的關鍵是使用了以文件句柄為操作對象的文件管理函數
在文件拷貝中首先檢查目標文件名是否是一個目錄
過程CopyFile實現上述功能
procedure CopyFile(const FileName
var
CopyBuffer: Pointer;
TimeStamp
Source
Destination: TFileName;
const
ChunkSize: Longint =
begin
Destination := ExpandFileName(DestName)
if HasAttr(Destination
Destination := Destination +
TimeStamp := FileAge(FileName)
GetMem(CopyBuffer
try
Source := FileOpen(FileName
if Source <
raise EFOpenError
try
Dest := FileCreate(Destination)
if Dest <
raise EFCreateError
try
repeat
BytesCopied := FileRead(Source
if BytesCopied >
FileWrite(Dest
until BytesCopied < ChunkSize;
finally
FileSetDate(Dest
FileClose(Dest)
end;
finally
FileClose(Source)
end;
finally
FreeMem(CopyBuffer
end;
end;
如果我們不使用FileSetDate過程
文件移動事實上是文件拷貝與文件刪除的結合
procedure MoveFile(const FileName
var
Destination: TFileName;
begin
Destination := ExpandFileName(DestName)
if not RenameFile(FileName
begin
if HasAttr(FileName
raise EFCantMove
CopyFile(FileName
DeleteFile(FileName)
end;
end;
EFCanMove是一個自定義異常類
type
EFCanMove := Class(EStreamError)
有關自定義異常類請參閱第十二章
文件刪除
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25232.html