// Die Eigenschaft
"Plaintext" von "TRichEdit" regelt, ob der Inhalt
// in eine Datei bzw. in einen Stream als Richtext oder als Plaintext
// gespeichert wird. Beim Laden allerdings nützt das wenig. Wenn z.B.
// im Clipboard oder in einem String Richtext steht, dann wird
Richtext
// geladen, auch wenn "Plaintext" auf "True" steht. Um das zu umgehen
// kann man eigene Prozeduren erstellen:
// Getestet mit D4 unter XP
// 1. Laden aus Zwischenablage
// Variante 1
uses Clipbrd;
procedure RTextFromClipboard(RE: TRichedit);
var
h: THandle;
P: PChar;
CF: Word;
begin
if RE.Plaintext then CF := CF_TEXT else
CF := RegisterClipboardFormat('Rich Text Format');
RE.Clear;
with Clipboard do begin
Open;
try
if HasFormat(CF) then begin
h := GetAsHandle(CF);
P := GlobalLock(h);
RE.Text := p;
GlobalUnlock(h);
end;
finally
Close;
end;
end;
end;
// Beispiel 1 (nur Text)
procedure TForm1.Button5Click(Sender: TObject);
begin
Richedit1.Plaintext := true;
RTextFromClipboard(Richedit1);
end;
// Beispiel 2 (Richtext)
procedure TForm1.Button7Click(Sender: TObject);
begin
Richedit1.Plaintext := false;
RTextFromClipboard(Richedit1);
end;
//--------------------------------------------------------------
// Variante 2
procedure RTextFromClipbrd(RE: TRichedit);
begin
RE.clear;
if RE.Plaintext then
RE.text := Clipboard.asText else
RE.Perform(WM_PASTE, 0, 0);
end;
//--------------------------------------------------------------
// 2.
Laden aus einem String
//
Das gleiche Problem ergibt sich, wenn man einen String hat, der
// Richtext enthält. Das könnte man über den Umweg "Stream" lösen:
procedure TForm1.Button5Click(Sender: TObject);
var
s: string;
ss: TStringStream;
begin
s := '{\rtf1\ansi\ansicpg1252\deff0\deflang1031\deflangfe1031\' +
'deftab708{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}' +
'{\f1\fswiss\fprq2\fcharset0 Arial;}}'#13#10 +
'{\colortbl ;\red255\green0\blue0;\red51\green153\blue102;\' +
'red51\green102\blue255;\red153\green51\blue102;}'#13#10 +
'\viewkind4\uc1\pard\f0\fs24 Das ist ein Test'#13#10 +
'\par \cf1\b\i\fs32 Das ist ein Test'#13#10 +
'\par \cf2\b0\i0\f1\fs48 Das\cf0 ist \cf3 ein\cf0 \cf4 Test\cf0'#13#10 +
'\par \f0\fs24'#13#10 +
'\par'#13#10 +
'\par }';
Richedit1.Plaintext := true;
ss := TStringstream.create(s);
ss.position := 0;
Richedit1.lines.loadfromstream(ss);
ss.free;
end;
|