まず、このソースを見てください。
----------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
richedit2.Lines.Add(richedit1.Lines.Text);
richedit1.Lines.Clear;
end;
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then Button1Click(Sender);
end;
----------------------------
form1にはRichEditが2つとButtonが1つあります。
RichEdit1の内容をRichEdit2に追加して行くものなのですが、RichEdit1上でEnterを押したとき、RichEdit1はClearされているはずなのに、1つ改行されてしまいます。
Enterを押したとき、完全にRichEdit1を消去するにはどうしたらいいでしょうか。
また、RichEditの1文字目にフォーカスを持ってくる方法、RichEditの最後にフォーカスを持ってくる方法を教えてもらえたら幸いです。
どなたかご教授おねがいします。
Addメソッドは太っ腹。必ず改行をオマケに付けてくれます。
もちろん何も買わなくてもオマケの改行をくれます。
// R行、C列目にキャレット移動
with RichEdit1 do
SelStart := SendMessage(Handle, EM_LINEINDEX, R, 0) + C;
>Enterを押したとき、完全にRichEdit1を消去するにはどうしたらいいでしょうか。
Button1Clickを呼び出したら、key もクリアしましょ。
ふとっぱらさん、みちづれさん、早速レスありがとうございます。
最初にキャレットを移動するには、
with RichEdit1 do
SelStart := SendMessage(Handle, EM_LINEINDEX, 0, 0);
でいいのでしょうか?このようにしても、うまくいかないのですが。。
>Button1Clickを呼び出したら、key もクリアしましょ。
というのはどういうことでしょうか?
最後にキャレットを持ってくるというのは、このプログラムの場合、RichEdit2に文字を追加し続けて行くと、下のほうが見えなくなってしまうのを避けるためなのですが、これでうまくいくのか疑問になってきました・・。
再度ご教授よろしくお願いします。
こんな感じです。
procedure TForm1.Button1Click(Sender: TObject);
begin
if Length(richedit1.Text) = 0 then exit;
richedit2.Lines.Add(richedit1.Lines.Text);
richedit2.Lines.Delete(richedit2.Lines.Count-1);
richedit2.Perform(EM_SCROLLCARET,0,0);
richedit1.Lines.Clear;
end;
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if key = #13 then begin
Button1Click(Sender);
key := #0; // これを追加
end;
end;
// キャレットを先頭に持っていってスクロール
procedure TForm1.Button2Click(Sender: TObject);
begin
richedit2.SelStart := 0;
richedit2.Perform(EM_SCROLLCARET,0,0);
richedit2.SetFocus;
end;
// キャレットを末尾に持っていってスクロール
procedure TForm1.Button3Click(Sender: TObject);
begin
richedit2.SelStart := Length(richedit2.Text);
richedit2.Perform(EM_SCROLLCARET,0,0);
richedit2.SetFocus;
end;
りおりおさん、ありがとうございます。
大変助かりました。おかげですっきりしました。
また、よろしくお願いします。
ツイート | ![]() |