12. oktober 2004 - 20:41
Der er
2 kommentarer og
1 løsning
drag filer over i min listbox
det her virker rigtig godt, men hvordan kan jeg få den til at virke med mapper?? jeg kan ikke drag en mappe med filer over i min listbox! den tilføjer bare stien til mappen og ikke filerne
unit dropfile;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
// declare our DROPFILES message handler
procedure AcceptFiles( var msg : TMessage );
message WM_DROPFILES;
end;
var
Form1: TForm1;
implementation
uses
ShellAPI;
{$R *.DFM}
procedure TForm1.AcceptFiles( var msg : TMessage );
const
cnMaxFileNameLen = 255;
var
i,
nCount : integer;
acFileName : array [0..cnMaxFileNameLen] of char;
begin
// find out how many files we're accepting
nCount := DragQueryFile( msg.WParam,
$FFFFFFFF,
acFileName,
cnMaxFileNameLen );
// query Windows one at a time for the file name
for i := 0 to nCount-1 do
begin
DragQueryFile( msg.WParam, i,
acFileName, cnMaxFileNameLen );
listbox1.items.add(acFileName);
end;
DragFinish( msg.WParam );
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles( Handle, True );
end;
end.
13. oktober 2004 - 14:15
#1
Før din listbox1.items.add(acFileName) bør du selv tjekke om det er en mappe eller en fil - hvis det er en fil gør du som du plejer (listbox1.items.add) og hvis det er en mappe må du læse filerne i mappen og placere dem i listen enkeltvis.
13. oktober 2004 - 16:53
#2
Evt. sådan her:
procedure TForm1.AcceptFiles( var msg : TMessage );
const
cnMaxFileNameLen = 255;
var
i,
nCount : integer;
acFileName : array [0..cnMaxFileNameLen] of char;
attr: word;
Rec: TSearchRec;
FileAttrs: Integer;
Str: string;
begin
// find out how many files we're accepting
nCount := DragQueryFile( msg.WParam,
$FFFFFFFF,
acFileName,
cnMaxFileNameLen );
// query Windows one at a time for the file name
for i := 0 to nCount-1 do
begin
DragQueryFile( msg.WParam, i,acFileName, cnMaxFileNameLen );
attr := FileGetAttr(acFileName);
if (attr and faDirectory = faDirectory) then
begin
// Go through all files in folder
showmessage('It''s a folder');
FileAttrs := faArchive;
if FindFirst(acFileName + string('\*.*'), FileAttrs, Rec) = 0 then
repeat
str := acFilename + string('\');
listbox1.Items.Add(acFileName + string('\') + Rec.FindData.cFileName);
until FindNext(rec) <> 0;
FindClose(Rec);
end
else
listbox1.items.add(acFileName);
end;
DragFinish( msg.WParam );
end;
men den tager ikke højde for mapper i mapper - men her er noget du kan køre videre med.