大侠请进,再不进就要死人啦 (100分)

  • 主题发起人 主题发起人 samdy
  • 开始时间 开始时间
S

samdy

Unregistered / Unconfirmed
GUEST, unregistred user!
无论帮不帮的了我,先说声谢谢
我想做一个管理系统,其中有一查找功能,我想问一下,怎么做才能像windows自带的搜索程序那样,一旦搜索到文件,则有详细信息显示,比如说有该文件的文件名、大小、修改日期、类型等等
还有,谁有类似于windows中自带的资源管理器的树型结构显示的实例,
请发到我邮箱microwind168@tom.com,先谢了
 
用findfirst;用ListView.ViewStyle属性。
 
我已经给你发了,我的邮件地址是liuhongjie9999@sohu.com
这个就是你想要的,好东西大家共享吧!
 
Elite_liu,给我也来一份吧,chfachen@e23.com.cn谢谢!
 
你要是装有BusinessSkinForm的话,可以看一下它里面TbsSkinFileListView控件中对应的bsSkinShellCtrls单元中的方法(1073行)
function TbsSkinFileListView.AddFile(FileMask: String;
Attr: DWord): Boolean;
写得很详细,没装的话,也可以去下一个来看看的
function TbsSkinFileListView.AddFile(FileMask: String;
Attr: DWord): Boolean;
var
ShInfo: TSHFileInfo;
attributes: String;
FDate, FName, FileName: String;
FSize: Integer;
FI: TSearchRec;
function AttrStr(Attr: integer): String;
begin
Result:='';
if (FILE_ATTRIBUTE_DIRECTORY and Attr)>0 then
Result:=Result+'';
if (FILE_ATTRIBUTE_ARCHIVE and Attr)>0 then
Result:=Result+'A';
if (FILE_ATTRIBUTE_READONLY and Attr)>0 then
Result:=Result+'R';
if (FILE_ATTRIBUTE_HIDDEN and Attr)>0 then
Result:=Result+'H';
if (FILE_ATTRIBUTE_SYSTEM and Attr)>0 then
Result:=Result+'S';
end;

begin
Result := False;
if not SetCurrentDir(FDirectory) then
exit;
if FindFirst(FileMask,faAnyFile,FI)=0 then
try
repeat
if ((Attr and FILE_ATTRIBUTE_DIRECTORY)=(FI.Attr and FILE_ATTRIBUTE_DIRECTORY)){ and
((Attr and FILE_ATTRIBUTE_READONLY)>=(FI.Attr and FILE_ATTRIBUTE_READONLY)) and
((Attr and FILE_ATTRIBUTE_HIDDEN)>=(FI.Attr and FILE_ATTRIBUTE_HIDDEN)) and
((Attr and FILE_ATTRIBUTE_SYSTEM)>=(FI.Attr and FILE_ATTRIBUTE_SYSTEM))} then
begin
CurPath:=IncludeTrailingBackslash(FDirectory);
FName:=FI.Name;
FileName:=IncludeTrailingBackslash(FDirectory)+FName;
if (FName='.') or (FName='..') then
continue;
SHGetFileInfo(PChar(FileName),0,ShInfo,SizeOf(ShInfo),SHGFI_TYPENAME or SHGFI_SYSICONINDEX or SHGFI_DISPLAYNAME);
FSize:=FI.Size;
FDate:=DateTimeToStr(FileDateToDateTime(FI.Time));
Attributes:=AttrStr(FI.Attr);
with Items.Adddo
begin
Caption:=FName;
if SmallImages<>nil then
ImageIndex:=ShInfo.iIcon;
if (FI.Attr and FILE_ATTRIBUTE_DIRECTORY)=FILE_ATTRIBUTE_DIRECTORY then
SubItems.Add(' ')
else
SubItems.Add(Trim(IntToStr(FSize)));
SubItems.Add((ShInfo.szTypeName));
SubItems.Add(FDate);
SubItems.Add(attributes);
SubItems.Add(FileName);
if (FI.Attr and FILE_ATTRIBUTE_DIRECTORY)=FILE_ATTRIBUTE_DIRECTORY then
SubItems.Add('dir')
else
SubItems.Add('file');
end;
FDirectorySize:=FDirectorySize+FSize;
Result:=True;
end;
until FindNext(FI)<>0;
finally
FindClose(FI);
end;
end;
 
类似于windows中自带的资源管理器的树型结构显示的实例 不就是个 TREEVIEW吗
到底有什么难的呢?文件信息不是有相应的DELPHI函数吗?
 
这种基本文件操作delphi都封装了足够的API来实现。
呵呵,让人家给你写代码是真吧。
 
用Delphi7里的TShellTreeView和TShellListView就可以做成一个资源管理器模样。
一行代码不用写,就完成许多功能。
这两控件在Samples面板里。
取指定文件的属性:
var
fad: WIN32_FILE_ATTRIBUTE_DATA;
GetFileAttributesEx(PChar(FileName), GetFileExInfoStandard, @fad);
typedef struct _WIN32_FILE_ATTRIBUTE_DATA{
DWORD dwFileAttributes;
// 文件属性
FILETIME ftCreationTime;
// 创建时间
FILETIME ftLastAccessTime;
// 上次访问时间
FILETIME ftLastWriteTime;
// 上次修改时间
DWORD nFileSizeHigh;
// 文件尺寸
DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
 
你说的应该是模糊查找。用模糊查找能像WINDOWS一样。
 
还没消化完各位大虾的精华,等消化完再答谢各位大虾。不过无论如何先谢谢大家的参与
 
to app2001:
哪里有的下?
 
to apw:
TShellTreeView和TShellListView两个怎么关联到一起,即点击TShellTreeView中的文件夹,怎么让它实时地在TShellListView中显示
 
哪里有下???
http://www.2ccc.com/article.asp?articleid=355
BusinessSkinForm V2.38 汉化版
 
TShellTreeView和TShellListView两个怎么关联到一起,即点击TShellTreeView中的文件夹,怎么让它实时地在TShellListView中显示
 
这个搜索文件没有问题,你可以在添点东西读文件的信息应该没问题了
function bdSearchFile(mainpath: string): Boolean;
var
i:integer;
Found:Boolean;
subdir1:TStrings;
searchRec:TsearchRec;
begin
found:=false;
subdir1:=TStringList.Create;//字符串列表必须动态生成
//找出所有下级子目录。
if mainpath[Length(mainpath)] <> '/' then
mainpath := mainpath + '/';
if (FindFirst(mainpath+'*.*', faDirectory, SearchRec)=0) then
begin
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0)do
begin
//查找当前目录。
application.ProcessMessages;
if IsValidDir(SearchRec) then
subdir1.Add(SearchRec.Name)
else
begin
if SearchRec.Name<>'..' then
begin
//搜索的文件添加到数据库中
inc(file_count);
appendtemptable(file_count,mainpath+SearchRec.Name);
mainfrm.StatusBar1.Panels[1].Text:=inttostr(file_count)+'个';
end;
end;
end;
FindClose(SearchRec);
found:=true;
//这是递归部分,查找各子目录。
for i:=0 to subdir1.Count-1do
found:=bdSearchfile(mainpath+subdir1.Strings+'/')or found;
subdir1.Free;
end;
result:=found;
end;
 
这么简单的东西。。。还要死要活的。。[:)]
 
TShellListView 不是有个属性ShellTreeView吗?用它来关联就可以啦。
 
to 刘麻子:
刚学,让你见笑了。不过,下次请你说些有实际意义的话
 
后退
顶部