Listview怎样获得系统默认的图标? |
缺席
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
參考 show files and their associated Icons in a Listview:
http://www.swissdelphicenter.ch/en/showcode.php?id=421
{ The following example shows how to show all files and their associated icons of a folder in a TListView. To test the code, you need a ListView1 and a ImageList1 where the icons are stored. Im folgenden Beispiel werden alle Dateien & zugehörigen Icons eines Verzeichnisses in einer TListView angezeigt. Um das Beispiel zu testen, braucht man eine ListView1 und eine ImageList1 Komponente, wo die Icons gespeichert werden. } uses ShellApi; procedure LV_InsertFiles(strPath: string; ListView: TListView; ImageList: TImageList); var i: Integer; Icon: TIcon; SearchRec: TSearchRec; ListItem: TListItem; FileInfo: SHFILEINFO; begin // Create a temporary TIcon Icon := TIcon.Create; ListView.Items.BeginUpdate; try // search for the first file i := FindFirst(strPath '*.*', faAnyFile, SearchRec); while i = 0 do begin with ListView do begin // On directories and volumes if ((SearchRec.Attr and FaDirectory <> FaDirectory) and (SearchRec.Attr and FaVolumeId <> FaVolumeID)) then begin ListItem := ListView.Items.Add; //Get The DisplayName SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_DISPLAYNAME); Listitem.Caption := FileInfo.szDisplayName; // Get The TypeName SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_TYPENAME); ListItem.SubItems.Add(FileInfo.szTypeName); //Get The Icon That Represents The File SHGetFileInfo(PChar(strPath SearchRec.Name), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON or SHGFI_SMALLICON); icon.Handle := FileInfo.hIcon; ListItem.ImageIndex := ImageList.AddIcon(Icon); // Destroy the Icon DestroyIcon(FileInfo.hIcon); end; end; i := FindNext(SearchRec); end; finally Icon.Free; ListView.Items.EndUpdate; end; end; procedure TForm1.Button1Click(Sender: TObject); begin // Assign a Imagelist to the ListView ListView1.SmallImages := ImageList1; // Show Listview in Report Style and add 2 Columns ListView1.ViewStyle := vsReport; ListView1.Columns.Add; ListView1.Columns.Add; LV_InsertFiles('C:\Windows\', ListView1, ImageList1); end; |
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
我IMAGELIST2里没有放任何图标
我的代码如下:
//lvMessageParts是LISTVIEW的控件名称
procedure TFrmOAMail.DBGridEh1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Li: TListItem;
begin
inherited;
with (FDmdMant as TDmdOAMail) do
begin
lvMessageParts.Items.Clear;
QryAttach.Active := False;
QryAttach.ParamByName('pripkey').AsInteger := QryMaster.FieldByName('Pkey').AsInteger;//点击一条记录判断是否有附件
QryAttach.Active := True;
if QryAttach.RecordCount <> 0 then//有附件就把它添加进LISTVIEW
begin
QryAttach.First;
while not QryAttach.Eof do
begin
li := lvMessageParts.Items.Add;
li.Caption := QryAttach.FieldByName('AttachName').AsString;
li.SubItems.Append(QryAttach.FieldByName('Attach').AsString);
li.SubItems.Append(QryAttach.FieldByName('pkey').AsString);
QryAttach.Next; lvMessageParts.SmallImages := ImageList2;
// Show Listview in Report Style and add 2 Columns
lvMessageParts.ViewStyle := vsIcon;
// ListView1.Columns.Add;
// ListView1.Columns.Add;
LV_InsertFiles('C:\Windows\', lvMessageParts, ImageList2);
end;
end
else
begin
lvMessageParts.Items.Clear;
end;
end;
end;
上面的那个LV_InsertFiles过程没有作任何改动,但是运行结果并没有图标显示出来
请问是哪里问题?谢谢
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
uses ShellApi; procedure TForm1.Button Click(Sender: TObject); var Icon: hIcon; IconIndex: word; begin Icon := ExtractAssociatedIcon(HInstance, 'C:\SomePath\SomeFile.ext', IconIndex); end;先把在資料庫欄位的檔案先在硬碟存一個暫存檔 用如下的方式取得 Icon, 並加入 TImageList 中, 再把暫存檔刪除. |
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
我的程式如下:
QryAttach.Active := False;
QryAttach.ParamByName('pripkey').AsInteger := QryMaster.FieldByName('Pkey').AsInteger;
QryAttach.Active := True;
if QryAttach.RecordCount <> 0 then
begin
QryAttach.First;
while not QryAttach.Eof do
begin
li := lvMessageParts.Items.Add;
li.Caption := QryAttach.FieldByName('AttachName').AsString;
li.SubItems.Append(QryAttach.FieldByName('Attach').AsString);
li.SubItems.Append(QryAttach.FieldByName('pkey').AsString); Icon := ExtractAssociatedIcon(HInstance, 'C:\SomePath\SomeFile.ext', IconIndex); QryAttach.Next;
我通过点击一条记录取的该条记录下有个附件,把它依次显示在listview中,按大大方法并不能把图标显示上去,请问哪里还有问题?
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
哇咧! 同學, 您也太誇張了吧!
Icon := ExtractAssociatedIcon(HInstance, 'C:\SomePath\SomeFile.ext', IconIndex);
您怎麼原封不動把範例中的字串代入?
這句中的 'C:\SomePath\SomeFile.Txt' 的這個參數
就是要您把資料庫中的附檔存在硬碟後, 再用儲存的檔名存入
至於怎麼儲存, 可以參考:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18188
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34637 發表人 - hagar 於 2004/05/27 18:08:54
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 大大我这么写 TBlobField(QryAttach.FieldByName('Attach')).savetofile('c:\winnt\temp\' ExtractFileName(AttachName)); Icon := ExtractAssociatedIcon(HInstance, 'C:\SomePath\SomeFile.ext', IconIndex); 但是不知道怎么去和你说的'C:\SomePath\SomeFile.ext'去匹配起来,请教?'C:\SomePath\SomeFile.ext' 用 'c:\winnt\temp\' ExtractFileName(AttachName) 取代 |
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
我是这么写的
TBlobField(QryAttach.FieldByName('Attach')).savetofile('c:\winnt\temp\' ExtractFileName(QryAttach.FieldByName('AttachName').AsString));
Icon := ExtractAssociatedIcon(HInstance, 'c:\winnt\temp\' ExtractFileName(QryAttach.FieldByName('AttachName').AsString), IconIndex);
运行后说Incompatible type:'String' and 'PChar'请问应该怎么转换
是错在Icon := ExtractAssociatedIcon(HInstance, 'c:\winnt\temp\' ExtractFileName(QryAttach.FieldByName('AttachName').AsString), IconIndex);
这句上
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
大概這樣吧:
var Icon_h: hIcon; Icon: TIcon; IconIndex: word; li: TListItem; begin Icon := TIcon.Create; QryAttach.Active := False; QryAttach.ParamByName('pripkey').AsInteger := QryMaster.FieldByName('Pkey').AsInteger; QryAttach.Active := True; if QryAttach.RecordCount <> 0 then begin QryAttach.First; while not QryAttach.Eof do begin li := lvMessageParts.Items.Add; li.Caption := QryAttach.FieldByName('AttachName').AsString; li.SubItems.Append(QryAttach.FieldByName('Attach').AsString); li.SubItems.Append(QryAttach.FieldByName('pkey').AsString); TBlobField(QryAttach.FieldByName('Attach')).SaveToFile('c:\winnt\temp\' ExtractFileName(AttachName)); Icon_h := ExtractAssociatedIcon(HInstance, PChar('c:\winnt\temp\' ExtractFileName(QryAttach.FieldByName('AttachName').AsString)), IconIndex); Icon.Handle := Icon_h; li.ImageIndex := ImageList1.AddIcon(Icon); DeleteFile('c:\winnt\temp\' ExtractFileName(AttachName)); end; end; Icon.Free; end; |
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |