2012-01-20 11 views
2

私はTRichEditを使ってテキストを編集します。私は、スクロールバーがないようにコントロールの端に自動的にテキストをラップするWordWrapを有効にしています。 RichEditの幅は80列に収まるように設定されています。Delphi - WrapTextをRichEdit.Lines.Textのように動作させる方法

ワードラップは、単語間に時折スペースがある限り、この動作をうまくシミュレートします。しかし、あなたが非常にloooooooooooooooooongの単語RichEditのラップを持っている場合、自動的にそれを壊すし、WordWrapはしません!

もし私が今これらの折り返し線にアクセスしたいのであれば、RichEdit.Lines.Textでそれを得ることができます。これは自動的にCRLFを80列目に置くことになります。私がRichEdit.Textを使うと、WordWrapに適したCRLF

私はすでに試してみましたが、それは小さな関数ではありませんでしたが、TRichEditのラッピング関数を使用する方法があるかもしれませんか?私は隠されたRichEditを作成するアイデアを持っていますが、ワードラッピングを行うために幅を計算しなければならないので、この種のことは愚かなようです。

質問 - それ以外の場合は折り返すことができない長い単語をWordWrapで強制的に切断する方法はありますか?したがって、単語の長さが170文字の場合、3行の80 + 80 + 10にラップされますが、前と後の行を入力する前に単語の世話をしますか?

+0

80文字が何をしたいのですか?それとも、可変幅フォントが気になりますか? –

+0

固定幅の列80(または他の任意の)折り返しが必要です。列80を超える場合は、カットして別の行に折り返します。長すぎる場合は、カット。 – Coder12345

答えて

0

サイズのためにこれを試してみてください上:

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char); 
const 
    MAX_LENGTH = 80; 
var 
    nLineCount: integer; 
    sCurrentLine: string; 
begin 
    for nLineCount := 0 to RichEdit1.Lines.Count - 1 do 
    begin 
    // no space in this line 
    if (pos(' ',RichEdit1.Lines.Strings[nLineCount]) = 0) then 
    begin 
     if (length(RichEdit1.Lines.Strings[nLineCount]) > MAX_LENGTH) then 
     begin 
     // hold the whole line 
     sCurrentLine := RichEdit1.Lines.Strings[nLineCount]; 
     // the current line, make the max value 
     RichEdit1.Lines.Strings[nLineCount] := copy(sCurrentLine,1,MAX_LENGTH); 
     // build the next line 
     RichEdit1.Lines.Add(
     copy(sCurrentLine,MAX_LENGTH + 1,1)); 
     end; 
    end; 
    end; 
end; 
+0

入力中に入力した後にテキストを再フォーマットする必要があるため、これを使用できません。 RichEdit.Lines.Textは、WordWrapがコードなしでオンになっているときに既にこれを行います。しかし、答えをありがとうが、私は誰かが別のソリューションを思い付くのを待つ必要があります。 – Coder12345

関連する問題