树形目录在PB中的实现与应用.doc_第1页
树形目录在PB中的实现与应用.doc_第2页
树形目录在PB中的实现与应用.doc_第3页
树形目录在PB中的实现与应用.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文详细介绍树形目录在PB中的实现与应用摘要: 本文结合具体的实际应用, 介绍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 树形目录实现的实例通过树形目录可以获取计算机中的任意目录, 然后显示需要显示的文件(本例中显示浏览器可以查看的文件类型:htm,html,swf,gif,jpg,txt等)。程序中主要使用的控件如下所示:控件名类型说明tv_dirTreeView显示树形目录lb_fileListBox显示相应目录中的文件ole_dispMicrosoft Web浏览器控件对选定文件进行浏览lb_dirListBox显示驱动器信息lb_nextListBox显示当前目录下级目录信息程序具体实现分成以下几个步骤:第一步:在tv_dir的constructor事件中生成所有驱动器信息, 代码如下:/显示所有驱动器,并加入目录树中treeviewitem ltvi_newint li_count, iString ls_DriverTypelb_dir.DirList(,16384)li_count = lb_dir.totalitems()IF li_count 0 thenfor i = 1 to li_countltvi_New.Label = lb_dir.Text(i)ltvi_New.Data = i -1ltvi_New.Children = TRUE/根据驱动器类型设置图标ls_DriverType=uf_drivetype(lb_dir.Text(i)/函数uf_drivetype用来获取驱动器类型, 根据类型设置图标Choose case ls_DriverTypecase REMOVABLEltvi_New.PictureIndex = 5ltvi_New.SelectedPictureIndex =5CASE FIXEDltvi_New.PictureIndex = 1ltvi_New.SelectedPictureIndex =2CASE CDROMltvi_New.PictureIndex = 6ltvi_New.SelectedPictureIndex =6END CHOOSEThis.InsertItemlast(0, ltvi_New)nextThis.selectitem(1)End if第二步, 在tv_dir的itempopulate事件中生成相应目录的下级目录信息:String ls_Driver,ls_DataInt li_level,li_num,li_i,li_new_levelTreeViewItem ltvi_choosetreeviewitem ltvi_new,ltvi_parentlong ll_handle/获取当前所选目录tv_dir.GetItem(handle,ltvi_choose)li_Level = ltvi_Choose.Levellb_dir.dirlist(,0)/IF li_level=1 Then /选择目录树中的驱动器ls_Driver=Mid(ltvi_choose.label,3,1)lb_dir.DirList(ls_Driver+:,16+32768) /显示当前目录子目录信息li_num=lb_Dir.totalitems()For li_i=1 to li_numls_Data=lb_dir.Text(li_i)If Mid(ls_data,1,1)= Thenltvi_New.Label =mid(ls_data,2,len(ls_data) -2 )ltvi_New.Data = 1LB_next.dirlist(ls_driver+:+ltvi_New.Label,16+32768)if lb_next.totalitems()1 Thenltvi_New.Children = TRUEelseltvi_New.Children = FalseEnd ifltvi_New.PictureIndex = 3ltvi_New.SelectedPictureIndex =4tv_dir.InsertItemlast(handle, ltvi_New)End ifNextEnd IfIF li_level=2 Then /选择目录树中的子目录ls_driver=uf_get_dir(li_level,tv_dir,handle,ltvi_choose.label)lb_dir.DirList(ls_Driver,16+32768) /显示当前目录子目录信息li_num=lb_Dir.totalitems()For li_i=1 to li_numls_Data=lb_dir.Text(li_i)If Mid(ls_data,1,1)= and mid(ls_data,2,2). Thenltvi_New.Label =mid(ls_data,2,len(ls_data) -2 )ltvi_New.Data = 1LB_next.dirlist(ls_driver+ltvi_New.Label,16+32768)if lb_next.totalitems()1 Thenltvi_New.Children = TRUEelseltvi_New.Children = FalseEnd ifltvi_New.PictureIndex = 3ltvi_New.SelectedPictureIndex =4tv_dir.InsertItemlast(handle, ltvi_New)End ifNextEnd If第三步:当用户单击某一具体目录时, 显示该目录中满足条件的文件名, 代码如下:/tv_dir中Click事件代码Int li_num,li_i,li_long,iTreeViewItem ltvi_curString ls_dir,ls_dataString Filetype8/设定需要显示的文件类型filetype1=.htmfiletype2=.htmlfiletype4=.swffiletype5=.giffiletype6=.jpgfiletype7=.shtmlfiletype8=.txtli_long=8this.GetItem(handle,ltvi_cur)If ltvi_cur.level=1 thenls_dir=mid(ltvi_cur.Label,3,1)+:elsels_dir=uf_get_dir(ltvi_cur.level,this,handle,ltvi_cur.Label)end ifis_dir=ls_dirLb_next.DirList(ls_dir+*.*,0+1+2+4+32) /显示所有文件li_num=lb_Dir.totalitems()lb_file.Reset()/将指定文件显示在列表框中For li_i=1 to li_numls_Data=lb_next.Text(li_i)For i=1 to li_longif match(lower(Right(ls_data,len(FileTypei),Filetypei) then lb_file.addItem(ls_data)NextNext第四步:在OLE控件中显示所选文件的内容, 主要代码如下:/显示文件内容String ls_filenameIf len(is_dir)=3 Thenls_filename=is_dir+this.text(index)Elsels_filename=is_dir+this.text(index)End ifole_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_parentInt li_new_levelLong ll_handleString ls_driver/找到当前级别的上一级的信息ls_driver=ps_strli_new_level=pi_levelll_handle=handledo while li_new_level1ll_handle=tv_dir.FindItem(ParentTreeItem!,ll_handle)tv_dir.GetItem(ll_handle,ltvi_parent)li_new_level=ltvi_parent.levelif li_new_level=1 thenls_drive

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论