初歩的な質問で恐縮ですが。DelPhi 6. Windows 98の環境です。Richeditのサイズを超えるテキストデータの編集を終える際に、最後に表示していた行の状態・場所を、次回にそのまま再現したいと思います。Richeditの一番上の文字列情報をどうプログラムしたら取得できるのでしょうか?どなたかお教え下さい。
RichEdit1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0)
でとれます。
http://www.borland.co.jp/tips/delphi/dh013/
ここに使えそうなメッセージが出ています。
EM_GETFIRSTVISIBLELINEはあるのですけど、
EM_SETFIRST... というメッセージはありません。
まあ、CaretPosプロパティを使って、一度その行にジャンプしたあと、
EM_SCROLLCARET(これを使うと、カレット(文字入力の縦棒)が見えるように移動)を使うといいです。
ちなみに最後に表示されてる行は、
同じ大きさのフォントを設定したキャンバスで、TextHeight('A') とかで調べた数値を計算します。
そのときは、RichEditのフレームのサイズを、考慮することをお忘れなく。
ありがとうございました、にしの様、たかみちえ様!!
RichEdit.Perform(EM_SCROLL, SB_LINEDOWN, 0)も併用して、成功しました。Delphi のEditor デモプログラムでもPerform が使われていることを今になって発見。。。いつもこんな感じのものぐさでして、またまたお力をお借りしてしまいました。
ちょっと困ったことを見つけたので、一言。
EM_SCROLLCARETは、Messages.pasに定義されているんですけど、
RichEdit.pasにも定義されているのを見つけました。
さらに、お互い示しているメッセージが違います。
RichEditにあるものは、リッチテキスト用のメッセージではないかという解釈が、
どこかにのっていましたけど、
RichEdit.PlaintextをTrueにしているときは、このメッセージが送られても、
何の反応も示してくれません。
なので、その場合、Messagesのほうを送らないといけないようです。
uses節のRichEditを、Messagesより前に書けば解決します。
普通RichEditのほうがあとに書かれてしまうので、いちおう注意してください。
もう遅いですけど、いちおう(^^ゞ
ツイート | ![]() |