掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TMemoの垂直スクロールバー自動表示 (ID:19448)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
TMemoの(行数)*(一行の高さ) が ClientHeightを超えるか、 Splitterをいどうして、ClientHeightが変わったら、 自動で垂直方向のスクロールバーを必要に応じて 自動で表示するというのを作っています。 一応、下にあるコードで実現できているのですが、 IMEがONの状態で、スクロールバー表示する境目の所で、 始めの一文字しか入力されません。 どのようにすれば、正しく動作するようになるのでしょうか? //------------------------------------- // メモの行数に対して自動でスクロールバー表示 procedure TForm1.Memo1Change(Sender: TObject); begin MemoScrollBarsAutoShow; end; procedure TForm1.Splitter3Moved(Sender: TObject); begin MemoScrollBarsAutoShow; end; procedure TForm1.MemoScrollBarsAutoShow; var xPos: Integer; begin // スクロールバーの設定が変わり、再描画されると // キャレットの位置が始めの位置に戻ってしまうので一時保存して戻す // ★IMEがONで直接日本語を入力するとキャレットの位置が更新、取得できないため?、始めの1文字しか入力されない if ((Canvas.TextHeight('H') * (Memo1.Lines.Count +1)) > Memo1.ClientHeight) and (Memo1.ScrollBars = ssNone) then begin xPos := Memo1.SelStart; Memo1.ScrollBars := ssVertical; Memo1.SelStart := xPos; end else if ((Canvas.TextHeight('H') * (Memo1.Lines.Count +1)) <= Memo1.ClientHeight) and (Memo1.ScrollBars = ssVertical) then begin xPos := Memo1.SelStart; Memo1.ScrollBars := ssNone; Memo1.SelStart := xPos; end; end; //-------------------------------------
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.