Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 287
Erhaltene Danke: 12



BeitragVerfasst: Di 10.12.13 21:08 
Hallo Fan-Gemeinde,
das Forum zeigt an verschiedenen Stellen Lösungen, wie in ein Richedit-Objekt eine rtf-Datei als reiner (unformatierter) Text eingelesen werden kann [Richedit1.Plaintext:=true]. Problem: trotz Plaintext:= true kommt evtl. mit Strg V [PasteFromClipboard] formatierter Text ungewollt in die Vorlage. Hier hilft nach Kayser [SendMessage(RichEdit1.Handle, EM_PasteSpecial, CF_Text, 0) anstelle von PasteFromClipboard].
Ich würde das Verhalten in Richedit gerne nutzerabhängig machen und habe folgende Frage:
Gibt es eine Methode um vor dem Einfügen festzustellen ob in der Windows-Zwischenablage formatierter Text steht (z.B. rtf oder doc) oder reiner Text? Alternativ wäre die Frage: wenn sich formatierter Text in Richedit "eingeschlichen" hat, wie lösche ich alle Formatierungen in der Vorlage? Hinweis: in meiner Anwendung ist Plaintext fest vorbesetzt mit TRUE.
Danke für alle guten Tipps!
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 10.12.13 21:29 
Wieso nimmst du nich einfach ein TMemo? Da wird dein reinkopierter RTF-Text immer unformatiert angezeigt ...
baumina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Mi 11.12.13 17:23 
Soviel ich gelesen habe, ist die Zwischenablage von Windows so aufgebaut, dass der Text in verschiedenen Formaten vorliegt, z.B. RTF und Reintext ohne Formatierung. Das könntest du mit TClipboard.FormatCount und TClipboard.Formats mal überprüfen. Desweiteren bietet dir TClipboard.AsText den unformatierten Text an.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 287
Erhaltene Danke: 12



BeitragVerfasst: Do 12.12.13 21:29 
1. Schade wenn jemand die Frage nicht richtig liest. Wie ich in ein Richedit-Objekt den Clipboardpuffer entweder formatiert oder als reiner ASCII-Text einfügen kann, habe ich ja selbst beschrieben. Außerdem arbeite ich nicht mit TMemo.
2. Der Befehl Clipboard.FormatCount liefert mir die Anzahl der Zeilen im Zwischenpuffer (danke) und den Befehl Clipboard.Formats habe ich in der Anwendung nicht verstanden. Hinter Formats muss laut Hilfe ein Index folgen, also etwa so: Clipboard.Formats[index]. Als Ergebnis wird ein Wert im Typ Word übergeben. Was aber besagt dies und wäre als Indes anzugeben? Ich erwarte eher entweder eine Boolsche-Größe die gesagt: reiner-Text oder formatbehafteter-Text bzw. Werte für Text, rtf-Text, Bitmap, Picture, etc. In der Delphi-Hilfe finde ich noch folgenden Hinweis:
>>Mit der Eigenschaft Formats können die von der Zwischenablage verwendeten Formattypen aufgelistet werden. Grafikobjekte (wie Bitmaps und Metadateien) besitzen eigene Formate. Mit der Methode HasFormat können Sie feststellen, ob die Informationen in der Zwischenablage in einem Format vorliegen, das mit dem des Objekts, dem sie zugewiesen werden sollen, kompatibel ist.<<
Nun habe ich noch den Befehl HasFormat getestet. Leider liefert der Befehl Clipboard.HasFormat(CF_TEXT) auch dann True wenn rtf-formatierter Text (mit Farbe, Kursiv oder verschiedene Schriftgrößen) im Clipboard stehen. Neben CF_TEXT gibt es noch andere Variablen, z.B. CF_METAFILE, aber die kennt mein Compiler nicht. Warum:? Ich suche also immer noch eine Methode, die vor dem Einfügen (!) das Clipboard checkt.
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2556
Erhaltene Danke: 45

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Fr 13.12.13 19:47 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es eine Methode um vor dem Einfügen festzustellen ob in der Windows-Zwischenablage formatierter Text steht (z.B. rtf oder doc) oder reiner Text?
Zumindest für deine erste Frage habe ich eine Lösung hier gefunden: www.swissdelphicente...showcode.php?id=1606 gefunden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  CF_RTF: Word;
begin
  CF_RTF := RegisterClipboardFormat(Richedit.CF_RTF);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Clipboard.HasFormat(CF_RTF) then //tu was
end;

Habe es getestet, funktioniert!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!