度々失礼します。D2005・Win32・WindowsXPでエディタを作成しています。
タイトルのとおりですが、フォームに二つのRichEditをつくり、ひとつは左側において、もうひとつは全体表示(Align:alClient)にしました。
全体表示=RichEdit1、左側=RichEdit2としています。
RichEdit2はRichEdit1が改行されて行が増えるたびに「行頭番号」を生成するようにしています。
そのプログラム自体はまったく問題なく動くのですが、二つのRichEditの文字の縦の行間(ごめんなさい、うまい言い方が出来ないのですが…)が違っていてRichEdit2の行頭番号がRichEdit1の行からずれていってしまうのです。
検索で文字サイズ・フォントサイズ・行間などなど(もちろんDelphiといれて)探しては見たのですが、どうもうまく出来なくてかなり見栄えが悪くなってしまっています。
こんな感じです↓
RichEdit2 :RichEdit
1行 :あ
:い
2行 :う
(命令どおりちゃんとRichEdit1の行が増えるたび、RichEdit2の行頭番号は増えます)
よろしくお願いします。
>RichEdit1の行からずれていってしまうのです。
行がずれるのを単に行が増加する状態と解釈します.つまり,行間が変化す
るのではないという意味です.
>RichEdit1が改行されて行が増えるたびに「行頭番号」を生成
RichEdit1に文字列をキーボードから入力していく場合は,改行文字を判定し
ていけばこのような現象は,まずないと考えられます.
一方,コードでRichEdit1にテキストを代入後,改行を判断する時は,
RichEditのWordWrapプロパティとテキストの読込み方式,そしてその設定時
期(設計時か実行時か)に関係してきます.
これによって,元の文章の本来の改行位置以外に,RichEdit1の折返し部
(右端)に改行文字が挿入されてしまうことも考えられます.とりあえず,
RichEdit1のWordWrapをFalseにして様子をみたらどうでしょう.
Mr.XRAYさんありがとうございます。
わかりにくい説明だったようで申し訳ありません。
RichEdit1で改行文字を判定…という形ではないです。
以下が一部分なんですが…
----
procedure TForm1.RichEdit1Change(Sender: TObject);
var
i,j,k : Integer;
begin
i := RichEdit1.Perform(Em_LineFromChar,$FFFF, 0); //iにRichEdit1の最終行を代入
j := RichEdit2.Perform(Em_LineFromChar,$FFFF, 0); //jにRichEdit2の最終行を代入
if ((i>=j)=true) then
begin
for k:=j to i do //kにjを代入し、iになるまで
begin
RichEdit2.Lines.Add(IntToStr(k+1)+'行:'); //RichEdit2に行数を加えていく
end;
end
else
begin //もし、iは(j-1)未満で
if ((i<j-1)=true) then
begin
if((i<j-2)=true) then //かつ、(j-2)未満なら
begin
RichEdit2.Lines.Clear;
for k:=0 to i do
begin
RichEdit2.Lines.Add(IntToStr(k+1)+'行:'); //RichEdit2に行数を加えていく
end;
end
else //iが(j-1)未満で(j-2)以上のとき
begin
RichEdit2.Lines.Delete(j-1); //RichEdit2の最終行を削除
SendMessage(RichEdit2.Handle, WM_VSCROLL,SB_LINEDOWN, 0);
end
end
end
end;
------
こんな形にしています。
>RichEdit1のWordWrapをFalseにして様子をみたらどうでしょう
ということでやってみたのですが、やはり変わらないようです。
すでに
RichEdit1とRichEdit2は文字を表示する最初の開始位置自体がすこしずれているような感じです。
行が増加するという形ではなく、Fontのプロパティで言えばHeightですね。
二つとも同じ-11で設定していますが、文字と文字の縦の余白が一致しないという感じです。
すいません、何とか擬似的ではありますが自己解決できました。
根本的な解決ではないのですが、とりあえずはこれでよしということで終わらせます。
すいませんでした。
ツイート | ![]() |