格式

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. web前端开发常用工具

    http://www.gbin1.com/technology/javautilities/20120806-resource-for-front-end-developer/ 冒泡样式 http:/ ...

  2. 在ubuntu10.0.4下更新git

    今天想到要在ubuntu10.0.4下下载android的源码学习一下.源码下载用到了git.以前安装过git以为应该没什么问题的,没想到报了 “fatal: git 1.7.2 or later r ...

  3. 论山寨手机与Android 【13】SmartPhone AP系统

    在第9章中我们提到,从功能上讲对于智能手机的一个粗略的概括是,智能手机 == 电脑 + 移动网卡,或者更准确地说,智能手机的硬件结构分为应用程序处理器AP,和基带处理器BP两个部分.这里隐含着两个问题 ...

  4. 可爱的 Python : Python中函数式编程,第一部分

    英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...

  5. C语言入门(20)——使用VC2013对C语言进行调试

    软件调试过程中,有时会一些逻辑和内存访问方面的问题,如果没有调试器的帮助,找出何处代码导致这块内存被更改是一件非常麻烦的事情.恰当运用数据断点可以快速帮我们定位问题的所在. 1.VC的调试快捷键 F5 ...

  6. poj3062---输入什么输出什么

    #include <stdio.h> #include <stdlib.h> int main() { ]; while(gets(str) != NULL) { printf ...

  7. 数据挖掘(七):Apriori算法:频繁模式挖掘

    1 算法思想 算法使用频繁项集性质的先验知识.Apriori使用一种称作逐层搜索的迭代方法,k项集用于探索(k+1)项集.首先,通过扫描数据库,累积每个项的计数,并收集满足最小支持度的项,找出频繁1项 ...

  8. 今天是迅驰ORM的诞生之日。

    欢迎各位朋友来造访,最主要还是那一点:版权所有,请尊重驰哥的著作版权,侵权必追究法律责任. 最后来一句刘德华的歌曲:独自去偷欢,我谢绝你监管!快乐心中常为我伴.

  9. 安卓Xpost框架

    http://pcedu.pconline.com.cn/484/4841077_all.html

  10. Python核心编程读笔 7: 条件和循环

    第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...