掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
RichEditで指定行を中央に表示するには (ID:29155)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
偶数行や中途半端に表示される領域も考慮して、中央に表示します procedure TForm3.Button1Click(Sender: TObject); begin //テキストのサイズを取得 Bitmap := TBitmap.Create; Bitmap.Canvas.Font.Assign(RichEdit1.Font); TextHeight := Bitmap.Canvas.TextHeight('□')+4; Bitmap.Free; //画面のサイズを取得 SendMessage(RichEdit1.Handle,EM_GETRECT,0,DWORD(@R)); //表示される行数を取得 LineCount := (R.Bottom - R.Top) div TextHeight; //中央に移動 TopLine := SendMessage(RichEdit1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0); SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, ((11 - LineCount div 2) - TopLine)-1); TopLine := SendMessage(RichEdit1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0); SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, ((11 - LineCount div 2) - TopLine)-1); //ScrollBarの位置を取得 SI.cbSize := SizeOf(TScrollinfo); SI.fMask := SIF_POS; GetScrollInfo(RichEdit1.Handle,SB_VERT,SI); P := SI.nPos; E1 := abs((LineCount mod 2)-1) * TextHeight; //偶数の場合の対処 E2 := (R.Bottom - R.Top) mod TextHeight; //表示しれきれない領域の対処 SendMessage(RichEdit1.Handle, WM_VSCROLL,MakeWParam(SB_THUMBPOSITION,P+(E1 div 2)-(E2 div 2)),0); SendMessage(RichEdit1.Handle, WM_VSCROLL,SB_ENDSCROLL,0); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.