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;
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;
function HasAttr(const FileName: String; Attr: Word): Boolean;
begin
Result := (FileGetAttr(FileName) and Attr) = Attr;
end;
位元運算判斷檔案/目錄/唯讀/隱藏等屬性。
TServiceApplication、TService、TServiceThread 架構解析
用 Delphi 編寫安裝程序(一):資源打包與界面實現