怎样用LISTVIEW增加文件? |
缺席
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
|
TATSU
版主 發表:50 回覆:135 積分:62 註冊:2003-01-16 發送簡訊給我 |
object Form1: TForm1 Left = 192 Top = 107 Width = 696 Height = 480 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False OnClose = FormClose OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 18 Top = 330 Width = 32 Height = 13 Caption = 'Label1' end object ListView1: TListView Left = 16 Top = 16 Width = 257 Height = 307 Columns = < item AutoSize = True end> OwnerData = True TabOrder = 0 ViewStyle = vsReport OnChange = ListView1Change OnData = ListView1Data OnGetImageIndex = ListView1GetImageIndex end object Button1: TButton Left = 300 Top = 32 Width = 75 Height = 25 Caption = 'Files' TabOrder = 1 OnClick = Button1Click end object OpenDialog1: TOpenDialog DefaultExt = '*.*' Options = [ofHideReadOnly, ofAllowMultiSelect, ofEnableSizing] Left = 406 Top = 40 end object ImageList1: TImageList Left = 354 Top = 204 end end unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ActiveX, Dialogs, StdCtrls, ComCtrls, ImgList, ShellAPI, shlobj; type PFileItem = ^TFileItem ; TFileItem = Record FileName : TFileName ; FullPath : TFileName ; ImageIndex : Integer ; end; TForm1 = class(TForm) ListView1: TListView; Button1: TButton; Label1: TLabel; OpenDialog1: TOpenDialog; ImageList1: TImageList; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ListView1Data(Sender: TObject; Item: TListItem); procedure ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange); procedure ListView1GetImageIndex(Sender: TObject; Item: TListItem); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } FFileList : TList ; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var aRecord : PFileItem ; i, j : Integer ; SFI: TSHFileInfo; lFound : Boolean ; nAdded : Integer ; begin nAdded := 0 ; if OpenDialog1.Execute then begin for i := 0 to (OpenDialog1.Files.Count - 1) do begin lFound := False ; if FFileList.Count > 0 then begin for j := 0 to (FFileList.Count - 1) do begin if OpenDialog1.Files[i] = PFileItem(FFileList.Items[j]).FullPath then begin lFound := True ; break ; end; end; end; if Not(lFound) then begin Inc(nAdded) ; New(aRecord) ; aRecord.FileName := ExtractFileName(OpenDialog1.Files[i]) ; aRecord.FullPath := OpenDialog1.Files[i] ; SHGetFileInfo(PChar(aRecord.FullPath), 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); aRecord.ImageIndex := SFI.iIcon ; FFileList.Add(aRecord) ; end; end; if nAdded > 0 then ListView1.Items.Count := FFileList.Count ; end; end; procedure TForm1.FormCreate(Sender: TObject); var SFI: TSHFileInfo; begin FFileList := TList.Create ; ImageList1.Handle := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); ImageList1.ShareImages := True; ListView1.SmallImages := ImageList1 ; end; procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem); begin if Item.Index < FFileList.Count then Item.Caption := PFileItem(FFileList.Items[Item.Index]).FileName ; end; procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange); begin if Assigned(Item) and (Item.Index > -1) and (Item.Index < FFileList.Count) then Label1.Caption := PFileItem(FFileList.Items[Item.Index]).FullPath ; end; procedure TForm1.ListView1GetImageIndex(Sender: TObject; Item: TListItem); begin if (Item.Index > -1) and (Item.Index < FFileList.Count) then Item.ImageIndex := PFileItem(FFileList.Items[Item.Index]).ImageIndex ; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i : Integer ; begin ListView1.Items.Count := 0 ; if FFileList.Count > 0 then begin for i := 0 to (FFileList.Count - 1) do begin Dispose(PFileItem(FFileList.Items[i])) ; end; FFileList.Clear ; end; FFileList.Free ; end; end.這個供你參考的,檔案清單也沒有排序,你可以自行加入,看看是否合用。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |