我正在构建一个程序,它需要在Form_Create上填充一个名为FileList的TListView,我想填充的目录是编译后的程序所在的目录+ \Files,因为我从未使用过TListView,我想知道怎么做吗?
发布于 2010-01-07 23:49:56
你的问题有多个部分。我将在这里提供一个概述。如果您需要任何特定步骤的帮助,请发布更具体的后续问题。
要获取EXE文件的完整路径,请调用ParamStr(0)。要从该字符串中删除可执行文件名,以便只有目录部分,请调用ExtractFilePath。确保它以反斜杠(IncludeTrailingPathDelimiter)结尾,然后追加您的" files“目录。
使用FindFirst和FindNext创建一个查看所有文件的循环。名称中将包含".“和"..“相对目录名,因此您可能希望排除它们。请注意,这些文件不会以任何特定的顺序枚举。例如,如果您需要按字母顺序对它们进行排序,则需要自己执行此操作。(它们可能在您的测试中按字母顺序排列,但这并不总是正确的。)
var记录: TSearchRec;如果FindFirst(路径+ '\*',faAnyFile,记录)=0,则开始,然后尝试重复if (Rec.Name = '.')或(Rec.Name = '..')然后继续;如果(Rec.Attr和faVolumeID) = faVolumeID,则继续;//与卷ID无关如果(Rec.Attr和faHidden) = faHidden,则继续;//遵守操作系统“隐藏”设置if (Rec.Attr和faDirectory) = faDirectory then;//这是一个目录。可能想做点特别的事。DoSomethingWithFile(Rec.Name);until FindNext(Rec) <> 0;finally SysUtils.FindClose(Rec);end;end;
您可能希望在我上面提到的假设的DoSomethingWithFile函数中执行此操作。使用列表视图的Items属性来处理这些项,例如添加新项。
var Item: TListItem;begin Item := ListView.Items.Add;Item.Caption := FileName;end;
TListItem具有其他属性;有关详细信息,请查看文档。如果您在"report“模式下显示列表视图,则SubItems属性很有用,在这种模式下,单个包含项目的node.
列表视图中节点的图像来自关联的图像列表LargeImages和SmallImages。它们引用表单上的一个或多个TImageList组件。将图标图像放在那里,然后将项目的ImageIndex属性分配给相应的数字。
根据您希望程序的复杂程度,您可能希望使用Delphi的TShellListView控件,而不是自己完成所有上述工作。
发布于 2010-01-07 23:43:19
如果您将一个包含两个图像的TImagelist放在表单上(一个在文件中,另一个在目录中),然后将该TImagelist分配给TListviews LargeImages属性,则可以使用以下代码。
procedure TForm2.Button1Click(Sender: TObject);
var li:TListItem;
SR: TSearchRec;
begin
FileList.Items.BeginUpdate;
try
FileList.Items.Clear;
FindFirst(ExtractFilePath(Application.ExeName) +'*.*', faAnyFile, SR);
try
repeat
li := FileList.Items.Add;
li.Caption := SR.Name;
if ((SR.Attr and faDirectory) <> 0) then li.ImageIndex := 1
else li.ImageIndex := 0;
until (FindNext(SR) <> 0);
finally
FindClose(SR);
end;
finally
FileList.Items.EndUpdate;
end;
end;然后,您可以在此基础上构建,方法是为不同的文件类型向TImageList添加不同的图像,并使用ExtractFileExt(SR.Name)获取文件扩展名
if ((SR.Attr and faDirectory) <> 0) then li.ImageIndex := 1
else if lowercase(ExtractFileExt(SR.Name)) = '.png' then li.ImageIndex := 2
else if lowercase(ExtractFileExt(SR.Name)) = '.pdf' then li.ImageIndex := 3
else li.ImageIndex := 0;发布于 2010-01-07 23:14:30
您需要在绘制行时显示图像。
这应该会给你一个概念:http://www.delphidabbler.com/articles?article=16 http://delphi.about.com/od/delphitips2008/qt/lv_checkbox_bmp.htm
唯一的区别是您将绘制一个图标/图像。在这里,您将学习如何在网格中执行此操作:http://delphi.about.com/library/weekly/aa032205a.htm,因此您可以从两者中获得想法。
https://stackoverflow.com/questions/2021139
复制相似问题