树形目录在PB中的实现与应用
敬业的IT人
互联网
佚名
2008-1-8 14:49:21
摘要: 本文结合具体的实际应用,介绍PB中实现树形目录的实现机制,并给出了具体的实现过程。
1.引言
在管理信息系统的开发中,经常需要获取本地计算机中的树形目录结构和相应的文件信息,如进行目录的选择和特殊文件的选取,在PowerBuilder(简称PB)中并没有提供专门的树形目录对象,这样就需要程序开发人员自己来实现相应的树形目录。本文针对这种情况,提供了一种用纯PB代码实现树形结构的方法。
2.PB中树形目录的实现方法
PB中实现树形目录可以利用Windows本身的API函数SHBrowseForFolderA(包括在shell32.dll文件中),但该API函数只能显示相应的树形目录,不能显示文件信息,而且用户对它不能进行灵活的控制。因此,如果需要进行灵活控制,就需要程序人员自己编写相应代码。
PB中的ListBox列表框控件提供了显示目录和文件的能力。在程序中可以利用PB的树形控件TreeView动态生成树形目录结构。我们使用ListBox控件的函数DirList来实现,函数DirList以满足条件的文件名填充列表框的列表项,其使用方法如下:
listboxname.DirList(文件模式,文件类型)
其中文件类型的值如下所示:
0 可读/可写文件2 隐含文件16 子目录16384 驱动器1 只读文件4 系统文件32归档文件32768除可读/可写外所有类型
在程序中可将几种类型的值相加以获取相应的文件或目录信息。下面结合一个实例介绍树形目录的实现方法,程序界面如图1所示。

图1 树形目录实现的实例
通过树形目录可以获取计算机中的任意目录,然后显示需要显示的文件(本例中显示浏览器可以查看的文件类型:"
filetype[4]=".swf"
filetype[5]=".gif"
filetype[6]=".jpg"
filetype[7]=".shtml"
filetype[8]=".txt"
li_long=8
this.GetItem(handle,ltvi_cur)
If ltvi_cur.level=1 then
ls_dir=mid(ltvi_cur.Label,3,1)+":\"
else
ls_dir=uf_get_dir(ltvi_cur.level,this,handle,ltvi_cur.Label)
end if
is_dir=ls_dir
Lb_next.DirList(ls_dir+"\*.*",0+1+2+4+32) //显示所有文件
li_num=lb_Dir.totalitems()
lb_file.Reset()
//将指定文件显示在列表框中
For li_i=1 to li_num
ls_Data=lb_next.Text(li_i)
For i=1 to li_long
if match(lower(Right(ls_data,len(FileType[i]))),Filetype[i]) then lb_file.addItem(ls_data)
Next
Next
String ls_filename
If len(is_dir)=3 Then
ls_filename=is_dir+this.text(index)
Else
ls_filename=is_dir+"\"+this.text(index)
End if
ole_disp.object.navigate(ls_filename)
function string uf_get_dir (integer pi_level, treeview tv_dir, long handle, string ps_str);
TreeViewItem ltvi_parent
Int li_new_level
Long ll_handle
String ls_driver
//找到当前级别的上一级的信息
ls_driver=ps_str
li_new_level=pi_level
ll_handle=handle
do while li_new_level>1
ll_handle=tv_dir.FindItem(ParentTreeItem!,ll_handle)
tv_dir.GetItem(ll_handle,ltvi_parent)
li_new_level=ltvi_parent.level
if li_new_level=1 then
ls_driver=Mid(ltvi_parent.label,3,1)+":\"+ls_driver
else
ls_driver=ltvi_parent.label+"\"+ls_driver
end if
loop
Return ls_driver
1.引言
在管理信息系统的开发中,经常需要获取本地计算机中的树形目录结构和相应的文件信息,如进行目录的选择和特殊文件的选取,在PowerBuilder(简称PB)中并没有提供专门的树形目录对象,这样就需要程序开发人员自己来实现相应的树形目录。本文针对这种情况,提供了一种用纯PB代码实现树形结构的方法。
2.PB中树形目录的实现方法
PB中实现树形目录可以利用Windows本身的API函数SHBrowseForFolderA(包括在shell32.dll文件中),但该API函数只能显示相应的树形目录,不能显示文件信息,而且用户对它不能进行灵活的控制。因此,如果需要进行灵活控制,就需要程序人员自己编写相应代码。
PB中的ListBox列表框控件提供了显示目录和文件的能力。在程序中可以利用PB的树形控件TreeView动态生成树形目录结构。我们使用ListBox控件的函数DirList来实现,函数DirList以满足条件的文件名填充列表框的列表项,其使用方法如下:
listboxname.DirList(文件模式,文件类型)
其中文件类型的值如下所示:
0 可读/可写文件2 隐含文件16 子目录16384 驱动器1 只读文件4 系统文件32归档文件32768除可读/可写外所有类型
在程序中可将几种类型的值相加以获取相应的文件或目录信息。下面结合一个实例介绍树形目录的实现方法,程序界面如图1所示。

图1 树形目录实现的实例
通过树形目录可以获取计算机中的任意目录,然后显示需要显示的文件(本例中显示浏览器可以查看的文件类型:"
filetype[4]=".swf"
filetype[5]=".gif"
filetype[6]=".jpg"
filetype[7]=".shtml"
filetype[8]=".txt"
li_long=8
this.GetItem(handle,ltvi_cur)
If ltvi_cur.level=1 then
ls_dir=mid(ltvi_cur.Label,3,1)+":\"
else
ls_dir=uf_get_dir(ltvi_cur.level,this,handle,ltvi_cur.Label)
end if
is_dir=ls_dir
Lb_next.DirList(ls_dir+"\*.*",0+1+2+4+32) //显示所有文件
li_num=lb_Dir.totalitems()
lb_file.Reset()
//将指定文件显示在列表框中
For li_i=1 to li_num
ls_Data=lb_next.Text(li_i)
For i=1 to li_long
if match(lower(Right(ls_data,len(FileType[i]))),Filetype[i]) then lb_file.addItem(ls_data)
Next
Next
第四步:在OLE控件中显示所选文件的内容,主要代码如下:
String ls_filename
If len(is_dir)=3 Then
ls_filename=is_dir+this.text(index)
Else
ls_filename=is_dir+"\"+this.text(index)
End if
ole_disp.object.navigate(ls_filename)
其中程序中使用的uf_get_dir为用户自定义函数,该函数用来获取所选定目录的完整路径。
function string uf_get_dir (integer pi_level, treeview tv_dir, long handle, string ps_str);
TreeViewItem ltvi_parent
Int li_new_level
Long ll_handle
String ls_driver
//找到当前级别的上一级的信息
ls_driver=ps_str
li_new_level=pi_level
ll_handle=handle
do while li_new_level>1
ll_handle=tv_dir.FindItem(ParentTreeItem!,ll_handle)
tv_dir.GetItem(ll_handle,ltvi_parent)
li_new_level=ltvi_parent.level
if li_new_level=1 then
ls_driver=Mid(ltvi_parent.label,3,1)+":\"+ls_driver
else
ls_driver=ltvi_parent.label+"\"+ls_driver
end if
loop
Return ls_driver
3.结束语
采用上文介绍的方法可实现了树形目录结构,如信息系统的数据备份中的目录选择、照片浏览选择等,取得了较好的应用效果。本文提到的方法在实际运用可进一步完善,如可将树形目录制作成PB中的用户自定义对象,可方便地在各种地方使用。
- 最新文章
- 数据库访问技术[01-08]
- PFC服务简介[01-08]
- PFC编程基础[01-08]
- 数据库规范化技巧[01-08]
- 用VFP在INTERNET上制作数据库动态查询[01-08]
- 使用VFP的系统变量_SCREEN[01-08]
- 相关文章
- TreeView 控件应用详解[01-08]
- 数据库应用程序需注意的问题[01-08]
- 让注册表记住VFP应用程序的使用次数[01-08]
- 数据库规范化三个范式应用实例[01-08]
- VFP基础教程 第十一章 应用程序开发[01-08]
- VFP中实现在浏览器中运行应用程序方法[01-08]
