掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TRichEdit で、キャレットを行末に置くにはどうすればいいでしょう? (ID:38860)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
マウス・クリックではちゃんと行末にキャレットを置けるのですが、 それを制御で置こうとしています。 キャレットが次行の先頭に回り込んでしまうと、行番号の管理が煩雑になりそうで困っています。 一応、CRLF の手前では、思ったようにちゃんとキャレットが行末に表示されます。 どこかが悪いのか、あるいは何かが不足しているのか、どなたか解決策をご教示ください。 環境: Win98SE + Delphi4 //////////////////////////////////////////// unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) RichEdit1: TRichEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} // 指定の行番号の行頭にキャレットを移動させる procedure GoCaret(Control: TRichEdit; LineNum: LongInt); begin Control.SelStart := SendMessage(Control.Handle, EM_LineIndex, LineNum, 0); end; // キャレット位置を Lines[Index] 文字列の最後/行末にセットする。 // ** WordWrap された文字列の行末指定では次行の頭に行ってしまう!!。 procedure GoLineEnd(Control: TRichEdit; LineNum: LongInt); begin GoCaret(Control, LineNum); Control.SelStart := Control.SelStart + Length(Control.Lines[LineNum]); end; ///////////////////////////////////////////////////////////////////////// procedure TForm1.Button1Click(Sender: TObject); begin RichEdit1.Clear; RichEdit1.WordWrap := True; RichEdit1.Width := 185; RichEdit1.Font.Size := 9; RichEdit1.Lines.Add('123456789+123456789-123456789*123456789#'); RichEdit1.Lines.Add('123456789+123456789-123456789*123456789#'); RichEdit1.Lines.Add('123456789+123456789-123456789*123456789#'); RichEdit1.Lines.Add('123456789+123456789-123456789*123456789#'); GoLineEnd(RichEdit1, 0); // 行指定が 0,2,4 だと、次行の行頭にキャレットが来てしまう。 RichEdit1.SetFocus; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.