2.画出每个自画项目 这在TabSet的OnDrawTab事件处理过程中完成。这一事件处理过程的参数中包含了待画项目索引、画板、待画区域、是否被选中等。这里我们只利用了前三个参数。事实上利用最后一个参数,我们可以对被选中的标签进行一些特殊的视觉效果处理。这一工作就留给读者自己去完成。 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; 6.4.5 文件管理基本功能的实现 在子窗口的File菜单中,定义了文件管理的基本功能,它们是: ● Open :打开或运行一个文件(从文件列表框双击该文件可实现同样效果) ● Move :文件在不同目录间的移动 ● Copy :文件拷贝 ● Delete :文件删除 ● Rename :文件更名 ● Properties :显示文件属性 6.4.5.1 文件打开 文件打开功能可以运行一个可执行文件,或把文件在与之相关联的应用程序中打开。文件总是与创建它的应用程序相关联,这种关联可以在Windows的文件管理器中修改。要注意的是:文件的关联是以后缀名为标志的,因而对一个文件关联方式的修改将影响所有相同后缀名的文件。 文件打开功能实现的关键是利用了Windows API函数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; 以上函数在 fmxutils单元中定义。fmxutils是一个自定义代码单元。 有关 ShellExecute中各参数的具体含义读者可查阅联机Help文件。 StrPCopy把一个Pascal类型的字符串拷贝到一个无结束符的PChar类型字符串中。 在子窗口的 Open1Click事件处理过程中: procedure TFMForm.Open1Click(Sender: TObject); begin with FileList do ExecuteFile(FileName, '', Directory, SW_SHOW) ; end; 如果 FileList允许显示目录的话(即FileType属性再增加一项ftDirectory),那么对于一个目录而言,打开的含义应该是显示它下边的子目录和文件。程序修改如下。 procefure TFMForm.Open1Click(Sender: Tobject);begin With FileList do begin if HasAttr(FileName,faDirectory) then DirectoryOutline.Directory := FileName else ExecuteFile(FileName,' ' ,Directory,SW_SHOW); end; end; 其中HasAttr是一个fmxutils单元中的自定义函数,用于检测指定文件是否具有某种属性。 function HasAttr(const FileName: String; Attr: Word): Boolean; begin Result := (FileGetAttr(FileName) and Attr) = Attr; end; <  
1/2 1 2 下一页 尾页 |