Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   [D2010] Dateien in Zwischenablage kopieren (PDF) (https://www.delphipraxis.net/153331-%5Bd2010%5D-dateien-zwischenablage-kopieren-pdf.html)

MarcoWarm 2. Aug 2010 12:30

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
Zitat:

Zitat von DeddyH (Beitrag 1038955)
Eine Frage noch: müsste das letzte except nicht eigentlich ein finally sein?

Wir müssen die globale Resource nur im Fehlerfall freigeben. Ansonsten kümmert sich's Clipboard drum.

DeddyH 2. Aug 2010 12:52

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
Ah, wieder was gelernt, thx.

H3llsing 2. Aug 2010 13:30

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
nochmal vielen Dank @MarkoWarm =)

GoTo0815 15. Mai 2015 15:47

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
Guten Tag,

ggf. habe ich ein riesiges Brett vor dem Kopf, aber ich versuche Dateien, deren Dateipfad und Dateinamen ich in einer StringListe gespeichert habe mittels CopyFilesToClipboard in die Zwischenablage kopieren, damit ich diese per Strg+V in beispielsweise Outlook einfügen kann.

Delphi-Quellcode:
procedure TForm1.BitBtn5Click(Sender: TObject);
var
  aList : TStringList;
  s, aListString : String;
begin
  try
    aList := TStringList.Create;
    aList.Clear;

    // hier wird die Liste mit den Dateinamen erstellt, ich habe die Dateinamen und Pfade auch aus der
    // Liste mal wieder ausgeben lassen, die sind in Ordnung, wobei die teilweise Leerzeichen enthalten.
    // Habe aber auch schon versucht die einzelnen Dateinamen inkl. Pfad in Anführungszeichen zu betten.
    // Alles irgendwie ohne Erfolg.
    // Muss eigentlich bei dem letzten Dateinamen dann das #0 weggelassen werden, da ja in der
    // CopyFilesToClipboard dann #0#0 ergänzt wird?

    aListString := '';
    for i := 0 to aList.Count -1 do
    begin
      s:= aList[i];
      aListString:= aListString + s + #0;
    end;
    CopyFilesToClipboard(aListString);

  finally
    FreeAndNil(aList);
  end;
end;

GoTo0815 15. Mai 2015 15:54

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
... kaum habe ich mir und Euch diese Frage gestellt:

Muss eigentlich bei dem letzten Dateinamen dann das #0 weggelassen werden, da ja in der CopyFilesToClipboard dann #0#0 ergänzt wird?

Jetzt habe ich das mal geändert und nun funktioniert es natürlich :-)

Delphi-Quellcode:
//...

    for i := 0 to aList.Count -1 do
    begin
      s:= aList[i];
      if i < aList.Count -1 then aListString:= aListString + s + #0
      else aListString:= aListString + s;
    end;

//...

mkinzler 15. Mai 2015 15:59

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
Delphi-Quellcode:
  aList.Delimiter := #0;
  aListString:= aList.DelimitedText;

GoTo0815 15. Mai 2015 16:23

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
Delphi-Quellcode:
  aList.Delimiter := #0;
  aListString:= aList.DelimitedText;
... das hatte ich zwischendurch auch einmal so versucht und leider funktionierte das nicht.
Ich bekomme dann beim Einfügen eine Fehlermeldung, dass ein Dateiname/Dateipfad nicht stimmt.

Sehr merkwürdig! :pale:

himitsu 15. Mai 2015 19:51

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
#0 = Ende es TStringList Textes?

Ich könnte fast wetten, daß bei Delemiter=#0 alle String gequotet werden,
aber du hast dir natürlich im Debugger angesehn, was als aListString raus kommt, bzw. was an CopyFilesToClipboard übergeben wird. :stupid:

GoTo0815 16. Mai 2015 13:39

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
... ja Du hast recht! Im Debugger habe ich nicht geschaut.
Ich hatte mir versucht den String anderweitig anzuschauen (in einem Memo ausgegeben), was durch das #0 natürlich nicht wirklich schlau ist.

Doppelte Anführungszeichen werden scheinbar hinzugefügt bei Strings mit Leerzeichen:
Delphi-Quellcode:
aList.Delimiter:=#0;
aListString := aList.DelimitedText;
Ergebnis: 'C:\Folder\Dateiname1.pdf'#0'C:\Folder\Dateiname2. pdf'#0'"C:\Folder\Datei name3.pdf"'


und bei folgendem Code nicht:

Delphi-Quellcode:
for i := 0 to aList.Count -1 do
begin
  s:= aList[i];
  if i < aList.Count -1 then aListString:= aListString + s + #0
  else aListString:= aListString + s;
end;
'C:\Folder\Dateiname1.pdf'#0'C:\Folder\Dateiname2. pdf'#0'C:\Folder\Datei name3.pdf'

himitsu 16. Mai 2015 13:49

AW: [D2010] Dateien in Zwischenablage kopieren (PDF)
 
Delphi-Quellcode:
if i < aList.Count -1 then
kann bestimmt weg.

Diese Listen sind ja so definiert
#0 = nächster Listeneintrag
#0#0 = Ende der Liste (wobei #0#0 eigentlich für einen Leerstring steht)

Und da das Ende als #0#0 deklariert it, wird alles danach ignoriert. Es ist also egal, ob am Ende #0#0 oder #0#0#0 steht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz