![]() |
[D2010] Dateien in Zwischenablage kopieren (PDF)
Hallo DPler,
entschuldigt bitte wenn ich ein weiteres Thema zu den vielen anderen Clipboard-Themen erstelle, aber die anderen führen leider nicht zur Lösung. Nun zu meinem Problem: Ich möchte gerne Dateien in die Zwischenablage kopieren und woanders einfügen. Beim kopieren geht etwas schief :( dazu verwende ich diesen Code:
Delphi-Quellcode:
ich habe
//################################################
// CopyFilesToClipboard //################################################ procedure TfrmAnfrage.CopyFilesToClipboard(FileList: string); var DropFiles: PDropFiles; hGlobal: THandle; iLen: Integer; begin iLen := Length(FileList) + 2; FileList := FileList + #0#0; hGlobal := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, SizeOf(TDropFiles) + iLen); if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.'); begin DropFiles := GlobalLock(hGlobal); DropFiles^.pFiles := SizeOf(TDropFiles); Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen); GlobalUnlock(hGlobal); Clipboard.SetAsHandle(CF_HDROP, hGlobal); end; end
Delphi-Quellcode:
durch
(PChar(DropFiles)
Delphi-Quellcode:
bereits ersetzt da es sonst zu einem Fehler beim kopieren führt.
(PAnsiChar(DropFiles)
dann habe ich das Tool ![]() und folgende abweichung beim kopieren im Explorer und beim kopieren per Programm festgestellt: Explorer: HDROP: C:\Users\XXX\Documents\RAD Studio\Projekte\Hexacom\SalesBoard\bin\Anhang\10_P romotion2010_Q3.pdf Programm: HDROP: C:\Users\XXX\Documents\RAD Studio\Projekte\He????.?.lesBoard\bin\Anhang\10_Pr omotion2010_Q3.pdf desweiteren wird per programm nur der HDROP erstellt. Beim Explorer kopieren der PDF: an die 11 Formate (DataObject,ShellIDListArray,dataobjectAtrribute.. .usw) Ich wäre euch für jeden Tipp sehr Dankbar! MFG H3llsing |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
hat niemand ne idee woran es liegen könnte ?
|
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
Was genau ist
Delphi-Quellcode:
?
PDropFiles
Soll heißen ... auf welchen Typ ist das ein Pointer? |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
Da ich noch Delphi-Anfänger bin kann ich dir die frage nicht genau beantworten.
MSDN ![]() ;) ich hoffe ich lieg damit einiger maßen richtig :) Die Funktion ist übrigens von den Schweizern ![]() |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
Ich vermute ein Unicode-Problem. Wie sieht es so aus?
Delphi-Quellcode:
procedure TfrmAnfrage.CopyFilesToClipboard(FileList: AnsiString);
var DropFiles: PDropFiles; hGlobal: THandle; iLen: Integer; begin iLen := Length(FileList) + 2; FileList := FileList + #0#0; hGlobal := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, SizeOf(TDropFiles) + iLen); if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.'); begin DropFiles := GlobalLock(hGlobal); DropFiles^.pFiles := SizeOf(TDropFiles); Move(FileList[1], (PAnsiChar(DropFiles) + SizeOf(TDropFiles))^, iLen); GlobalUnlock(hGlobal); Clipboard.SetAsHandle(CF_HDROP, hGlobal); end; end |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
wunderbar =D
DeddyH du bist mein Held :) Bin nicht draufgekommen es bei dem Funktionsparameter selbst umzustellen. außerdem musste noch folgende Zeile geändert werden
Delphi-Quellcode:
in
hGlobal := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE,
Delphi-Quellcode:
hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
GesamtCode:
Delphi-Quellcode:
//################################################
// CopyFilesToClipboard //################################################ procedure TfrmAnfrage.CopyFilesToClipboard(FileList: Ansistring); var DropFiles: PDropFiles; hGlobal: THandle; iLen: Integer; begin iLen := Length(FileList) + 2; FileList := FileList + #0#0; hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles) + iLen); if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.'); begin DropFiles := GlobalLock(hGlobal); DropFiles^.pFiles := SizeOf(TDropFiles); Move(FileList[1], (PAnsiChar(DropFiles) + SizeOf(TDropFiles))^, iLen); GlobalUnlock(hGlobal); Clipboard.SetAsHandle(CF_HDROP, hGlobal); end; end; Vielen Dank an euch beide =) |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
*räusper*
Ein Unicode-Problem sollte man nicht damit lösen es zu ignorieren. Falls mal Unicodezeichen im Pfad vorkommen 'المسار_الأكاديمي.png' ... (oops hoffentlich hat google das richtig übersetzt) hilft dir diese routine nicht weiter. Also besser so:
Delphi-Quellcode:
Dann geht auch sowas:
procedure CopyFilesToClipboard(FileList: string);
var DropFiles: PDropFiles; hGlobal: THandle; iLen: Integer; begin iLen := Length(FileList); hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles) + ((iLen + 2) * SizeOf(Char))); if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.'); try DropFiles := GlobalLock(hGlobal); if (DropFiles = nil) then raise Exception.Create('Could not access allocated memory.'); try DropFiles^.pFiles := SizeOf(TDropFiles); DropFiles^.fWide := (SizeOf(Char) = SizeOf(WideChar)); if FileList <> '' then Move(FileList[1], (PByte(DropFiles) + SizeOf(TDropFiles))^, iLen * SizeOf(Char)); finally GlobalUnlock(hGlobal); end; Clipboard.SetAsHandle(CF_HDROP, hGlobal); except GlobalFree(hGlobal); end; end;
Delphi-Quellcode:
viel Spaß
procedure TForm2.Button1Click(Sender: TObject);
begin CopyFilesToClipboard('C:\Temp\المسار_الأكاديمي.png'); end; Marco |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
Zitat:
Diese Strucktur muß als Unicode vorliegen. :stupid: |
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
Zitat:
|
AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
Eine Frage noch: müsste das letzte except nicht eigentlich ein finally sein?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz