ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


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);
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.