フォームに DBGrid があります。DBGrid には多くの列があるため、水平スクローラーが表示されます。DBGrid ビューを右にスクロールして、さらに列を表示します。行を選択すると、DBGrid ビューが自動的にリセットされ、最初の列が表示されます (一番左の位置にスクロールして戻るように)。
それを防ぐ方法はありますか?
グリッド オプションにgoRowSelectがあると仮定します。これにより、選択された列が最初の固定されていない列になるため、コードが変更されて選択されたセルが表示されるようにスクロールすると、最初の固定されていない列が強制的に表示されます。
goRowSelectはキーボードによる水平スクロールも効果的に無効にするので、私はそれなしで生きようとします。グリッド セルのカスタム描画を使用して、実際には 1 つのセルしか選択されていない場合でも、現在の行のすべてのセルを適切な色で表示できます。標準のツリー コントロールと同様に、グリッドがフォーカスされているかどうかに応じて異なる色を表示するためにもこれを使用します。ただし、これが適切に機能するためには、グリッド セル ナビゲーション イベントだけでなく、グリッドのOnEnterとOnExit、アプリケーションのOnActivateとOnDeactivateなどの他のイベントも処理する必要があります。
スクロールバーの位置を尋ねることができるかもしれません
GetScrollInfo(Self.Handle, SB_VERT, SIOld);
を使用SetScrollInfo( )
して元に戻します。おそらくもっと良い方法があります。SelectedField
別の方法です(必要に応じて取得/設定します)。