// 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;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke