Hi,
momentan benutze ich folgende beide Methoden:
Delphi-Quellcode:
procedure ClipBoardGetFiles(AList: TStringList);
var
F: THandle;
Buffer: Array [0..MAX_PATH] of Char;
i: Integer;
NumFiles: Integer;
begin
if (not (Clipboard.HasFormat(CF_HDROP))) then
Exit;
Clipboard.Open;
try
F:=Clipboard.GetAsHandle(CF_HDROP);
if (F<>0) then
begin
NumFiles:=DragQueryFile(F, $FFFFFFFF, nil, 0);
AList.Clear;
for i:=0 to NumFiles-1 do
begin
Buffer[0]:=#0;
DragQueryFile(F, i, Buffer, SizeOf(Buffer));
AList.Add(Buffer);
end;
end;
finally
Clipboard.Close;
end;
end;
Delphi-Quellcode:
procedure ClipBoardSetFiles(AList: TStringList);
var
AFileList:
String;
ADropFiles: PDropFiles;
AGlobal: THandle;
ALength: Integer;
i: Integer;
begin
AFileList:='
';
for i:=0
to AList.Count-1
do
begin
AFileList:=AList[i]+#0+AFileList;
end;
ALength:=Length(AFileList)+1;
AFileList:=AFileList+#0;
AGlobal := GlobalAlloc(GMEM_SHARE
or GMEM_MOVEABLE
or GMEM_ZEROINIT, SizeOf(TDropFiles)+ALength);
if (AGlobal=0)
then
raise Exception.Create('
Could not allocate memory.');
begin
ADropFiles := GlobalLock(AGlobal);
ADropFiles^.pFiles := SizeOf(TDropFiles);
Move(AFileList[1], (PChar(ADropFiles)+SizeOf(TDropFiles))^, ALength);
GlobalUnlock(AGlobal);
Clipboard.SetAsHandle(CF_HDROP, AGlobal);
end;
end;
Ist das damit nicht möglich? Wenn dann muss ich mich wohl mal mit dem von dir angesprochenen IDataObject etc. auseinandersetzen (gibts da denn nirgendwo ein Beispiel für? Schneidet denn keiner Dateien aus
)