格式

Delphi syntax:

On Windows:

function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean;

On Linux:

function SelectDirectory(const Caption: WideString; const Root: string; var Directory: string; ShowHidden: Boolean = False): Boolean;

SelectDirectory弹出对话框让用户选择目录,不改变目录的键值,在linux和windows中格式有所不同,

caption标题是长字符串

const Root指定浏览的根目录

out Directory返回所选目录

ShowHidden标识所选目录是否显示隐藏子目录

例:

uses FileCtrl;

const

SELDIRHELP = 1000;

procedure TForm1.Button1Click(Sender: TObject);

var

Dir: string;

begin

Dir := 'C:\MYDIR';

if SelectDirectory(Dir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then

Label1.Caption := Dir;

end;

由于显示的对话框不是居中显示 重新定义函数在程序中

uses

ShlObj,   ActiveX;   //必须的控件包

function   SelectDirectory(const   Caption:   string;   const   Root:   WideString;

OwnerWindow:   THandle;   out   Directory:   string):   Boolean;

var

WindowList:   Pointer;

BrowseInfo:   TBrowseInfo;

Buffer:   PChar;

RootItemIDList,   ItemIDList:   PItemIDList;

ShellMalloc:   IMalloc;

IDesktopFolder:   IShellFolder;

Eaten,   Flags:   LongWord;

begin

Result   :=   False;

Directory   :=   '';

FillChar(BrowseInfo,   SizeOf(BrowseInfo),   0);

if   (ShGetMalloc(ShellMalloc)   =   S_OK)   and   (ShellMalloc   <>   nil)   then

begin

Buffer   :=   ShellMalloc.Alloc(MAX_PATH);

try

RootItemIDList   :=   nil;

if   Root   <>   ''   then

begin

SHGetDesktopFolder(IDesktopFolder);

IDesktopFolder.ParseDisplayName(Application.Handle,   nil,

POleStr(Root),   Eaten,   RootItemIDList,   Flags);

end;

with   BrowseInfo   do

begin

hwndOwner   :=   OwnerWindow;

pidlRoot   :=   RootItemIDList;

pszDisplayName   :=   Buffer;

lpszTitle   :=   PChar(Caption);

ulFlags   :=   BIF_RETURNONLYFSDIRS;

end;

WindowList   :=   DisableTaskWindows(0);

try

ItemIDList   :=   ShBrowseForFolder(BrowseInfo);

finally

EnableTaskWindows(WindowList);

end;

Result   :=     ItemIDList   <>   nil;

if   Result   then

begin

ShGetPathFromIDList(ItemIDList,   Buffer);

ShellMalloc.Free(ItemIDList);

Directory   :=   Buffer;

end;

finally

ShellMalloc.Free(Buffer);

end;

end;

end;

调用例子:

procedure   TForm1.Button1Click(Sender:   TObject);

var

vDirectory:   string;

begin

SelectDirectory('Select   Path',   '',   Handle,   vDirectory); //此处handle即是窗口位置句柄

end;

http://www.cnblogs.com/dashan9zj/archive/2009/01/19/1378289.html

SelectDirectory使用方法以及EnableTaskWindows的更多相关文章

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  6. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  7. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  8. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. Linux下 静态链接库 和 动态链接库

    先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特 ...

  2. php 字符串是否存在

    /** * 方法库-字符串是否存在 * @param string $str :字符或字符串 * @param string $string :字符串 * @return string 例子: $st ...

  3. Cidr计算

    项目上有个需求,要求计算cidr,网上perl和php,python很多,java的很少,呵呵,虽说懂点那个,毕竟还是会这个. 所以查了一下: https://foo.cs.ucsb.edu/cs56 ...

  4. Unix/Linux环境C编程入门教程(18) kali-linuxCCPP开发环境搭建

    1. Kali linux是BT5的晋级版本,用于信息安全.基于Debian7内核.新建虚拟机. 2. 选择默认虚拟机 3. 选择稍后安装操作系统 4.选择Linux Debian7 64位,因为Ka ...

  5. string 到 wstring的转换

    string 到 wstring的转换_一景_新浪博客     string 到 wstring的转换    (2009-08-10 20:52:34)    转载▼    标签:    杂谈    ...

  6. auto, extern, register, static

    对于一个数据的定义,需要指定2中属性: 存储类型和数据类型: static int a; auto char c; register int d; 1 auto 2 extern 3 register ...

  7. fs.rename可以重新写入文件

    fs.rename可以重新写入文件 用法 fs.rename(旧path,新path,callback)可以重新写入文件 引用地址 http://www.jb51.net/article/58548. ...

  8. Win7 扩容磁盘分区

    1.计算机->管理->磁盘管理,磁盘颜色代表意义 主分区:深蓝色: 扩展分区 :绿色的框: 逻辑分区:浅蓝色的分区: 可用空间:绿色分区 2.非主分区扩容 非主分区扩容十分简单,可是须要注 ...

  9. hdu 5256 序列变换 (LIS变形)

    序列变换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  10. 使用c#获取access中所有表的表名与内容

    以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源. 这里用到了O ...