Microsoft Access 掲示板

縦スクロールバーをマウスでつかむときに表示される レコード:13/44 の値を取得したい / 17

19 コメント
views
4 フォロー
17

どうやらCurrentSectionTopはセクションの高さに応じて補正が入るようです。今回得られた補正量は高さに応じて

セクション高さ実際の高さ補正量
340345+5
454450-4
553555+2
893900+7

これは、一見ばらばらのようですが「15」単位で四捨五入されています
ACCESSは各セクションの高さをTwipで保持していますが、画面の表示はPixel単位でなければなりません。windowsの標準dpiは96なので、Pixel単位(1Pixel=15Twip)で四捨五入されているわけですね

>> 9のずれるパターンもこの計算を当てはめれば

ツールチップの値:9/100
実際に見える先頭レコードの番号:9
curRecNum = Me.CurrentRecord      '値:17
curTop = Me.CurrentSectionTop      '値: 3570
Me.Section("フォームヘッダー").Height  '値:454
Me.Section("詳細").Height        '値: 397

(3570 - Int(454 / 15 + 0.5) * 15) / Int(397 / 15 + 0.5) * 15 = 8
17 - 8 = 9

正しく結果が得られます


以上のことから

Dim TPP As Long 'Twip/Pixel
TPP = 15 'dpiによって変化する

描画ヘッダ高さ = Int(ヘッダ高さ / TPP + 0.5) * TPP
描画詳細高さ = Int(詳細高さ / TPP + 0.5) * TPP

先頭レコード = (描画詳細高さ * 現在レコード - (curTop - 描画ヘッダ高さ)) / 描画詳細高さ

のように、正しく補正を入れれば間違いのない答えが得られます

通報 ...