在一个目录中,文件名统一按照 日期_附加信息.gif 的格式保存
现在目录中有4 个文件,但是用opendialog 准备打开文件的时候,opendialog 打开如下
2008-10-23 14:34 269,269 20081022_1.gif
2008-10-24 15:53 165,034 20081024_1.gif
2008-10-25 09:48 241,213 20081024_1(分析).gif
2008-10-30 09:29 290,094 20081027_1.gif这样文件越来越多的时候,我不能将最近保存的文件显示在最前面,这样操作起来很麻烦
请问如何对里面的文件名进行排序,以便将最近保存的文件放到最前面(如20081027_1.gif 拍在前面,20081022_2.gif 放在后面)便于使用呢?
现在目录中有4 个文件,但是用opendialog 准备打开文件的时候,opendialog 打开如下
2008-10-23 14:34 269,269 20081022_1.gif
2008-10-24 15:53 165,034 20081024_1.gif
2008-10-25 09:48 241,213 20081024_1(分析).gif
2008-10-30 09:29 290,094 20081027_1.gif这样文件越来越多的时候,我不能将最近保存的文件显示在最前面,这样操作起来很麻烦
请问如何对里面的文件名进行排序,以便将最近保存的文件放到最前面(如20081027_1.gif 拍在前面,20081022_2.gif 放在后面)便于使用呢?
解决方案 »
- 超强控件,谁知道 TList 7 OCX 这个控件哪里有下载
- 爱普生1600KIII+自定义打印:打印多张后位置慢慢下移
- delphi自身数据库如何转换为sql数据库
- 百分跪求大侠指点,sql server2000导入excel
- 为什么Tinifile不能写数据呢?
- form中运用FRAME
- 太难了,很多人不会
- dbexpress如何连接远端oracle
- 高难度问题:如何调整PageControl的TabSheet顺序?
- 向各位大侠请教:用Delphi实现动态创建Foxpro表,当字段名为中文时会出问题!急!急!
- IDE 控制,定位到源代码中的某一行?? 我的神啊
- 如果设置OpenDialog的按钮名称?
最后决定模仿windows 的最近打开文件处理模式,将最近的几个文件放到菜单中,然后通过菜单打开procedure TForm1.AddToRecentFile;
var
sp:string; //查找文件名所用字符串,必须包含 *.* 通配符 sr:TSearchRec;
FileAttrs: Integer; //结果文件属性定义
strl:tstringlist; //用于结果排序
i:integer;
y:integer;begin
sp:= cfginitdir + '\*.*';
strl:= tstringlist.Create;
strl.Clear; FileAttrs := faAnyFile - faDirectory;
//提取目录下所有文件名,但是不包括 . 和 .. 默认目录 //取指定目录下所有文件名创建文件,并将结果存入 TstringList 中以便排序后取出最近
//的4 个文件
if FindFirst(sp, FileAttrs, sr) = 0 then
begin
repeat
strl.Add(sr.Name);
until FindNext(sr) <> 0;
//FindClose(sr);
end; //将文件名进行排序,取出最新4 个文件存入最近打开文件列表
strl.Sort; //将最新4 个文件文件名放入最近打开文件菜单的caption中
y:= 1 ;
for i:= strl.Count -1 downto 0 do
begin
if y = 1 then
begin
MenuR1.Caption:= '';
MenuR1.Caption := strl.Strings[i];
end
else if y = 2 then
begin
MenuR2.Caption := '';
MenuR2.Caption := strl.Strings[i];
end
else if y = 3 then
begin
MenuR3.Caption := '';
MenuR3.Caption := strl.Strings[i];
end
else if y = 4 then
begin
MenuR4.Caption := '';
MenuR4.Caption := strl.Strings[i];
end; y:= y+1; //showmessage('add to menu '+strl.Strings[i]);
end ;
//释放TstringList
strl.Free;end;但是这段代码运作时候出现了两个问题:
1、FindClose(sr); 无法编译,提示错误: [Error] FrameCapture.pas(554): Incompatible types: 'Cardinal' and 'TSearchRec'
google 不到原因,请教一下大家
2、将文件名插入menuR1.caption 时候,原始文件名为 abcd.gif ,但是插入menuR1.caption以后,菜单显示文字 ”abcd.gif(2)“,自动增加了一个 (2)在后面,是什么原因呢? 请教一下大家
最后决定模仿windows 的最近打开文件处理模式,将最近的几个文件放到菜单中,然后通过菜单打开procedure TForm1.AddToRecentFile;
var
sp:string; //查找文件名所用字符串,必须包含 *.* 通配符 sr:TSearchRec;
FileAttrs: Integer; //结果文件属性定义
strl:tstringlist; //用于结果排序
i:integer;
y:integer;begin
sp:= cfginitdir + '\*.*';
strl:= tstringlist.Create;
strl.Clear; FileAttrs := faAnyFile - faDirectory;
//提取目录下所有文件名,但是不包括 . 和 .. 默认目录 //取指定目录下所有文件名创建文件,并将结果存入 TstringList 中以便排序后取出最近
//的4 个文件
if FindFirst(sp, FileAttrs, sr) = 0 then
begin
repeat
strl.Add(sr.Name);
until FindNext(sr) <> 0;
//FindClose(sr);
end; //将文件名进行排序,取出最新4 个文件存入最近打开文件列表
strl.Sort; //将最新4 个文件文件名放入最近打开文件菜单的caption中
y:= 1 ;
for i:= strl.Count -1 downto 0 do
begin
if y = 1 then
begin
MenuR1.Caption:= '';
MenuR1.Caption := strl.Strings[i];
end
else if y = 2 then
begin
MenuR2.Caption := '';
MenuR2.Caption := strl.Strings[i];
end
else if y = 3 then
begin
MenuR3.Caption := '';
MenuR3.Caption := strl.Strings[i];
end
else if y = 4 then
begin
MenuR4.Caption := '';
MenuR4.Caption := strl.Strings[i];
end; y:= y+1; //showmessage('add to menu '+strl.Strings[i]);
end ;
//释放TstringList
strl.Free;end;但是这段代码运作时候出现了两个问题:
1、FindClose(sr); 无法编译,提示错误: [Error] FrameCapture.pas(554): Incompatible types: 'Cardinal' and 'TSearchRec'
google 不到原因,请教一下大家
2、将文件名插入menuR1.caption 时候,原始文件名为 abcd.gif ,但是插入menuR1.caption以后,菜单显示文字 ”abcd.gif(2)“,自动增加了一个 (2)在后面,是什么原因呢? 请教一下大家
Windows,SysUtils, Messages, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, ExtCtrls, StdCtrls, ComCtrls, Menus,Jpeg,StrUtils,Clipbrd, Printers,GIFImage;2、问题请大家帮忙,现在还google 不出原因。我只好在打开时候,把文件名后面的 (2)等截掉,但是怪难看滴,请大家帮忙解答一下