richeditを完全に消去するには?

解決


りっちえでぃっと  2005-03-04 11:00:20  No: 13552

まず、このソースを見てください。
----------------------------
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の最後にフォーカスを持ってくる方法を教えてもらえたら幸いです。
どなたかご教授おねがいします。


ふとっぱら  2005-03-04 12:11:21  No: 13553

Addメソッドは太っ腹。必ず改行をオマケに付けてくれます。
もちろん何も買わなくてもオマケの改行をくれます。

  // R行、C列目にキャレット移動
  with RichEdit1 do
    SelStart := SendMessage(Handle, EM_LINEINDEX, R, 0) + C;


みちづれ  2005-03-04 17:04:21  No: 13554

>Enterを押したとき、完全にRichEdit1を消去するにはどうしたらいいでしょうか。
Button1Clickを呼び出したら、key もクリアしましょ。


りっちえでぃっと  2005-03-05 00:24:20  No: 13555

ふとっぱらさん、みちづれさん、早速レスありがとうございます。
最初にキャレットを移動するには、
with RichEdit1 do
    SelStart := SendMessage(Handle, EM_LINEINDEX, 0, 0);
でいいのでしょうか?このようにしても、うまくいかないのですが。。
>Button1Clickを呼び出したら、key もクリアしましょ。
というのはどういうことでしょうか?
最後にキャレットを持ってくるというのは、このプログラムの場合、RichEdit2に文字を追加し続けて行くと、下のほうが見えなくなってしまうのを避けるためなのですが、これでうまくいくのか疑問になってきました・・。
再度ご教授よろしくお願いします。


りおりお  2005-03-05 01:45:21  No: 13556

こんな感じです。

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;


りっちえでぃっと  2005-03-05 03:55:12  No: 13557

りおりおさん、ありがとうございます。
大変助かりました。おかげですっきりしました。
また、よろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加