Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Win7x64/DelphiXE2: Dateien in die Zwischenablage kopieren?

  Alt 29. Aug 2012, 16:39
Tipp: Schau mal, was zu MSDN-Library durchsuchenCF_HDROP im MSDN drin steht.

Und das Thema Pointer-Arithmetik solltest du dir auch nochmal ansehn, denn PWideChar(DropFiles) + x rechnet nicht das was du willst.

ungetesteter Vorschlag?
Delphi-Quellcode:
procedure CopyFilesToClipboard(FileList: string);
{Achtung: Dateien mit einem #0 trennen!
Beispiel:
procedure TForm1.Button1Click(Sender: TObject);
begin
  CopyFilesToClipboard('C:\Bootlog.Txt'#0'C:\AutoExec.Bat');
end;}

var
  DropFiles: PDropFiles;
  hGlobal: THandle;
  iLen: Integer;
begin
  FileList := FileList + #0#0;
  iLen := Length(FileList) * SizeOf(Char);
  hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles) + iLen);
  if hGlobal = 0 then
    raise Exception.Create('Could not allocate memory.');
  DropFiles := GlobalLock(hGlobal);
  DropFiles.pFiles := SizeOf(TDropFiles);
  DropFiles.fWide := SizeOf(Char) <> 1;
  Move(FileList[1], (PAnsiChar(DropFiles) + SizeOf(TDropFiles))^, iLen);
  GlobalUnlock(hGlobal);
  Clipboard.SetAsHandle(CF_HDROP, hGlobal);
end;

procedure CopyFilesToClipboard(FileList: TStrings);
var
  LB: string;
begin
  LB := FileList.LineBreak;
  try
    FileList.LineBreak := #0;
    CopyFilesToClipboard(FileList.Text);
  finally
    FileList.LineBreak := LB;
  end;
end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (29. Aug 2012 um 17:03 Uhr)
  Mit Zitat antworten Zitat