首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 檔案管理器啟動邏輯:Owner-Draw 磁碟機標籤、ShellExecute 開啟檔案與屬性檢測

     編輯:Delphi

DriveTabSet Owner-Draw 繪製

OnMeasureTab 計算寬度(文字+位圖),OnDrawTab 繪製位圖與文字:

procedure TFMForm.DriveTabSetMeasureTab(Sender: TObject; Index: Integer; var TabWidth: Integer);
var BitmapWidth: Integer;
begin
  BitmapWidth := TBitmap(DriveTabSet.Tabs.Objects[Index]).Width;
  Inc(TabWidth, 2 + BitmapWidth);
end;

procedure TFMForm.DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas; R: TRect; Index: Integer; Selected: Boolean);
var Bitmap: TBitmap;
begin
  Bitmap := TBitmap(DriveTabSet.Tabs.Objects[Index]);
  with TabCanvas do
  begin
    Draw(R.Left, R.Top + 4, Bitmap);
    TextOut(R.Left + 2 + Bitmap.Width, R.Top + 2, DriveTabSet.Tabs[Index]);
  end;
end;

檔案開啟:ShellExecute 封裝

Windows API 需 PChar,Delphi 字串為 String,封裝轉換函數:

function ExecuteFile(const FileName, Params, DefaultDir: String; ShowCmd: Integer): THandle;
var zFileName, zParams, zDir: array[0..79] of Char;
begin
  Result := ShellExecute(Application.MainForm.Handle, nil,
    StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
    StrPCopy(zDir, DefaultDir), ShowCmd);
end;

事件處理:

procedure TFMForm.Open1Click(Sender: TObject);
begin
  with FileList do
    if HasAttr(FileName, faDirectory) then
      DirectoryOutline.Directory := FileName
    else
      ExecuteFile(FileName, '', Directory, SW_SHOW);
end;

屬性檢測函數 HasAttr

function HasAttr(const FileName: String; Attr: Word): Boolean;
begin
  Result := (FileGetAttr(FileName) and Attr) = Attr;
end;

位元運算判斷檔案/目錄/唯讀/隱藏等屬性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved