Autor |
Beitrag |
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 17.05.20 18:58
galagher hat folgendes geschrieben : | Weiters: Muss CF_RICHTEXT als Word oder als UINT (= LongWord) dekalriert werden? |
RegisterClipboardFormat liefert einen UINT zurück, von daher ist das auch der passende Typ.
Für diesen Beitrag haben gedankt: galagher
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 17.05.20 19:36
jaenicke hat folgendes geschrieben : | galagher hat folgendes geschrieben : | Weiters: Muss CF_RICHTEXT als Word oder als UINT (= LongWord) dekalriert werden? | RegisterClipboardFormat liefert einen UINT zurück, von daher ist das auch der passende Typ. |
Ok, danke!
Ich muss mich korrigieren: Der Fehler tritt, wenn, dann schon an dieser Stelle auf:
Delphi-Quelltext 1: 2: 3: 4: 5:
| for i := 0 to n-1 do begin aFormats[i] := ClipBoard.Formats[i]; ClipBoard.GetFormat(aFormats[i], aStreams[i]); end; |
Die Fehlermeldung lautet:
Zitat: | Projekt project1 hat Exception-Klasse "External SIGSEV" ausgelöst.
Bei Adresse: 7FF833245544 |
Wie gesagt, zig Mal funktioniert es, dann 1x nicht. Und auch nicht nur dann, wenn der RTF-formatierte Text schon in der Zwischenablage ist, bevor mein Programm startet, auch das muss ich korrigieren.
Auch ist es egal, wo ich CF_RICHTEXT deklariere, ob im CreateWnd oder im initialization-Abschnitt oder auch gar nicht. Es klappt meistens, aber eben nicht immer.
Das Beste: Wenn ich im Debug-Modus das Programm einfach weiter ausführe, ist die Grafik eingefügt und der Text ist samt Formatierung wieder in der Zwischenablage, so, als sei nichts gewesen!
Wenn ich das Programm alleine, ohne Lazarus, ausführe, kommt die Fehlermeldung: Zitat: | project1.exe funktioniert nicht mehr. [...] |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 17.05.20 20:46
Ich denke, ich habe die Ursache des Fehlers gefunden: Es geht (manchmal) schief, wenn versucht wird, auf ein ungültiges ClipBoard-Format zuzugreifen. Das passiert zB., wenn die Zwischenablage RTF-formatierten Text einer alten Microsoft-Word-Version enthält.
Leider kann ich das nicht abfangen, denn eine Funktion ClipBoard.isValidFormat(...) gibt es nicht.
Verwende ich als Quelle hingegen ein aktuelles LibreOffice, tritt der Fehler nicht mehr auf.
galagher hat folgendes geschrieben : | Das Beste: Wenn ich im Debug-Modus das Programm einfach weiter ausführe, ist die Grafik eingefügt und der Text ist samt Formatierung wieder in der Zwischenablage, so, als sei nichts gewesen! |
Ja, das ist das Beste daran. Ich habe das jetzt so behoben, dass ich daraus eine Funktion gemacht habe, die False zurück gibt, wenn dieser Fehler auftritt, und dabei dennoch weiterarbeitet, denn es klappt ja trotzdem:
Delphi-Quelltext 1: 2:
| if not ClipBoard.GetFormat(aFormats[i], aStreams[i]) then Result := False; | Ob das ratsam ist, kann ich nicht beurteilen, aber, wie gesagt, alles funktioniert dabei ganz normal.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 17.05.20 23:11
Interessant wäre bei dem Fehler der Stacktrace. Die Speicheradresse hilft da nicht viel...
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 18.05.20 08:16
Ich muss den Code noch verbessern: So, wie er jetzt ist, sind danach alle ClipBoard-Formate im RTF-Format, normaler Text steht dann anderen Anwendungen nicht mehr zur Verfügung.
jaenicke hat folgendes geschrieben : | Interessant wäre bei dem Fehler der Stacktrace. Die Speicheradresse hilft da nicht viel... |
Meinst du die Zeile, bei der der Debugger (in einem eigenen Fenster) anhält und diese markiert?
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 18.05.20 10:05
Ja, und dann das Fenster Call Stack (auch Stacktrace genannt) anschauen, um die genaue Ursache (hoffentlich) zu finden.
Aber was willst du überhaupt mit der Sonderbehandlung von CF_RICHTEXT (beim Wiederherstellen der Zwischenablage)?
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 18.05.20 13:03
Th69 hat folgendes geschrieben : | Aber was willst du überhaupt mit der Sonderbehandlung von CF_RICHTEXT (beim Wiederherstellen der Zwischenablage)? |
Ohne CF_RICHTEXT ist sonst nur der reine Text, ohne RTF-Formatierung, in der Zwischenablage.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 18.05.20 14:22
Ich meine
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if cpFormat = CF_RICHTEXT then for i := Low(aFormats) to High(aFormats) do begin if aFormats[i] = cpFormat then Clipboard.SetFormat(cpFormat, aStreams[i]) end else ... |
Warum du also nur im else-Zweig alle Formate wieder zurückschreibst?
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 18.05.20 16:13
Th69 hat folgendes geschrieben : | Warum du also nur im else-Zweig alle Formate wieder zurückschreibst? |
Ja, das meinte ich damit, dass ich dann nur noch den RTF-formatierten Text in der Zwischenablage habe. Ich weiss im Moment aber nicht, wie ich herausfinde, wo ich den RTF-formatierten Text zurückschreiben muss.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 18.05.20 17:00
Th69 hat folgendes geschrieben : | Ja, und dann das Fenster Call Stack (auch Stacktrace genannt) anschauen, um die genaue Ursache (hoffentlich) zu finden. |
Nun, das Assembler-Fenster markiert die Zeile:
00007FF833245544 807a0f05 cmpb $0x5,0xf(%rdx)
Wo finde ich das Fenster Call Stack bzw. Stacktrace?
Was die Wiederherstellung der verschiedenen Formate anlangt, komme ich nicht weiter:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| for i := 0 to n-1 do begin aFormats[i] := ClipBoard.Formats[i]; if not ClipBoard.GetFormat(aFormats[i], aStreams[i]) then Result := False; end;
for i := Low(aFormats) to High(aFormats) do begin if aFormats[i] = CF_RICHEDIT then Clipboard.SetFormat(CF_RICHEDIT, aStreams[i]) else ClipBoard.SetFormat(aFormats[i], aStreams[i]); end; |
Funktioniert aber nicht. Es ist dann nur reiner Text in der Zwischenablage.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 18.05.20 17:42
Müsste im Menü "View -> Debug Windows -> Call stack" sein (laut Internet, da ich Lazarus nicht kenne).
Ich verstehe immer noch nicht, was du genau erreichen möchtest.
Fehlen dir noch Grundkenntnisse beim Programmieren? Die Sonderabfrage auf CF_RICHTEXT bei deiner unteren Schleife ist doch komplett überflüssig (da die Schleife doch sowieso über alle gespeicherten Formate iteriert).
Ich kann dir das Tool Free Clipboard Viewer empfehlen, das zeigt alle zurzeit enthaltenen Formate an (habe ich gestern auch für ein Programm bei mir bzgl. HTML-Format benötigt).
Es liegt ja an dem jeweiligen Programm, welches der aktuell enthaltenen Formate es benutzt (ein reiner Texteditor nutzt nur das Text-Format, wenn es denn enthalten ist und ignoriert alle anderen Formate - und andere Programme überprüfen dann die Formate in jeweiliger Priorität und das Text-Format dann meistens als letztes).
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 18.05.20 18:25
Th69 hat folgendes geschrieben : | Müsste im Menü "View -> Debug Windows -> Call stack" sein (laut Internet, da ich Lazarus nicht kenne). |
Ok, das ist dann also "Aufrufstack". Dort steht:
Zitat: | Index Position Zeile Funktion
0 :7FF833245544 - ?? |
Ich muss das jedesmal abtippen, da kopieren nicht funktioniert, weil die Zwischenablage in diesen Momenten gesperrt ist.
Th69 hat folgendes geschrieben : | Ich verstehe immer noch nicht, was du genau erreichen möchtest. |
Ich möchte ine Grafik in ein TRichMemo einfügen. Die Methode, die TRichMemo mitbringt, ist unbrauchbar, weil man damit zwar Grafiken einfügen kann, diese aber nicht gespeichert werden, weil die entsprechenden Daten nicht in die Datei geschrieben werden. Aber per ClipBoard funktioniert es. Also dachte ich, sichere den Inhalt der Zwischenablage, kopiere die Grafik hinein, füge die Grafik ins RichMemo ein, stelle den Inhalt der Zwischenablage wieder her.
Funktioniert prinzipiell. Ich kann aber nicht erreichen, dass bei RTF-Daten die beiden Formate CF_RICHEDIT und CF_TEXT erhalten bleiben. Entweder habe ich ausschliesslich CF_RICHEDIT oder ausschliesslich CF_TEXT, je nachdem, wie ich den Code abändere (s. den Code-Schnipsel).
Th69 hat folgendes geschrieben : | Fehlen dir noch Grundkenntnisse beim Programmieren? Die Sonderabfrage auf CF_RICHTEXT bei deiner unteren Schleife ist doch komplett überflüssig (da die Schleife doch sowieso über alle gespeicherten Formate iteriert). |
Ja, das sollte man meinen. Es ist aber nicht so. Meine Grundkenntnisse beim Programmieren sind durchaus ausreichend, zu erkennen, dass das überflüssig ist - normalerweise. Hier aber nicht, denn wenn ich den Code so abändere: ...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| for i := Low(aFormats) to High(aFormats) do ClipBoard.SetFormat(aFormats[i], aStreams[i]); |
... schreibe ich natürlich alles in die Zwischenablage zurück, aber es ist danach nur reiner Text in der Zwischenablage, die RTF-Formatierung geht verloren.
Leider kann man das alles mit Delphi nicht nachstellen, da gibt es zB. kein ClipBoard.GetFormat.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 18.05.20 19:56
Einloggen, um Attachments anzusehen!
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 19.05.20 07:25
jaenicke hat folgendes geschrieben : | Ein Screenshot ist auch möglich.
Aber es gibt auch einen Knopf für das Kopieren: |
Da gibt es einen Button "Alles kopieren" (oder so, in diesem Sinne, hab ich jetzt nicht vor mir). Das funktionierte nicht.
Es bleibt aber die Frage stehen, warum ich das RTF-Format nicht richtig hin bekomme! Es wird jedenfalls nicht automatisch erkannt, automatisch wird nur CF_TEXT, CF_BITMAP usw. erkannt.
Da gibt es noch eine weitere Möglichkeit: Ein temporäres TRichMemo. Unelegant, zugegeben, wird aber vermutlich funktionieren. Kann ich ja mal versuchen.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 19.05.20 13:25
Wie überprüfst du denn, welche Formate alles in der Zwischenablage sind?
Wenn du also zweimal deinen Code aufrufst (mit Auslesen und zurückschreiben aller Formate), dann fehlt plötzlich das RTF-Format?
Was mich auch noch wundert, ist, daß du extra noch RichEdit.CF_RTF registrieren mußt, denn das ist ja ein Standard-Format (s.a. "Standard Clipboard Formats"-Liste im oben schon verlinkten FreeClipboardViewer).
Edit: OK, in Windows Clipboard Formats steht, daß es nur ein "Common Application Clipboard Format" ist und kein "Standard Clipboard Format".
Aber entspricht denn RichEdit.CF_RTF = 'Rich Text Format' (bzw. 'text/richtext')?
Edit: Auch das konnte ich jetzt in How to reliably detect RICHTEXT format on clipboard? nachlesen.
Du kannst auch mal mittels Clipboard.SupportedFormats(list) dir eine Liste aller vom System unterstützten Formate zurückliefern lassen (ohne vorher die extra Registrierung durchzuführen), s.a. View the clipboard contents.
Und bzgl.
galagher hat folgendes geschrieben: | Leider kann man das alles mit Delphi nicht nachstellen, da gibt es zB. kein ClipBoard.GetFormat. |
In der VCL gibt es die Methoden TPicture.LoadFromClipboardFormat und TPicture.SaveToClipboardFormat, da diese hauptsächlich für die verschiedenen Bildformate benutzt werden. Andererseits sind dies auch nur Wrapper für die WinAPI-Funktionen, s. Using the Clipboard:
- Copying Information to the Clipboard
- Pasting Information from the Clipboard
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 19.05.20 16:08
Th69 hat folgendes geschrieben : | Wie überprüfst du denn, welche Formate alles in der Zwischenablage sind? |
Gar nicht, ich sichere zuerst alle Formate und stelle sie danach wieder her. Das funktioniert aber mit dem RTF-Format nicht. Da bleibt nur Plain-Text übrig. Ansosnten funktioniert das sehr wohl, mit normalem Text, mit Icons und mit Bitmaps.
Th69 hat folgendes geschrieben : | Wenn du also zweimal deinen Code aufrufst (mit Auslesen und zurückschreiben aller Formate), dann fehlt plötzlich das RTF-Format? |
Nein, nur wenn ich alle Formate zurückschreibe, ohne das RTF-Format extra zu berücksichtigen. Es wird offenbar nicht erkannt.
Auch, wenn ich mir die Position im Array merke und das RTF-Format (den formatierten Text) explizit an diese Position zurückschreibe, klappt es nicht. Da passt offenbar der Wert von "i" bei aStream[i] nicht. Oder was weiss ich. Es geht eben nicht.
Th69 hat folgendes geschrieben : | Was mich auch noch wundert, ist, daß du extra noch RichEdit.CF_RTF registrieren mußt, denn das ist ja ein Standard-Format |
Wie sonst? CF_RTF ist ja ein String, kein Format. Ich muss es also registrieren.
Ja, es entspricht! Das habe ich mir von eben dieser Seite abgeschaut.
Th69 hat folgendes geschrieben : | Du kannst auch mal mittels Clipboard.SupportedFormats(list) dir eine Liste aller vom System unterstützten Formate zurückliefern lassen (ohne vorher die extra Registrierung durchzuführen), |
Da ist 'Rich Text Format' bzw. 'text/richtext' nicht dabei.
Wird vor dem Einfügen der Grafik, also beim Sichern der Formate der Zwischanablage, das RTF-Format noch erkannt ( Clipboard.HasFormat(CF_RICHTEXT liefert True zurück), kann ich es nach dem Einfügen der Grafik, also bei Wiederherstellen der Formate der Zwischanablage, nicht mehr wiederherstellen. Der reine Text ist ja da, aber jede RTF-Formatierung ist verloren gegangen.
Wie erwartet, funktioniert es aber mit einem temporären TRichMemo, in das ich den RTF-formatierten Inhalt einfüge und hinterher von dort wieder in die Zwischanablage zurück kopiere. Aber irgendwie ist das doch nicht besonders schön. Klappt und kann man zur Not auch belassen, aber der direkte Weg über die Formate wäre eleganter.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 19.05.20 17:22
Ich frage noch mal: Wie überprüfst du denn, welche Formate alles in der Zwischenablage sind?
Damit meine ich nicht codetechnisch, sondern verwendest du ein externes Programm oder woher weißt du, daß das Richtext-Format nicht mehr zurückgeschrieben wird?
Darum habe ich dir ja auch den Link zu dem FreeClipboardViewer gegeben.
Und mit welchem Programm erzeugst du denn überhaupt den Richtext in der Zwischenablage?
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 19.05.20 17:44
Th69 hat folgendes geschrieben : | Ich frage noch mal: Wie überprüfst du denn, welche Formate alles in der Zwischenablage sind?
Damit meine ich nicht codetechnisch, sondern verwendest du ein externes Programm oder woher weißt du, daß das Richtext-Format nicht mehr zurückgeschrieben wird? |
Ganz einfach: Indem ich den Text, der ja das RTF-Format sein müsste, wenn man alles korrekt wieder zurückschreibt, ins RichMemo einfüge. Da wird aber eben nur Text ohne Formatierung eingefügt.
Ich habe dabei jetzt den FreeClipboardViewer eingesetzt: das RTF-Format ist hinterher tatsächlich nicht mehr vorhanden, sondern (u. a.) nur noch der reine Text. Also entweder ist die Wiederherstellung nicht korrekt, aber was kann bei dieser for-Schleife falsch sein? Oder das RTF-Format wird in aStreams[i] nicht mit gesichert. Das wird's sein, denke ich.
Th69 hat folgendes geschrieben : | Und mit welchem Programm erzeugst du denn überhaupt den Richtext in der Zwischenablage? |
Einerseits mit dem RichMemo selbst, andererseits mit Microsoft Word und mit LibreOffice, den RTF-Text kopiere ich dann in die Zwischenablage. Immer ist beim Zurückschreiben das RTF-Format weg, wie man mit FreeClipboardViewer sieht, obwohl es vorher vorhanden war.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
Th69
Beiträge: 4791
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 19.05.20 18:07
Wenn ich den Kommentar in Clipboard.pp
Zitat: | SetFormat
Clears the clipboard and adds the data. |
richtig verstehe, so kann mit dieser Funktion immer nur genau 1 Format gespeichert werden...
Probiere mal stattdessen AddFormat!
Zitat: | AddFormat:
Use these functions to add data to the supported formats.
|
(und vor der Schleife noch Clear aufrufen)
|
|
galagher
Beiträge: 2534
Erhaltene Danke: 44
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 19.05.20 19:54
Th69 hat folgendes geschrieben : | Probiere mal stattdessen AddFormat! |
Es funktioniert! Jetzt passt alles!
Nun tritt aber der SIGSEGV-Fehler wieder auf, wenn ich RTF-Text aus dem alten Word verwende. Er tritt auf beim Sichern der Formate in der Schleife:
Delphi-Quelltext 1: 2: 3: 4: 5:
| for i := 0 to n-1 do begin aFormats[i] := ClipBoard.Formats[i]; end; |
Nicht schon beim 1.Durchlauf, sondern beim 8. Den Fehler kann ich aber nicht abfangen.
Klar, jetzt ist der Code besser, übersichlicher und sauberer als mit dem leidigen temporären TRichEdit. Aber nun habe ich das Problem wieder, dass der mit Daten alter Programme (ca. 20 Jahre) nicht kann. Ok, sollte man ja ohnehin nicht mehr verwenden, aber es geht ums Prinzip: Warum?
Vielleicht findest du ja die Ursache, oder man kann noch etwas verbessern. Hier die ganze Funktion:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| function TCustomRichMemo.InsertGraphic(const aPicture: TPicture): Boolean; var i, n: Integer; aFormats: array of TClipBoardFormat; aStreams: array of TMemoryStream; begin Result := True;
try
n := ClipBoard.FormatCount; SetLength(aFormats, n); SetLength(aStreams, n);
for i := 0 to n-1 do aStreams[i] := TMemoryStream.Create;
try for i := 0 to n-1 do begin aFormats[i] := ClipBoard.Formats[i]; Result := ClipBoard.GetFormat(aFormats[i], aStreams[i]); end;
ClipBoard.Assign(aPicture.Bitmap); PasteFromClipboard;
ClipBoard.Clear; for i := Low(aFormats) to High(aFormats) do ClipBoard.AddFormat(aFormats[i], aStreams[i]);
finally for i := High(aStreams) downto Low(aStreams) do aStreams[i].Free; end;
except Result := False; ClipBoard.Clear; end; end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|