問題
さて、ユーザーが TStringGrid コンポーネントで特定のセル (複数選択ではなく単一選択) を選択したときに呼び出されるダイアログ フォームを設計しました。
このダイアログ フォームは、選択されたセルの 1 つの中心に配置されます。
しかし、それは起こりません:(
考えられる解決策 = 私がしたいこと
で取得したものではなく、セルの画面位置、つまり絶対画面座標を取得したいと思いますCellRect()
。
私がしていること
セルの中心を計算するには、現在、次のコンポーネントの座標をそのように合計する必要があります。
TRect pos;
pos = table->CellRect(Col,Row);
pos.Left += form->Left + panel->Left + frame->Left + table->Left;
pos.Right += pos->Left;
pos.Top += form->Top + panel->Top + frame->Top + table->Top;
pos.Bottom += pos->Top;
次に、ダイアログを中央に配置します。
dialog->Left = (pos->Left + pos->Right)/2 - dialog->Width/2;
dialog->Top = (pos->Top + pos->Bottom)/2 - dialog->Height/2;
なんらかの理由で、Col と Row はダイアログの正しい位置にオフセットを追加するため、Col と Row の値を大きくすると、ダイアログの位置が正しい位置 (選択されたセルの中心) からかなり離れた位置に設定されます。
___screen________________________________________
| |
| ___form___________________________________ |
| | | |
| | | |
| | ___panel____________________________ | |
| | | | | |
| | | ___frame_______________ | | |
| | | | | | | |
| | | | | | | |
| | | | ___table_________ | | | |
| | | | | | | | | |
| | | | | _cell_ | | | | |
| | | | | |______| | | | | |
| | | | | | | | | |
| | | | |_________________| | | | |
| | | |_______________________| | | |
| | |____________________________________| | |
| | | |
| | | |
| |__________________________________________| |
|_________________________________________________|
そして、テーブルまたは選択したセルの画面位置がある場合
上記の合計のコンポーネント座標が少なくなるため、これらのオフセットエラーの実装と検出が非常に簡単になります...