DELPHI 5 Win7 64bitの環境です。
RichEditに数行書き込んだあとのスクロールバーの位置が
フォントの大きさによって変わり不審に思っています。
新規フォームにRichEditとButtonを配置し、
procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.ScrollBars := ssVertical ;
RichEdit1.Clear ;
RichEdit1.SelAttributes.Size := 22 ;
RichEdit1.Lines.Add( 'TEST : 1' ) ;
RichEdit1.Lines.Add( 'TEST : 2' ) ;
RichEdit1.Lines.Add( 'TEST : 3' ) ;
RichEdit1.Lines.Add( 'TEST : 4' ) ;
end;
として実行するとRichEditの縦スクロールの位置が
最終行の状態となります。
フォントサイズが21や23などの場合はスクロールバーは
第1行のままです。
フォームに配置した状態で、RichEditのサイズは横185 縦89、
フォントはMSPゴシックの標準でサイズは9です。
みなさんの環境ではいかがでしょうか。
Delphi5使っている人いるの?
確かに動きは違いますね
RichEditって癖がキツいんでそんなものだと受け止めるしかないのでは?
画像とか入ってるとまた微妙な動きするし
気にくわないなら自分でスクロールバーの位置を強制的に変えるとかですね
>いまどきさん
自分用のツールとか作る時は今でも使ってるよー(UniCode関係なければね)
軽いし早いしコンポーネントが揃ってるから手放せはしないなー
>いまどきさん
5は20年近く前のversionで、いまやXE7ですものね
>けどさん
検証ありがとうございます。
RichEditはそういうものですか。
RichEdit1.Lines[ 0 ] := RichEdit1.Lines[ 0 ] ;
と追加してスクロールバーを第1行に移動させることにします。
他にスマートな方法はあるでしょうか。
単に RichEdit1.Selstart := 0 とすればうまくいきますか?
>あさん
ありがとうございます。
SelStartを設定するだけではスクロールバーの
位置はかわりませんでした。
第1行目に実際に書き込まないと移動しないようです。
[Delphi-ML:4668] カーソルの位置
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=004668
あたりは、参考になりませんか?
>igyさん
ありがとうございます。たいへん参考になりました。
Delphi-MLの記載をもとに次のような解決法がわかりました。
1)あさんのSelStartの場合は
RichEdi1.SelStart := 0 ; のあと
RichEdit1.SetFocus ; を追加する
2)Performを使って
RichEdit1.Perform( EM_LINESCROLL, SB_THUMBTRACK, -RichEdit1.SelStart ) ;
ただD-MLに書かれてあった
RichEdit1.Perform( WM_VSCROLL, SB_THUMBTRACK, 0 ) ;
では第1行は先頭に表示されますがスクロールバーは上端の手前までしか
移動しませんでした。
考えてくださった方々にお礼申し上げます。
追記です。
3) これがもっとも自然な方法かもしれません。
RichEdit1.Perform( EM_SCROLL, SB_THUMBPOSITION, 0 ) ;
ツイート | ![]() |