2010-11-24 22 views
1

Ich habe ein Problem beim Kopieren des Inhalts einer Notiz in eine RichEdit-Komponente.Delphi Kopieren Memo zu Richedit Problem

Ich dachte, es

Richedit.text := memo.text; 

jedoch (nicht CR/LF), wenn ich dies der Richedit beginnt eine neue Zeile, wenn das Memo Text an eine neue eine neue Zeile umgebrochen wird, sondern nur Einwickeln nutzen würde. Das RichEdit startet auch eine neue Zeile, wenn das Memo eine neue Zeile startet, die in Ordnung ist.

Jeder bekam eine Idee, wie Sie den Text aus einem Memo in die richeditbox im Richedit brechen ohne die Linien zu kopieren, wenn die Memotext hüllt

Dank

Colin

+1

was ist artline? –

+0

Können Sie bitte Delphi Version und OS Version angeben? –

+0

Seine Delphi 7 auf Windows Vista – colin

Antwort

2

Wenn ich

RichEdit1.Text := Memo1.Text 

Die virtuellen "Zeilenumbrüche" der Memo1 werden nicht magisch in Zeilenumbrüche (CRLF) in derumgewandelt, und sie sollten nicht sein. Diese "Zeilenumbrüche" werden nicht im Memotextpuffer gespeichert. Tatsächlich lautet die offizielle Embarcadero-Dokumentation:

Legen Sie WordWrap zu True fest, um den Bearbeitungssteuertext am rechten Rand einzubinden, damit es in dem Clientbereich passt. Die Verpackung ist nur kosmetisch. Der Text enthält keine Rückkehrzeichen, die nicht explizit eingegeben wurden.

Wie auch immer, eine alternative Möglichkeit ist

RichEdit1.Lines.Assign(Memo1.Lines); 

zu tun, obwohl dies die virtuellen Zeilenumbrüche erhalten, wie weiter unten kommentiert.

aktualisieren

Wahrscheinlich haben Sie eine andere Fremdheit haben (Bug) in Ihrem Code, oder haben Sie Ihre Frage in einer Art und Weise zu vage formuliert. Um jedoch das Risiko eines Problems mit dem VCL-Wrapper zu beseitigen, versuchen Sie dies:

procedure TForm4.FormClick(Sender: TObject); 
var 
    buf: PChar; 
const 
    MAX_BUF_SIZE = 65536; 
begin 
    GetMem(buf, MAX_BUF_SIZE * sizeof(char)); 
    Memo1.Perform(WM_GETTEXT, MAX_BUF_SIZE, buf); 
    RichEdit1.Perform(WM_SETTEXT, 0, buf); 
    FreeMem(buf); 
end; 
+0

diese sind überhaupt keine Zeilenumbrüche, in der Tat –

+0

Nein, sie werden manchmal als "virtuelle Zeilenumbrüche", wie ich schrieb. –

+2

Wenn ich RichEdit1.Lines.Assign (Memo1.Lines) versuche, werden die virtuellen Zeilenumbrüche in RichEdit übertragen. Das macht eigentlich Sinn. Die zugrunde liegende TStringList hat für jede gezogene Linie ein Element, nicht nur die harten Unterbrechungen. Ich bin eher verwirrt darüber, wie die Zuweisung der Text-Eigenschaft die Pausen zu korrigieren scheint. –

0

Als schmutzigen Hack, könnten Sie den Zeilenumbruch auf dem Memo Sie dann die Zuordnung ausschalten und dann Wort wechseln Sie wieder auf wickeln? Es ist ein hässlicher Hack, aber es könnte den Trick für Sie tun, wenn es ein seltsames Verhalten ist.