Embarcadero Software の C++Builder を使用してフォームベースのグラフィックを表示しています。キャンバスはスクロール可能で、マウス ホイールを動かすと、イベント ハンドラーはスクロール バーの移動先を決定する内部計算を行います。次に、スクロール バーの位置を設定します。
このように、大まかに:
if (ScrollBox->HorzScrollBar->IsScrollBarVisible() )
{
OffsetX = MyHorzScroll + 0.5; // round to int
ScrollBox->HorzScrollBar->Position = OffsetX;
}
ここで、ScrollBox は FMX.Layouts.TScrollBox 型です。問題は、断続的に、Position が設定した値に実際に移動しないことです。メモリの上書きの問題であると思われる状況が 2 つあります。まず、MyScale という名前のメンバー変数を設定する行をコメント アウトすると、エラーが消えます。2 番目に、OffsetX の宣言を静的ストレージに変更すると、これもなくなります。ドキュメントは、より深いメモリ要件について実際には何のヒントも与えていません.=関数を使用して Position を任意の int 値に設定するだけで動作するはずです.それを処理するセッター関数でオーバーライドすることになっています)。
Borland/Embarcadero スクロール バーを強制的に動作させる方法を知っている人はいますか?