Einzelnen Beitrag anzeigen

Benedikt
(Gast)

n/a Beiträge
 
#3

Re: Problem beim Ausschneiden/Einfügen per STRG+X/V

  Alt 25. Apr 2005, 15:00
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 )
  Mit Zitat antworten Zitat