【PB】利用 IE5 增强编辑控件的功能

熟悉 Windows 的读者都知道,“运行”对话框的“打开”编辑控件,提供了两个比较特别的功能:一个是自动完成功能,即键入字符后编辑控件提供建议选项供选用 (AutoSuggest),如图1;另一个是拖放功能,即将文件拖放到“运行”对话框后编辑控件会显示文件列表,如图2。通过在 PowerBuilder 中调用 Win32 API 函数可以使单行编辑控件 (Single-line Edit Control) 和多行编辑控件 (Multi-line Edit Control) 实现上述功能。本文将就如何实现上述功能展开讨论。

图1图1

图2图2

自动完成功能
 Win32 API 函数 SHAutoComplete 是实现该功能的关键,它的 Powersoft 原型是:

Function ULong SHAutoComplete(ULong hwndEdit,ULong dwFlags) Library "Shlwapi.dll"

参数 hwndEdit 是编辑控件的句柄,可以用 Handle 函数获得。

参数 dwFlags 是控件 SHAutoComplete 操作的标志,具体如下:

SHACF_AUTOAPPEND_FORCE_OFF2147483648忽略注册表的缺省值并强行关闭自动添加功能。
SHACF_AUTOAPPEND_FORCE_ON1073741824忽略注册表的缺省值并强行打开自动添加功能。
SHACF_AUTOSUGGEST_FORCE_OFF536870912忽略注册表的缺省值并强行关闭自动建议功能。
SHACF_AUTOSUGGEST_FORCE_ON268435456忽略注册表的缺省值并强行打开自动建议功能。
SHACF_DEFAULT0缺省值,等价于SHACF_FILESYSTEM | SHACF_URLALL。
SHACF_FILESYSTEM1包括文件系统和虚拟文件夹。
SHACF_URLALL6包括用户历史和最近使用列表中的URL。
SHACF_URLHISTORY2包括用户历史列表中的URL。
SHACF_URLMRU4包括最近使用列表中的URL。
SHACF_USETAB8允许用户按Tab键选择建议选项列表。

该函数需要 Internet Explorer 5 提供的动态链接库 Shlwapi.dll (ver 5.00)。

该功能的实现脚本如下:

sle_autocom.Event Constructor( ) returns  long
// dwFlags:  SHACF_USETAB | SHACF_FILESYSTEM | SHACF_URLALL = 15
SHAutoComplete(Handle( this ),  15 )

 拖放功能

实现拖放功能要用到 Win32 API 函数 DragAcceptFiles、DragFinish、DragQueryFileA 和 PathIsLFNFileSpecA,他们的 Powersoft 原型为:

Subroutine DragAcceptFiles(ULong hWnd,Boolean fAccept) Library "Shell32.dll"

函数 DragAcceptFiles 用于注册窗口是否接受放下的文件。

Subroutine DragFinish(ULong hDrop) Library "Shell32.dll"

函数 DragFinish 用于释放为接受文件分配的内存。参数 hDrop 是用于描述被放下文件的结构的标识号。

Function ULong DragQueryFileA(ULong hDrop,ULong iFile,ref String lpszFile,ULong cch) Library "Shell32.dll"

函数 DragQueryFileA 用于获取被放下的文件名。参数 iFile 是文件名的索引值;参数 cch 是 lpszFile 长度。

Function Boolean PathIsLFNFileSpecA(String pszName) Library "Shlwapi.dll"

函数 PathIsLFNFileSpecA 用于判断文件名是否是长文件名。该函数需要 Internet Explorer 5 提供的动态链接库 Shlwapi.dll (ver 5.00)。

该功能的实现脚本如下:

w_main.Event Open( ) returns  long
DragAcceptFiles(Handle(
this ),  true )
w_main.Event Close( ) returns long
DragAcceptFiles(Handle(
this), false)

 声明自定义事件 DropFiles:

w_main.Event DropFiles( long  handle) returns  long  [pbm_dropfiles]
UInt  lui_index 
//  文件索引值 (基于0)
UInt  lui_filenum  //  文件数
String  ls_filename  //  文件名
 
lui_filenum 
=  DragQueryFileA(handle,  - 1 , ls_filename,  256 //  获取文件数

for  lui_index  =   0  to lui_filenum  -   1
    DragQueryFileA(handle, lui_index, ls_filename, 
256 //  获取文件名    
     if  sle_autocom.text  <>   ""  then sle_autocom.text  +=   "   "   //  在文件名间放置空格
     if  PathIsLFNFileSpecA(ls_fileName) then        
        ls_fileName 
=   ' " '   +  ls_fileName  +   ' " '   //  长文件名加双引号
    end  if
    sle_autocom.text 
+=  ls_fileName
next
 
DragFinish(handle) 
// 释放内存
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值