狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當前位置:系統之家 > 技術開發教程 > 詳細頁面

樹形目錄在PB中的完成與應用

樹形目錄在PB中的完成與應用

更新時間:2019-10-14 文章作者:未知 信息來源:網絡 閱讀次數:

摘要: 本文結合具體的實際應用,介紹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_file ListBox顯示相應目錄中的文件
ole_dispMicrosoft Web瀏覽器控件對選定文件進行瀏覽
lb_dirListBox顯示驅動器信息
lb_nextListBox顯示當前目錄下級目錄信息

  程序具體實現分成以下幾個步驟:

  第一步:在tv_dir的constructor事件中生成所有驅動器信息,代碼如下:

//顯示所有驅動器,并加入目錄樹中
treeviewitem ltvi_new
int li_count, i
String ls_DriverType
lb_dir.DirList("",16384)
li_count = lb_dir.totalitems()
IF li_count > 0 then
for i = 1 to li_count
ltvi_New.Label = lb_dir.Text(i)
ltvi_New.Data = i -1
ltvi_New.Children = TRUE
//根據驅動器類型設置圖標
ls_DriverType=uf_drivetype(lb_dir.Text(i))
//函數uf_drivetype用來獲取驅動器類型,根據類型設置圖標
Choose case ls_DriverType
case "REMOVABLE"
ltvi_New.PictureIndex = 5
ltvi_New.SelectedPictureIndex =5
CASE "FIXED"
ltvi_New.PictureIndex = 1
ltvi_New.SelectedPictureIndex =2
CASE "CDROM"
ltvi_New.PictureIndex = 6
ltvi_New.SelectedPictureIndex =6
END CHOOSE
This.InsertItemlast(0, ltvi_New)
next
This.selectitem(1)
End if

  第二步,在tv_dir的itempopulate事件中生成相應目錄的下級目錄信息:

String ls_Driver,ls_Data
Int li_level,li_num,li_i,li_new_level
TreeViewItem ltvi_choose
treeviewitem ltvi_new,ltvi_parent
long ll_handle
//獲取當前所選目錄
tv_dir.GetItem(handle,ltvi_choose)
li_Level = ltvi_Choose.Level
lb_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_num
ls_Data=lb_dir.Text(li_i)
If Mid(ls_data,1,1)="[" Then
ltvi_New.Label =mid(ls_data,2,len(ls_data) -2 )
ltvi_New.Data = 1
LB_next.dirlist(ls_driver+":"+ltvi_New.Label,16+32768)
if lb_next.totalitems()>1 Then
ltvi_New.Children = TRUE
else
ltvi_New.Children = False
End if
ltvi_New.PictureIndex = 3
ltvi_New.SelectedPictureIndex =4
tv_dir.InsertItemlast(handle, ltvi_New)
End if
Next
End If

IF 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_num
ls_Data=lb_dir.Text(li_i)
If Mid(ls_data,1,1)="[" and mid(ls_data,2,2)<>".." Then
ltvi_New.Label =mid(ls_data,2,len(ls_data) -2 )
ltvi_New.Data = 1
LB_next.dirlist(ls_driver+""+ltvi_New.Label,16+32768)
if lb_next.totalitems()>1 Then
ltvi_New.Children = TRUE
else
ltvi_New.Children = False
End if
ltvi_New.PictureIndex = 3
ltvi_New.SelectedPictureIndex =4
tv_dir.InsertItemlast(handle, ltvi_New)
End if
Next
End If

  第三步:當用戶單擊某一具體目錄時,顯示該目錄中滿足條件的文件名,代碼如下:

//tv_dir中Click事件代碼
Int li_num,li_i,li_long,i
TreeViewItem ltvi_cur
String ls_dir,ls_data
String Filetype[8]
//設定需要顯示的文件類型
filetype[1]=".htm"
filetype[2]=".html"
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中的用戶自定義對象,可方便地在各種地方使用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
亚洲一区二区三区在线看| 美女任你摸久久| 久久精品日产第一区二区三区高清版 | 国产伦精品一区二区三| 欧美日韩系列| 色综合网站在线| 欧美 亚欧 日韩视频在线| 91麻豆自制传媒国产之光| 99精品欧美一区二区三区综合在线| 国产91丝袜在线观看| 不卡免费追剧大全电视剧网站| 成人精品gif动图一区| 成人深夜福利app| 欧美影院一区| 夜夜嗨av一区二区三区网站四季av| 91久久亚洲| 久久狠狠婷婷| 欧美日本韩国一区二区三区视频| 欧美日韩卡一卡二| 日韩欧美一级在线播放| 久久精品人人做人人综合| 国产精品日韩精品欧美在线| 中文字幕一区在线观看| 一区二区三区在线播放| 琪琪久久久久日韩精品| 国产成人在线视频网址| 欧美黄色一级视频| 亚洲九九精品| 欧美日韩视频在线第一区| 日韩精品一区在线观看| 国产精品久久久久久一区二区三区| 亚洲黄色片在线观看| 久久精品国产**网站演员| 国产成人午夜视频| 午夜激情一区| 亚洲一区日韩| 91精品国产综合久久精品麻豆| 久久久蜜臀国产一区二区| 一区二区三区四区中文字幕| 久久国产婷婷国产香蕉| 北岛玲一区二区三区四区| 最新成人av网站| 在线国产亚洲欧美| 久久综合久久久久88| 亚洲你懂的在线视频| 日韩精品一二区| 国产精品一二三四五| 亚洲国产电影| 欧美日韩久久一区二区| 久久久久久久久久美女| 丝瓜av网站精品一区二区| 99国产精品久久久| 久久综合九色综合网站| 国产日产亚洲精品系列| 麻豆国产欧美一区二区三区| 欧美日韩一区在线视频| 欧美日韩免费高清一区色橹橹 | 亚洲午夜在线视频| 成人精品亚洲人成在线| 久久精品国产清高在天天线 | 色婷婷av一区二区三区之一色屋| 精品国产精品一区二区夜夜嗨| 亚洲综合激情小说| 91麻豆精东视频| 欧美日韩精品久久久| 亚洲欧美激情小说另类| 国产91精品入口| 在线观看日产精品| 伊人性伊人情综合网| 不卡电影免费在线播放一区| 国产一区二区三区奇米久涩| 久久综合久久综合久久综合| 美日韩一区二区三区| 黄色精品一区| 久久久精品蜜桃| 国产精品自产自拍| 欧美亚洲在线| 中文字幕一区二区三区在线观看 | 亚洲高清中文字幕| 欧美人成在线| 久久无码av三级| 国产成人在线视频网址| 在线精品亚洲一区二区不卡| 亚洲国产一区二区三区青草影视| 欧美精品尤物在线| 精品国产伦一区二区三区免费| 捆绑紧缚一区二区三区视频| 美日韩精品视频| 一区二区成人在线| 亚洲激情网址| 最新成人av在线| 欧美天天在线| 国产亚洲人成网站| 91年精品国产| 精品精品国产高清a毛片牛牛 | 国产成人亚洲综合a∨猫咪| 欧美午夜精品久久久久久超碰| 首页综合国产亚洲丝袜| 美女诱惑黄网站一区| 午夜av一区二区三区| 久久www成人_看片免费不卡| 亚洲一区二区三区四区五区黄| 国产精品毛片在线看| 夜夜精品浪潮av一区二区三区| 亚洲精品久久| 亚洲午夜精品久久久久久久久| 亚洲丰满在线| 亚洲综合视频在线| 国产精品视频福利| 天天av天天翘天天综合网色鬼国产| 夜夜嗨一区二区三区| 偷偷要91色婷婷| 欧美熟乱第一页| 国产美女娇喘av呻吟久久| 欧美精品免费视频| 国产成人av一区二区三区在线| 日韩精品在线看片z| 久久精品导航| 视频在线在亚洲| 欧美日韩精品一区二区三区 | 麻豆传媒一区二区三区| 欧美久久久久中文字幕| 成人免费不卡视频| 国产精品免费视频观看| 国产精品有限公司| 久久 天天综合| 欧美mv日韩mv| 韩国久久久久| 日韩黄色免费网站| 91精品国产一区二区三区蜜臀| 91天堂素人约啪| 亚洲男人的天堂av| 欧美亚洲一区二区三区四区| 北岛玲一区二区三区四区| 亚洲色图第一区| 欧美性色黄大片| 99re热视频精品| 亚洲国产人成综合网站| 欧美美女黄视频| 欧美在线精品一区| 午夜在线成人av| 欧美一区二区三区视频在线观看| 午夜久久99| 肉肉av福利一精品导航| 日韩精品专区在线影院重磅| 在线观看一区| 韩国成人福利片在线播放| 国产日韩v精品一区二区| 久久久久99| 91在线精品一区二区| 亚洲福利一二三区| 久久这里只有精品6| 欧美亚洲专区| 91美女蜜桃在线| 久久成人久久爱| 1000部国产精品成人观看| 欧美日韩高清一区二区三区| 国产精品porn| 国产精品一区二区三区乱码| 亚洲你懂的在线视频| 欧美变态凌虐bdsm| 老妇喷水一区二区三区| 欧美在线一二三区| 国产综合久久久久久久久久久久| 国产精品国产三级国产三级人妇| 欧美日韩激情在线| 国产麻豆日韩| 国内精品久久久久国产盗摄免费观看完整版 | 国产精品日韩欧美一区二区| 成年人午夜久久久| 麻豆传媒一区二区三区| 亚洲欧美另类在线| 久久精品无码一区二区三区| 欧美日韩一级大片网址| 制服诱惑一区二区| 牛牛国产精品| 高清国产午夜精品久久久久久| 五月婷婷激情综合网| 综合久久综合久久| 国产清纯白嫩初高生在线观看91 | 丝袜美腿亚洲一区| 《视频一区视频二区| 久久精品免费在线观看| 91精品国产麻豆国产自产在线| 免费视频一区二区三区在线观看| 欧美日韩亚洲在线| 99re这里只有精品首页| 国产精品18久久久久久久久久久久 | 午夜精品一区在线观看| 国产成人av一区二区三区在线| 亚洲高清免费在线| 亚洲乱码国产乱码精品精小说| 久久精品男人的天堂| 久久精品免视看| 久久久久高清精品| 久久精品一区二区三区四区| 日韩视频中午一区| 69堂国产成人免费视频| 欧美日韩日日夜夜| 欧美精品久久99|