どうやらCurrentSectionTop
はセクションの高さに応じて補正が入るようです。今回得られた補正量は高さに応じて
セクション高さ | 実際の高さ | 補正量 |
---|---|---|
340 | 345 | +5 |
454 | 450 | -4 |
553 | 555 | +2 |
893 | 900 | +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 - 描画ヘッダ高さ)) / 描画詳細高さ
のように、正しく補正を入れれば間違いのない答えが得られます
通報 ...