格式

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. strcpy, mencpy, memmove三者区别

    首先来看strcpy,目的是实现字符串的复制,这里需要注意几个点: 1.判断指针的有效性 2.将复制后的指针地址返回,为了支持链式操作 3.不要忘记将字符串最后一个自负'\0'复制给dest 4.注意 ...

  2. Object.prototype.toString.call() 区分对象类型(判断对象类型)

    在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组. ...

  3. nexus 7 2013 驱动安装及root

    驱动安装 Nexus 7 2013连接上电脑后,设备管理器显示新设备 nexus 7 待安装驱动(其实是MTP设备待安装驱动).去谷歌网站下载最新的USB驱动,version 8.0 的.与以前的版本 ...

  4. android 开发代码被黑客破译有那么容易吗?

    很多程序员辛辛苦苦开发出的android开发代码,很容易就被黑客翻译了. Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了 ...

  5. 关于优化性能<主要是速度方面>的个人心得 【转】

    一个web项目后期的维护主要在于性能方面.数据吞吐量一旦增大各种bug都出来了.那些通过硬件<数据库分表,数据库主从分离,读写分离>等的一些手段此处就不多说了.本文主要在编码方面做一个性能 ...

  6. Android快捷支付SDK Demo resultStatus={4001};memo={參数错误};result={}问题

    在支付宝中粘贴RSA公钥并提交,然后问题就完美攻克了...

  7. 嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度

    嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度 上一篇笔记介绍了一些绕开排程器(或调度程序,scheduler)来进行时间管理的一些小方法.这一篇详细介绍RTX的任务调度原理. RTX主要有 ...

  8. mybatisnet轻量级ORM框架

    https://code.google.com/p/mybatisnet/source/checkout http://blog.csdn.net/arvinstudy/article/details ...

  9. [置顶] 【IOS】IOS7 UI适配

    昨天下了把手机升级成了IOS7 正式版,然后下了最新的xocde5.  试着编译了一下刚刚完成的几个应用,还好问题不大,半个小时的时间都适配好了,然后改了下几个新出现的warning.过几天等空了,要 ...

  10. C# in Depth阅读笔记2:C#2特性

    1.方法组转换 c#2支持一个从方法组到兼容委托类型的隐式转换,即如: button.click+=new eventhandler(logevent)可以写成 button.click+=logev ...