線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1885
推到 Plurk!
推到 Facebook!

請教用ListView顯示文件夾問題

尚未結案
qalin
一般會員


發表:20
回覆:45
積分:13
註冊:2003-07-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-17 09:59:29 IP:221.228.xxx.xxx 未訂閱
我在嘗試用ListView,可下面的例子出錯,我不知道錯在哪里?各路大蝦能否指教一下?謝謝... { 該演示程序可以顯示各類Windows系統圖標,包括文件圖標、磁盤圖標、文件夾圖標、用戶特定可執行文件圖標。這些圖標都不需要親手繪製。 } unit Unit1; const Test = 'C:\'; { Test爲測試數據,在本例中返回的是一個驅動器圖標。讀者 可以自行選擇其他測試數據如:Test:='C:\Autoexec.bat' 等等。} var Form1: TForm1; ShFileInfo: TSHFILEINFO; function GetFileIconIndex(FileName: String): Integer; { 獲取圖標的序號函數 } var Ext: String; begin Ext := FileName; Result := ShGetFileInfo(PChar(Ext), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME); Result := SHFileInfo.iIcon; { 返回獲取的圖標序號 } end; procedure TForm1.FormCreate(Sender: TObject); begin with ListView1 do begin SmallImages := TImageList.CreateSize(32, 32); SmallImages.ShareImages := True; SmallImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_ICON or SHGFI_SYSICONINDEX); LargeImages := TImageList.CreateSize(32, 32); LargeImages.ShareImages := True; LargeImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_ICON or SHGFI_SYSICONINDEX); end; { 分配系統資源給ListView1組件以顯示圖標 } end; procedure TForm1.Button1Click(Sender: TObject); begin ListView1.Items.Item[0].ImageIndex := GetFileIconIndex(Test); { 爲ListView1中的第一個項目繪製圖標 } end; end.
qalin
一般會員


發表:20
回覆:45
積分:13
註冊:2003-07-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-17 12:07:43 IP:218.90.xxx.xxx 未訂閱
谢谢alphakao,我按照您的方法试了,虽然没有出错提示,可结果什么也没有?? <>< face="Verdana, Arial, Helvetica">引言:
 
procedure TForm1.Button1Click(Sender: TObject);
var
  X:TListItem;
begin
  x:=ListView1.Items.Add;
  x.ImageIndex:= GetFileIconIndex(Test);
//ListView1.Items.Item[0].ImageIndex := GetFileIconIndex(Test);
//                還沒有東西,就要用了,那當然會錯呀~
{ ?ListView1中的第一??目?制?? }
end;
 
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-17 15:25:15 IP:218.15.xxx.xxx 未訂閱
引言: 我在嘗試用ListView,可下面的例子出錯,我不知道錯在哪里?各路大蝦能否指教一下?謝謝... { 該演示程序可以顯示各類Windows系統圖標,包括文件圖標、磁盤圖標、文件夾圖標、用戶特定可執行文件圖標。這些圖標都不需要親手繪製。 } unit Unit1; const Test = 'C:\'; { Test爲測試數據,在本例中返回的是一個驅動器圖標。讀者 可以自行選擇其他測試數據如:Test:='C:\Autoexec.bat' 等等。} var Form1: TForm1; ShFileInfo: TSHFILEINFO; function GetFileIconIndex(FileName: String): Integer; function GetFileIconIndex(FileName: String): HIcon; { 獲取圖標的序號函數 } var Ext: String; begin Ext := FileName; Result := ShGetFileInfo(PChar(Ext), 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME); Result := SHFileInfo.iIcon; { 返回獲取的圖標序號 } end; procedure TForm1.FormCreate(Sender: TObject); begin with ListView1 do begin SmallImages := TImageList.CreateSize(32, 32); SmallImages.ShareImages := True; SmallImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_ICON or SHGFI_SYSICONINDEX); LargeImages := TImageList.CreateSize(32, 32); LargeImages.ShareImages := True; LargeImages.Handle := ShGetFileInfo('*.*', 0, SHFileInfo, SizeOf(SHFileInfo), SHGFI_LARGEICON or SHGFI_ICON or SHGFI_SYSICONINDEX); end; { 分配系統資源給ListView1組件以顯示圖標 } end; procedure TForm1.Button1Click(Sender: TObject); begin ListView1.Items.Item[0].ImageIndex := GetFileIconIndex(Test); //Listview1.Items.Item[0].caption:='try';确保Listview1有节点 { 爲ListView1中的第一個項目繪製圖標 } end; end.
qalin您好:试试上面所修改,不过不知您FormCreate事件中的作用为何,好像是做了重复的工作,猜应该是Listview1中没项目,所以看不出效果来,试试看 ——行径窄处,留一步与人行—— ——Never give up, never surrender——
qalin
一般會員


發表:20
回覆:45
積分:13
註冊:2003-07-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-17 18:55:59 IP:218.90.xxx.xxx 未訂閱
引言: [quote] function GetFileIconIndex(FileName: String): Integer; function GetFileIconIndex(FileName: String): HIcon; { 獲取圖標的序號函數 } qalin您好:试试上面所修改,不过不知您FormCreate事件中的作用为何,好像是做了重复的工作,猜应该是Listview1中没项目,所以看不出效果来,试试看 ——行径窄处,留一步与人行—— ——Never give up, never surrender——
谢谢deity,我按您说的改了,而且用下面方式加了项目: with ListView1.Items.Add do begin Caption:=test; //添加第一项 ImageIndex := GetFileIconIndex(test); end; 可还是没有图标出现,我想可能是我的环境不行,我用的是Win2000Pro Delphi7。那可不好办了
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-17 23:15:32 IP:218.32.xxx.xxx 未訂閱
qalin 你好: 如果你只是要顯示...可以參用 TShellListView 元件(在 "Samples" Page 下). 之前建議你用 TListView 係考慮其他的功能(如在 TitleClick 可排序), 據我所知, 這些功能在 TShellListView 元件, 不容易做.
qalin
一般會員


發表:20
回覆:45
積分:13
註冊:2003-07-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-18 01:58:16 IP:61.177.xxx.xxx 未訂閱
引言: qalin 你好: 如果你只是要顯示...可以參用 TShellListView 元件(在 "Samples" Page 下). 之前建議你用 TListView 係考慮其他的功能(如在 TitleClick 可排序), 據我所知, 這些功能在 TShellListView 元件, 不容易做.
谢谢Mickey! 我本来的意思是要做一个客户端,可以自动登录到文件服务器,并能看见指定目录下的所有文件夹和文件,但要求限定一次只能对一个文件进行打开或者复制的操作.本想用ftp要安全一些,可界面要写得友好一些不容易,而且不知道速度会不会慢.如果用TShellListView又不安全...所以才考虑尝试用TreeView FileListBox(我发现这个速度很快)或者用TreeView ListView,没想到中途还是碰到很多问题,呵呵在过一会还不行我就用 >
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-18 10:31:47 IP:218.15.xxx.xxx 未訂閱
引言: function GetFileIconIndex(FileName: String): Integer; function GetFileIconIndex(FileName: String): HIcon; { 獲取圖標的序號函數 } qalin您好:试试上面所修改,不过不知您FormCreate事件中的作用为何,好像是做了重复的工作,猜应该是Listview1中没项目,所以看不出效果来,试试看 ----失言,失言 > ——行径窄处,留一步与人行—— ——> > 可还是没有图标出现,我想可能是我的环境不行,我用的是 > <>我在> < face="Verdana, Arial, Helvetica"> ——行径窄处,留一步与人行—— ——Never give up, never surrender——
qalin
一般會員


發表:20
回覆:45
積分:13
註冊:2003-07-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-18 12:39:22 IP:61.177.xxx.xxx 未訂閱
deity您好,谢谢您能测试。 我的环境和您的一样,在公司的其他装了win2k的电脑上也无法显示图标,但在win98下却可以!应该有两种可能,一是我们的局域网感染了病毒(不过可能性不大,在我家的winXP下也不行),二是ShGetFileInfo函数在win2k下可能有些问题。 谢谢大家!
系統時間:2024-05-17 20:01:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!