RichEdit場の最上行を取得するには?

解決


オン赤  2002-07-12 20:54:15  No: 1106

初歩的な質問で恐縮ですが。DelPhi 6. Windows 98の環境です。Richeditのサイズを超えるテキストデータの編集を終える際に、最後に表示していた行の状態・場所を、次回にそのまま再現したいと思います。Richeditの一番上の文字列情報をどうプログラムしたら取得できるのでしょうか?どなたかお教え下さい。


にしの  2002-07-12 22:11:03  No: 1107

RichEdit1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0)
でとれます。

http://www.borland.co.jp/tips/delphi/dh013/
ここに使えそうなメッセージが出ています。


たかみちえ  URL  2002-07-13 08:27:37  No: 1108

EM_GETFIRSTVISIBLELINEはあるのですけど、
  EM_SETFIRST...  というメッセージはありません。

  まあ、CaretPosプロパティを使って、一度その行にジャンプしたあと、
EM_SCROLLCARET(これを使うと、カレット(文字入力の縦棒)が見えるように移動)を使うといいです。

  ちなみに最後に表示されてる行は、
同じ大きさのフォントを設定したキャンバスで、TextHeight('A') とかで調べた数値を計算します。
そのときは、RichEditのフレームのサイズを、考慮することをお忘れなく。


オン赤  2002-07-13 17:23:17  No: 1109

ありがとうございました、にしの様、たかみちえ様!!
RichEdit.Perform(EM_SCROLL, SB_LINEDOWN, 0)も併用して、成功しました。Delphi のEditor デモプログラムでもPerform が使われていることを今になって発見。。。いつもこんな感じのものぐさでして、またまたお力をお借りしてしまいました。


たかみちえ  URL  2002-09-03 22:18:02  No: 1110

ちょっと困ったことを見つけたので、一言。

  EM_SCROLLCARETは、Messages.pasに定義されているんですけど、
RichEdit.pasにも定義されているのを見つけました。
さらに、お互い示しているメッセージが違います。

  RichEditにあるものは、リッチテキスト用のメッセージではないかという解釈が、
どこかにのっていましたけど、
RichEdit.PlaintextをTrueにしているときは、このメッセージが送られても、
何の反応も示してくれません。
なので、その場合、Messagesのほうを送らないといけないようです。

  uses節のRichEditを、Messagesより前に書けば解決します。
普通RichEditのほうがあとに書かれてしまうので、いちおう注意してください。

  もう遅いですけど、いちおう(^^ゞ


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








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