|
|
||||
Tips > |
|||||
Form でスクロールバーが表示された時の座標値 |
更新 : 2010/05/11 |
||||
|
|
||
解説: スクロールバーが表示された状態で、フォーム上の座標値を取得すると相対座標が返ってきます。スクロールバーに関係なく、座標値を取得(絶対座標)したい場合は、スクロールバーオブジェクトから情報を取得するようにします。 水平あるいは垂直スクロールバーの現在位置は ScrollPos プロパティから取得できます。必要に応じてその値を利用するようにします。 使用例: 今回は、スクロールバーの表示されたフォーム上をクリックして、そのポジションの絶対座標、相対座標を取得する例です。 アプリケーション起動後、スクロールバーを動かしてから、いろいろな場所をクリックして座標値の違いを確認してください。 コンポーネントは、フォームの右下隅に Button をひとつ配置し、中央に Label を4つ下のように並べてください(Label3 の Caption を絶対座標。 Label4 の Caption を相対座標としています)。 絶対座標 Label1 相対座標 Label2 フォームの大きさは、Button1 が隠れる程度(スクロールバーが表示されるはずです)にしてください。 コーディングは、クリック時、絶対座標と相対座標が表示されるように記述しておきます。 フォームの大きさを変えたり、スクロールバーを操作して、座標値の様子を見てください。 //------------------------------------------------------------------- void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { // フォームのスクロール量を取得 int xx = HorzScrollBar->ScrollPos + X; // 水平スクロールバー int yy = VertScrollBar->ScrollPos + Y; // 垂直スクロールバー // 絶対座標 Label1->Caption = IntToStr(xx) + "," + IntToStr(yy); // 相対座標 // Increment の分移動した場所からの座標 Label2->Caption = IntToStr(X) + "," + IntToStr(Y); } //------------------------------------------------------------------- |