Tips

ウィンドウのサイズ

日付2007/09/19
ID07-019
バージョン2004
プラットフォームMac / Win

4D 2004にはウィンドウのサイズに関係したコマンドが追加されています。

利便性だけのためでコマンドが追加された訳ではありません。これらのコマンドは、プッシャーと呼ばれる概念の実装に基づいた必要性から追加されているのです。プッシャーについてはランゲージリファレンスとテクニカルノートで詳しく説明していますので、ここでの説明は省きます。

4D 2003以前では、SET WINDOW RECTを使ってウィンドウのサイズを変更していました。こうしたウィンドウのサイズ変更は、オブジェクトプロパティの設定によって位置や大きさに対して影響を与えました。しかし4D 2004のSET WINDOW RECTは、こうしたオブジェクトの位置や大きさに対して影響を与えなくなりました。ウィンドウのサイズに追従してオブジェクトの位置や大きさを変えたいときには、RESIZE FORM WINDOWを使わなければなりません。しかしSET WINDOW RECTの役目が終えた訳ではないのです。

これらのコマンドを使い分けてプログラムしなければなりませんが、どの状況でどのコマンドを使うべきか悩んだ時には、少々乱暴ではありますが次のように使い分けると良いでしょう。

リサイズの時

マウス操作でリサイズしたように、フォーム上に配置したオブジェクトの位置や大きさが変化することを期待したいときには、RESIZE FORM WINDOWを使います。例えば、次のコードはフォームプロパティに設定された大きさに合わせてウィンドウのサイズを変更します。

  `リサイズの例
  `フォームのプロパティで指定したサイズにリサイズする
C_LONGINT($width;$height;$left;$top;$right;$bottom)
GET FORM PROPERTIES([Table1];"Iutput";$width;$height)
GET WINDOW RECT($left;$top;$right;$bottom)
RESIZE FORM WINDOW($width-$right+$left;$height-$bottom+$top)

移動

移動を行うためには、唯一位置を指定できるSET WINDOW RECTを使います。しかしウィンドウサイズが変化する事はあまり好ましいことではないので、次のようなコードでウィンドウサイズを変えずに位置だけを変更するようにします。

  `移動の例
  `指定した距離を移動する
C_LONGINT($moveX;$moveY;$left;$top;$right;$bottom)
$moveX:=80  `左に80ピクセル
$moveY:=50  `下に40ピクセル
GET WINDOW RECT($left;$top;$right;$bottom)
SET WINDOW RECT($left+$moveX;$top+$moveY;$right+$moveX;$bottom+$moveY)

このコードを基にして、移動量を引数で渡せるように改造したコードをメソッド化しておくと便利かもしれません。

ウィンドウサイズ変更

トグルのようなものをつけて、トグルをクリックした時に新しい情報を見せたり、あるいは隠したりするようにウィンドウサイズを変更したい時には、SET FORM SIZEとSET WINDOW RECTを併せて使います。具体的な方法が、ランゲージリファレンスのSET FORM SIZEに書かれていますので、そちらをご参照ください。

オンラインマニュアル:SET FORM SIZE

関連情報

テクニカルノートに4D 6.8と動作比較したレポートがあります。これまで利用していたストラクチャのアップグレードを考えている方には、有用な情報です。

テクニカルノート:ウインドウリサイズコマンドとプッシャープロパティ