Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Phi::Form

Phi::Form

標準アプリケーションウィンドウ ( フォーム )

フォームは,アプリケーションのメインウィンドウ,ダイアログボックス,あるいは MDI 子ウィンドウを表すことができる。フォームには, Phi::ButtonPhi::CheckBoxPhi::ComboBox オブジェクトなど,他のオブジェクトを入れることができる。フォームの例としては, Phi::LoginDialogPhi::PasswordDialog オブジェクトなどがある。

class methods

new([name, caption]) : Phi::Form

methods

close : nil

フォームを閉じる。

close はフォームを閉じることができるかどうか判断するため,最初に Phi::Form#on_close_query を呼び出す。

Phi::Form#on_close_query が false ならば,クローズ処理はそこで終わる。

Phi::Form#on_close_query が true ならば, Phi::Form#on_close が呼ばれる。

注意
Delphi では,アプリケーションのメインフォームが閉じると,アプリケーションは終了した。 Apollo にはメインフォームの概念はなく,すべてのフォームが隠されるとアプリケーションは終了する。

show : nil

フォームを表示する。

show は Phi::Form#visible を true に設定し,フォームを画面の最前面に表示する。

hide : nil

フォームを非表示にする。

hide は Phi::Form#visible を false に設定する。

show_modal : Fixnum

フォームをモード付きダイアログとして表示する。フォームがモード付きで表示された場合,フォームを閉じなければアプリケーションの実行を続けることはできない。モード付きフォームを閉じるには, Phi::Form#modal_result を 0 以外の値に設定する。 show_modal はフォームが閉じるときに Phi::Form#modal_result に設定された値を返す。

properties

action : Phi::BasicAction

コントロールに関連付けられているアクション

action は,コントロールに関連付けられているアクションオブジェクトである。アクションは,ユーザーコマンドへの応答をアプリケーションが集中管理できるようにする。コントロールがアクションに関連付けられると,アクションによりコントロールの対応するプロパティおよびイベントが決まる ( コントロールが有効かどうか,コントロールがどのように Phi::Form#on_click に応答するか,など ) 。

active : Boolean

フォームにフォーカスがあるかどうか

アクティブなフォームはすべてのキーボード入力を受け取る。フォームがタイトルバーを持つ場合,タイトルバーはコントロールパネルで指定したアクティブカラーで描画される。

active_control : Phi::Control

active_control=( control )

focus_control : Phi::Control

focus_control=( control )

フォーム上でフォーカスがあるコントロールを返す/セットする。

アプリケーション内で一度にフォーカスを持つことができるのは 1 つのコントロールだけである。フォームにフォーカスがない場合は,フォームがフォーカスを受け取ったときにフォーカスを受け取ることになるフォーム上のコントロールを示す。

active_control= はフォームが非表示の場合( Phi::Form#show Phi::Form#show_modal の前)でも使用可能である。その場合には、 Phi::Form#show Phi::Form#show_modal の時点でフォーカスを受け取るべきコントロールを指定することになる。

注意(1)
フォーカスが別のコントロールに移ると, Phi::Form#on_exit が発生する前に active_control の値が更新される。
注意(2)
Delphi では次の名前にわかれていた。

Apollo では focus_control を属性形式(「xx=()形式」)に変更し、両者を統合した。

property ActiveControl: TWinControl;
procedure FocusControl(Control: TWinControl);

Control#set_focus? も参照のこと。

border_icons : Fixnum

フォームのタイトルバーに表示するアイコン

BI_SYSTEMMENU
コントロールメニュー ( システムメニューともいう ) をフォームに表示する
BI_MINIMIZE
アイコン化ボタンをフォームに表示する
BI_MAXIMIZE
最大表示ボタンをフォームに表示する
BI_HELP
Phi::Form#border_style が BS_DIALOG の場合,または BI_MINIMIZE と BI_MAXIMIZE が除外された場合,フォームのタイトルバーには疑問符が表示され,クリックするとカーソルが CR_HELP に変更される。そうでない場合は非表示になる
注意
border_icons と Phi::Form#border_style と組み合わせの一部は互いに排他的だ。たとえば, border_icons で BI_MAX , BI_MIN を指定し, Phi::Form#border_style で BS_DIALOG を指定することはできない。

border_style : Fixnum (BorderStyle?)

フォーム境界の体裁と動作

BS_DIALOG
サイズ変更不可。標準のダイアログボックス境界
BS_SINGLE
サイズ変更不可。一重境界線
BS_NONE
サイズ変更不可。可視境界線なし
BS_SIZEABLE
標準のサイズ変更可能境界
BS_TOOL_WINDOW
BS_SINGLE と同じだがキャプションが小さい
BS_SIZE_TOOL_WIN
BS_SIZEABLE と同じだがキャプションが小さい
注意
MDI 子フォームの境界スタイルを BS_DIALOG または BS_NONE に変更しても無効だ。

client_rect : Phi::Rect

フォームのクライアント領域

クライアント領域とは,フォームの境界・メニュー・ステータスバー・タイトルバー・スクロールバーを除いた領域のことである。

client_rect は

rect(0, 0, client_width, client_height)

と同等。

client_width : Fixnum

フォーム上のクライアント領域の幅

ウィンドウ全体の大きさに基づいてフォームウィンドウの幅を変更するには, Phi::Form#width を使用する。

client_height : Fixnum

フォーム上のクライアント領域の高さ

ウィンドウ全体の大きさに基づいてフォームウィンドウの高さを変更するには, Phi::Form#height を使用する。

canvas : Phi::Canvas

フォームの描画領域

canvas を使うと,フォームのクライアント領域を描画できる。 canvas は Phi::Form#on_paint で使うのが一般的だ。

drop_target : Boolean

フォームがドラッグアンドドロップ操作のターゲットであるかどうか

floating : Boolean

フォームが別のウィンドウにドッキングされるかどうか

form_state : Fixnum

フォームの状態遷移の情報

FS_CREATING
現在,フォームのコンストラクタが実行されている。
FS_VISIBLE
フォームのウィンドウが可視状態である。この状態は, Phi::Form#visible を更新するために使われる
FS_SHOWING
フォームの Phi::Form#window_state の変更が進行中である。この状態は, Phi::Form#window_state の変更が自分自身のを妨げないようにするために定義されている
FS_MODAL
フォームはモード付きウィンドウとして作成された
FS_CREATED_MDICHILD
フォームは MDI 親ウィンドウである。この状態は, MDI クライアントウィンドウが作成された場合にのみ設定される
FS_ACTIVATED
フォームは ( フォーカスを受け取った,あるいは,アプリケーションがアクティブになったために ) CM_ACTIVATE メッセージを受け取ったが,まだ Phi::Form#activate を呼び出していない ( そして,まだ Phi::Form#on_active を呼んでいない ) 。

form_style : Fixnum

フォームのスタイル

FS_NORMAL
フォームは MDI 親ウィンドウでも MDI 子ウィンドウでもない
FS_MDICHILD
フォームは MDI 子ウィンドウである
FS_MDIFORM
フォームは MDI 親ウィンドウである
FS_STAY_ON_TOP
このフォームは,デスクトップの一番上,およびプロジェクトの他のフォーム ( form_style が FS_STAY_ON_TOP に設定されているフォームを除いた他のフォーム ) の上にくる。 FS_STAY_ON_TOP のフォームが他のフォームを起動する場合は,どちらか一方のフォームが一番上にくる

フォームが MDI アプリケーションのメインフォームの場合, form_style は FS_MDIFORM に設定しなければならない。

注意
実行時に form_style の値をなるべく変更しないようにすること。 ( そんなこと言われたって .. )

help_file : String

アプリケーションがヘルプを表示するのに使うファイルの名前

help_file は, Windows ヘルプシステムで使うヘルプファイルを持つフォームで使う。 Windows は help_file で指定したファイルからヘルプトピックを選択する。

注意
このプロパティを指定するとフォームに固有のヘルプファイルを定義することができる。アプリケーション全体のヘルプファイルは Phi::Application#help_file で指定する。 Phi::Application#help_file を指定すると,アプリケーション終了時にヘルプウィンドウの後片付けが行われる。

icon : Phi::Icon

フォームを最小化したときに表示されるアイコン

icon プロパティを設定すると,フォーム用のアイコンを提供できます。 Icon プロパティが設定されていない場合, Windows は,フォームが最小化されたときにデフォルトのアイコンを提供します。

key_preview : Boolean

フォームがアクティブコントロールより前にキーボードイベントを受け取るかどうか

key_preview が true の場合,キーボードイベントはアクティブコントロール ( Phi::Form#active_control で指定 ) で発生する前にフォームで発生する。

key_preview が false の場合,キーボードイベントはアクティブコントロールでのみ発生する。 ( デフォルト )

Tab , BackTab? ,矢印キーなどの移動キーはキーボードイベントを発生させないので key_preview は無効だ。

menu : Phi::MainMenu?

フォームのメインメニュー

設計時に, menu は,最初にフォームに追加された Phi::MainMenu? コンポーネントに設定される。

modal_result : Fixnum

モード付きダイアログとして使われているフォームの値

modal_result を使うと,モード付きで表示されているフォームを閉じることができます。

modal_result のデフォルト値は MR_NONE である。 modal_result を 0 以外の値に設定すると,モード付きフォームを閉じることができる。 modal_result に割り当てた値はモード付きフォームを表示するのに使った Phi::Form#show_modal 関数呼び出しの戻り値になります。

注意
このプロパティは Phi::Button オブジェクトなど,一部のコンポーネントによって自動的に変更されます。詳細は, Phi::Button#modal_result を参照のこと。

old_create_order

Phi::Form#on_create および Phi::Form#on_destroy がいつ発生するか

old_create_order が false ( デフォルト ) ならば, Phi::Form#on_create は,すべてのコンストラクタが終了した後で ( Phi::Form#after_construction の中から ) 発生し, Phi::Form#on_destroy イベントはすべてのデストラクタが呼び出される前に ( Phi::Form#before_destruction の中から ) 発生する。

このタイミングは, Delphi のバージョン 3 以前の場合と異なる。バージョン 3 以前では, Phi::Form#on_createCustomForm コンストラクタが実行されたときに発生し, Phi::Form#on_destroyCustomForm デストラクタが実行されたときに発生した。フォームのコンストラクタおよびデストラクタから Phi::Form#on_create および Phi::Form#on_destroy が発生する必要があるアプリケーションは, old_create_order を true に設定する。

parent : Phi::Control

フォームを含むウィンドウコントロール

parent は,別のフォームにコントロールを埋め込むときに使われる。 parent を変更すると,新しいコンテナにフォームを移動できる。

デスクトップに直接表示されるフォームの parent は Phi::Screen である。

pixels_per_inch : Fixnum

フォーム設計時に使われたシステムのシステムフォントの比率

pixels_per_inch は,現在の画面解像度に対するフォームのスケーリングを変更できる。 pixels_per_inch のデフォルト値を変更すると,画面解像度によって比率が変わってしまう。 Phi::Form#scaled を true に設定しないと pixels_per_inch 値を変更しても効果はない。

position : Fixnum

フォームのサイズと配置

PO_DESIGNED
フォームは設計時と同じ画面上の位置,高さ,幅で表示される
PO_DEFAULT
フォームは Windows が決める画面上の位置,高さ,幅で表示される。フォームはアプリケーションを複数起動するたびに少しずつ右下へ移動する。画面の解像度に関係なくフォームの右側は常に画面の右端に近く,フォームの下端は常に画面の下端に近くなる
PO_DEFAULT_POS_ONLY
フォームは設計時にフォームを作成したサイズで表示されるが,画面上の位置は Windows が選択する。フォームはアプリケーションを複数起動するたびに少しずつ右下へ移動する。同じサイズのまま全体が画面上に表示されるようにフォームをそれ以上右下へ移動できなくなると,画面の左上隅にフォームが表示される
PO_DEFAULT_SIZE_ONLY
フォームは設計時の位置に表示されるが,サイズは Windows が選択する。画面の解像度に関係なくフォームの右側は常に画面の右端に近く,フォームの下端は常に画面の下端に近くなる
PO_SCREEN_CENTER
フォームは設計時のサイズで表示されるが,画面の中央に配置される。マルチモニターアプリケーションの場合, Phi::Form#default_monitor で指定されたモニターの中央に表示される
PO_DESKTOP_CENTER
フォームは設計時のサイズのままで,画面の中央に配置される。マルチモニターアプリケーションの場合,調整は行われない
PO_MAIN_FORM_CENTER
Apollo では使えません。 PO_SCREEN_CENTER と同じ扱いになります。Apollo では Main Form は(GC とのからみで) 常に nil なので,そのようになります。

Delphi では次のようなものでした:フォームは設計時のサイズのままで,アプリケーションのメインフォームの中央に配置される。マルチモニターアプリケーションの場合,調整は行われない。この位置は,二次フォームでのみ使用する必要がある。メインフォームで設定した場合には, PO_SCREEN_CENTER と同じ処理が行われる

PO_OWNER_FORM_CENTER
Apollo では使えません。 PO_SCREEN_CENTER と同じ扱いになります。Apollo では owner は(GC とのからみで) 常に nil なので,そのようになります。

Delphi では次のようなものでした:フォームは設計時のサイズのままで, owner プロパティで指定したフォームの中央に配置される。 owner プロパティがフォームを指定していない場合には, PO_MAIN_FORM_CENTER と同じ処理が行われる

print_scale : Fixnum

フォームの印刷時の比率

PO_NONE
画面に表示されたフォームをプリンタの解像度で印刷する
PO_PROPORTIONAL
フォームは画面上のサイズと同じサイズになるように印刷される (WYSIWYG) 。フォームイメージは,印刷されるイメージが画面上に見えるサイズと同じになるように拡大/縮小される
PO_PRINT_TO_FIT
フォームは同じ画面比率を使うが,印刷ページにちょうど収まるサイズで印刷される

scaled : Boolean

フォームサイズを Pixels_Per_Inch? の値に基づいて変更するかどうか

scaled が %true% で %pixels_per_inch% の値が現在のシステム設定と異なる場合,フォームは新しいサイズにスケール変更される。

scaled が %false% の場合は,スケール変更はされない。

visible : Boolean

フォームを画面上に表示するかどうか

visible が true ならば,フォームが表示される。ただし,他のフォームに隠れていると,隠れた部分は隠れたままだ。

visible が false ならば,フォームは表示されない。

Phi::Form#show および Phi::Form#show_modal は visible を true に設定して,開いているすべてのウィンドウの前面にフォームを表示する。

window_state : Fixnum

画面へのフォームの表示のしかた

WS_NORMAL
通常の状態で表示する
WS_MINIMIZED
最小化して表示する
WS_MAXIMIZED
最大化して表示する

scroll 関連

auto_scroll : Boolean

スクロールウィンドウコントロールが小さくてすべてのコントロールを表示できないときに,スクロールバーを自動的に表示するかどうか

horz_scroll_bar : Luqman

スクロールウィンドウコントロール用の水平スクロールバー

vert_scroll_bar : Luqman

スクロールウィンドウコントロール用の垂直スクロールバー

MDI 関連

active_mdichild : Form

フォーカスがある MDI 子フォーム

フォームが MDI 親フォームでない,つまり,フォームの Phi::Form#form_style が FS_MDIFORM でない場合, Phi::Form#active_mdichild は nil を返す。

client_handle : Fixnum

フォームの MDI の内部クライアントウィンドウのハンドル

client_handle が有効なのは Phi::Form#form_style が FS_MDIFORM に設定されている MDI 親フォームだけだ。

注意
フォームウィンドウ自身へのハンドルを取得するには, Phi::Form#handle を使う。

mdichild_count

開いている MDI 子フォームの数

mdichild_count が有効なのは Phi::Form#form_style が FS_MDIFORM に設定されている MDI 親フォームだけだ。

mdichildren(i): Form

すべての MDI 子フォームへのインデックス付きアクセスを提供する。

i にはアクセスする子フォームのインデックスを指定する。

MDI 子フォームの順序は,別の MDI フォームがアクティブになると変わる。初期状態では,フォームは作成した順序でリストされ,新しいフォームは配列の最後に追加される。しかし, MDI 子フォームはアクティブになると,常にリストの先頭に移動する。そのため, i を使うと,配列内のすべてのフォームをインデックス化できるが,特定のフォームを参照することはできない。

mdichildren が有効なのは Phi::Form#form_style が FS_MDIFORM に設定されている MDI フレームだけだ。

window_menu : MenuItem

MDI 親フォームの[ウィンドウ]メニュー

[ウィンドウ]メニューは MDI アプリケーションでの標準メニューである。[ウィンドウ]メニューには,[重ねて表示],[アイコンの整列],[並べて表示]など,ユーザーがアプリケーションのウィンドウを管理できるようにするコマンドがある。

また,[ウィンドウ]メニューの下部にはアプリケーションで現在開いている子ウィンドウが示される。ユーザーがメニューからウィンドウの 1 つを選択すると,選択したウィンドウがアプリケーションでのアクティブウィンドウになる。

このメニューは一般に[ウィンドウ]メニューと呼ばれますが,どのような名前にもできる。ただし,その名前はメニューバーに表示される既存のメニュー項目のどれかでなくてはならない。開いている子フォームの名前は,実行時に自動的にそのメニューに入る。

window_menu が有効なのは Phi::Form#form_style が FS_MDIFORM に設定されている MDI 親フォームだけだ。

tile_mode : Fixnum

Phi::Form#tile が呼び出されたときに MDI 子フォームがどのように配列されるか

TB_HORIZONTAL
各フォームは親フォームの幅の方向に広がる
TB_VERTICAL
各フォームは親フォームの高さの方向に広がる

Phi::Form#tile_mode が有効なのは Phi::Form#form_style が FS_MDICHILD に設定されている MDI 子フォームだけだ。

OLE 関連

object_menu_item : Phi::MenuItem

OLE オブジェクトの選択に応答する OLE オブジェクトメニュー項目

object_menu_item を使うと,フォーム上の OLE オブジェクトを選択または選択解除したときにそれぞれ有効または無効になるメニュー項目を取得または設定できる。

OLE オブジェクトメニュー項目は, Phi::Form#activatePhi::Form#convert などの標準 OLE コマンドのかわりとして使用できる。それらのコマンドは OLE サーバーによって実現される。

active_ole_control : Phi::Control

フォーム上のフォーカスの変更に応答する OLE コントロール

active_ole_control が nil でない場合,指定した OLE コントロールのユーザーインターフェースは,フォーカスがないときは非アクティブ化される。また,フォームがフォーカスを受け取ったり失ったりすると,指定した OLE コントロールのドキュメントウィンドウがそれぞれアクティブ化,非アクティブ化される。

BiDi 関連

parent_bi_di_mode : Boolean

コントロールが親の bi_di_mode を使用するかどうか

parent が nil で parent_bi_di_mode が true の場合,フォームの bi_di_mode は, Application.bi_di_mode と同じ値に設定される。 parent が nil でなく, parent_bi_di_mode が true の場合,フォームの bi_di_mode は親の bi_di_mode と同じ値に設定される。

注意
日本語 Windows95/98/NT4 では指定しても意味を持たない。

Monitor 関連

monitor : Phi::Monitor

フォームが表示されるモニター

default_monitor : Fixnum

フォームが表示されるモニター

DM_DESKTOP
特定のモニターにフォームを位置付ける試みは行われない
DM_PRIMARY
フォームは, Spado にリストされている最初のモニターに位置付けられる
DM_MAIN_FORM
フォームはアプリケーションのメインフォームと同じモニターに表示される
DM_ACTIVE_FORM
フォームは現在アクティブなフォームと同じモニターに表示される
注意
DEFAULT_MONITOR は,アプリケーションにメインフォームがない場合は無効だ。

event handler

on_activate

on_close

on_close イベントは,フォームを閉じたときに発生します。

on_close イベントの前に on_close_query イベントが発生します。閉じてよいかどうかの判断は on_close_query で行います。

on_close イベントハンドラを記述すると,フォームを閉じたときに特別な処理が実行されるようにすることができます。on_close イベントはフォームを閉じようとしたときに呼び出されるイベントハンドラを指定します。たとえば,データ入力フォームを閉じる前にフォーム内のすべての項目に有効な内容が入っているかどうかをテストするハンドラを on_close で指定できます。

フォームは Phi::Form#close メソッドによって,またはユーザーがフォームのシステムメニューで[閉じる]を選択したときに閉じます。

action
Fixnum: action の値はフォームを実際に閉じるどうかを決めます。
CA_NONE
フォームを閉じることができないので何も起きない
CA_HIDE
フォームは閉じないで単に隠される。アプリケーションは隠れたフォームに引き続きアクセスできる
CA_FREE
Apollo では CA_HIDE と同じ扱いになります。

フォームは閉じ,そのフォームに割り当てたすべてのメモリが解放される

CA_MINIMIZE
フォームは閉じないでアイコン化される。MDI 子フォームの場合はこれがデフォルトである

フォームが MDI 子フォームで,BorderIcons プロパティが biMinimize ならば,Action のデフォルト値は caMinimize です。MDI 子フォームにこの設定がない場合は,Action のデフォルト値は,ユーザーがフォームを閉じようとする前に何も起きないことを示す caNone です。

フォームが SDI 子フォームならば,Action のデフォルト値は caHide です。

on_close_query

on_close_query イベントは, Phi::Form#close メソッドが呼び出されたとき,またはユーザーがフォームのシステムメニューで[閉じる]を選択したときに発生します。

on_close_query イベントハンドラを記述すると,どのような状態のときにフォームを閉じることができるかを指定できます。 on_close_query イベントハンドラはフォームのクローズが可能かどうかを決める論理型の戻り値を返さなければなりません。 false を返すとクローズ処理を中止します。true を返せばクローズ処理が継続し、次に on_close イベントが発生します。

on_close_query では閉じるか閉じないかの決定だけを行い、実際に閉じるときに必要な処理が必要な場合は on_close で記述します。

	require "phi" ; include Phi
require "dialogs"
form = Form.new :form, "on_close_query .. click [x]"
form.on_close_query = proc{
  ans = message_dlg('Close the form?',
    MT_CONFIRMATION,[MB_OK,MB_CANCEL])
  if ans == MR_CANCEL
    p "remain"
    ret = false
  else
    p "the end"
    ret = true
  end
  ret
}
form.on_close = proc{
  p "closing.."
}
form.show ; mainloop

on_create

on_deactivate

on_destroy

on_help

on_hide

on_paint

on_short_cut

on_show

methods_for_wiki

require "methods_for_wiki"
puts Phi::Form.methods_for_wiki

_dump => Phi::Component#_dump

action => Phi::Control#action

action= => Phi::Control#action=

action_change => Phi::WinControl#action_change

active

active_control

active_control=

active_mdi_child

adjust_client_rect => Phi::WinControl#adjust_client_rect

adjust_size => Phi::WinControl#adjust_size

adjusted_client_rect => Phi::WinControl#adjusted_client_rect

align => Phi::Control#align

align= => Phi::Control#align=

align_controls => Phi::WinControl#align_controls

align_disabled => Phi::WinControl#align_disabled

align_disabled? => Phi::WinControl#align_disabled?

alpha_blend

alpha_blend=

alpha_blend?

alpha_blend_value

alpha_blend_value=

anchors

anchors=

assign

assign_to => Phi::WinControl#assign_to

auto_scroll

auto_scroll=

auto_scroll?

auto_size

auto_size=

auto_size?

begin_drag => Phi::Control#begin_drag

bevel_width => Phi::WinControl#bevel_width

bevel_width= => Phi::WinControl#bevel_width=

bi_di_mode

bi_di_mode=

border_icons

border_icons=

border_style

border_style=

border_width => Phi::WinControl#border_width

border_width= => Phi::WinControl#border_width=

bottom => Phi::Control#bottom

bottom= => Phi::Control#bottom=

bring_to_front => Phi::Control#bring_to_front

bring_to_front_ex

can_auto_size => Phi::WinControl#can_auto_size

can_focus => Phi::WinControl#can_focus

can_resize => Phi::WinControl#can_resize

canvas

caption

caption=

change_scale => Phi::WinControl#change_scale

client_height

client_height=

client_origin => Phi::WinControl#client_origin

client_rect => Phi::WinControl#client_rect

client_to_screen => Phi::Control#client_to_screen

client_width

client_width=

close

color

color=

component_count => Phi::Component#component_count

components => Phi::Component#components

constrained_resize => Phi::WinControl#constrained_resize

constraints

constraints=

contains_control => Phi::WinControl#contains_control

control_at => Phi::WinControl#control_at

control_at_pos => Phi::WinControl#control_at_pos

control_attr_flatten => Phi::ControlContainer#control_attr_flatten

control_count => Phi::WinControl#control_count

control_extents => Phi::WinControl#control_extents

control_state => Phi::Control#control_state

control_state= => Phi::Control#control_state=

control_style => Phi::Control#control_style

control_style= => Phi::Control#control_style=

controls => Phi::WinControl#controls

controls_aligned => Phi::WinControl#controls_aligned

copy_data

Windows api の SendMessage? の WM_COPYDATA によるプロセス間通信(別のアプリとの交信)を行うメソッドです。

使い方は簡単で、find_window などで受信側のハンドルを取得した後に、そのハンドルに対して、データを送るだけです。

def find_window( class_name,caption )
  Win32API.new('user32', 'FindWindow', "PP", "N").Call(class_name, caption.dup)
end
receiver_handle = find_window( nil , receiver_caption )
form.copy_data(receiver_handle, "送信データ")

受信側には on_copy_data イベントハンドラをセットしておきます。これだけで OK。

form.on_copy_data = proc do |sender, handle, data|
  p ["sender's handle = #{handle}","data = #{data}"]
end

copy_data.rb のサンプルを参照してください。

create_handle => Phi::WinControl#create_handle

create_wnd => Phi::WinControl#create_wnd

ctl3d => Phi::WinControl#ctl3d

ctl3d= => Phi::WinControl#ctl3d=

ctl3d? => Phi::WinControl#ctl3d?

cursor => Phi::Control#cursor

cursor= => Phi::Control#cursor=

custom_align_insert_before => Phi::WinControl#custom_align_insert_before

def_wnd_proc= => Phi::WinControl#def_wnd_proc=

default_monitor

default_monitor=

define_properties => Phi::WinControl#define_properties

destroy_handle => Phi::WinControl#destroy_handle

destroy_window_handle => Phi::WinControl#destroy_window_handle

destroy_wnd => Phi::WinControl#destroy_wnd

device_context => Phi::WinControl#device_context

disable_align => Phi::WinControl#disable_align

dock_client_count => Phi::WinControl#dock_client_count

dock_drop => Phi::WinControl#dock_drop

dock_site => Phi::WinControl#dock_site

dock_site= => Phi::WinControl#dock_site=

dock_site? => Phi::WinControl#dock_site?

double_buffered => Phi::WinControl#double_buffered

double_buffered= => Phi::WinControl#double_buffered=

drag_kind

drag_kind=

drag_mode

drag_mode=

drop_target

drop_target?

enable_align => Phi::WinControl#enable_align

enabled

enabled=

enabled?

form.enabled=falseにすると、そのフォームをクリックしてもフォーカスを取得できなくなります。長い処理の間、フォームが反応して下手なキーを押されると困る場合などにfalseにします。処理が終わったら、必ず(ensure句で) form.enabled=true に戻しましょう。

* 有害な操作を禁止するためには、フォーム全体を無効にするのではなく、有害なボタンなどだけを無効にする方法もあります。Button#enabled

event_handle

extend => Phi::Persistent#extend

find_child_control => Phi::WinControl#find_child_control

find_next_control => Phi::WinControl#find_next_control

fixup_tab_list => Phi::WinControl#fixup_tab_list

flip_children => Phi::WinControl#flip_children

focus_control

focus_control=

focused => Phi::WinControl#focused

focused? => Phi::WinControl#focused?

font

font=

form_image

form_style

form_style=

get_bitmap

handle => Phi::Control#handle

handle_allocated => Phi::WinControl#handle_allocated

handle_needed => Phi::WinControl#handle_needed

height => Phi::Control#height

height= => Phi::Control#height=

help_context => Phi::Control#help_context

help_context= => Phi::Control#help_context=

help_file

help_file=

help_keyword => Phi::Control#help_keyword

help_keyword= => Phi::Control#help_keyword=

help_type => Phi::Control#help_type

help_type= => Phi::Control#help_type=

hide => Phi::Control#hide

hint => Phi::Control#hint

hint= => Phi::Control#hint=

horz_scroll_bar

horz_scroll_bar=

icon

icon=

ime_mode => Phi::WinControl#ime_mode

ime_mode= => Phi::WinControl#ime_mode=

ime_name => Phi::WinControl#ime_name

ime_name= => Phi::WinControl#ime_name=

insert_control => Phi::WinControl#insert_control

invalidate => Phi::Control#invalidate

key_press => Phi::WinControl#key_press

key_preview

key_preview=

key_preview?

left => Phi::Control#left

left= => Phi::Control#left=

make_fully_visible

menu

menu=

menu_attr_flatten => Phi::MenuContainer#menu_attr_flatten

メニュー項目をFormの属性として定義しなおします。

たとえば、次のようにメニューを作成すると、

   Phi.new_menu self, :menu, [
     Phi.new_item_ex('&Edit'        , '' , :mi_edit , [
       Phi.new_item_ex('Mark Setting' , '' , :mi_put_row_mark  , []),
       Phi.new_item_ex('Goto Mark'    , '' , :mi_goto_row_mark , []),
     ]),
   ]

mi_put_row_mark や mi_goto_row_mark にアクセスするためには、次のようにオブジェクトの所有関係をたどっていかなければアクセスできません。

   mi_put_row_mark  = self.menu.items.mi_edit.mi_put_row_mark
   mi_goto_row_mark = self.menu.items.mi_edit.mi_goto_row_mark

ここで、menu_attr_flatten を実行すると、それらを Form の属性として使えるようになります。

   self.menu_attr_flatten
   mi_put_row_mark  = self.mi_put_row_mark
   mi_goto_row_mark = self.mi_goto_row_mark

modal_result

modal_result=

name => Phi::Control#name

name= => Phi::Control#name=

object_menu_item

object_menu_item=

old_create_order

old_create_order=

old_create_order?

on_activate

on_activate=

フォームがアクティブになったときに呼ばれる。

別のフォームにフォーカスがあるときに、当該フォームをクリックしたとき/Ctrl+TAB でフォーカスが移ったとき/アイコン化されていたときにアイコンをクリックしたときなどに呼ばれる。同一アプリの別のフォームにフォーカスがあった場合にも、別のアプリにフォーカスがあった場合にも呼ばれる。

フォームを最初にshowしたときにも、on_showの後で呼ばれる。

* アクティブでなくなったときのイベントは、on_deactive。

* コントロールの on_enter に近い感覚のイベント。

次のスクリプトを実行すると、各イベントがどのような順番で呼ばれるかを試すことができる。

#! ruby -Ks
form1 = Phi::Form.new
form2 = Phi::Form.new
form2.top = form1.bottom

form1.on_activate    = proc{|*args|p [:form1_on_activate,args]}
form1.on_deactivate  = proc{|*args|p [:form1_on_deactivate,args]}
form1.on_show        = proc{|*args|p [:form1_on_show,args]}
form1.on_hide        = proc{|*args|p [:form1_on_hide,args]}
form1.on_close_query = proc{|*args|p [:form1_on_close_query,args]}
form1.on_close       = proc{|*args|p [:form1_on_close,args]}

form2.on_activate    = proc{|*args|p [:form2_on_activate,args]}
form2.on_deactivate  = proc{|*args|p [:form2_on_deactivate,args]}
form2.on_show        = proc{|*args|p [:form2_on_show,args]}
form2.on_hide        = proc{|*args|p [:form2_on_hide,args]}
form2.on_close_query = proc{|*args|p [:form2_on_close_query,args]}
form2.on_close       = proc{|*args|p [:form2_on_close,args]}

form1.show
form2.show
Phi.mainloop

on_can_resize

on_can_resize=

on_click

on_click=

on_close

on_close=

フォームを閉じる前に呼ばれます。この時点では閉じないことはできません。閉じないようにするためには、この前に呼ばれる on_close_query で閉じないように指定することができます。

* Windowsのシャットダウン(Win-U-U)などで呼ばれるかどうかを点検する必要がある。

* Delphiのヘルプでは:アプリケーションがシャットダウンされると,メインフォームは OnClose? イベントを受信しますが,子フォームは OnClose? イベントを受信しません。

* CloseAction の扱いは?

on_close_query

on_close_query=

フォームを閉じる前に呼ばれます。閉じないようにすることもできます。

on_constrained_resize

on_constrained_resize=

on_context_popup => Phi::Control#on_context_popup

on_context_popup= => Phi::Control#on_context_popup=

on_copy_data

on_copy_data=

copy_data によるプロセス間通信の受信ハンドラ。

copy_data メソッドの説明と、copy_data.rb のサンプルを参照してください。

もっとも、次のような簡単なモノ。

form.on_copy_data = proc do |sender, handle, data|
  p ["sender's handle = #{handle}","data = #{data}"]
end

on_create

on_create=

* Apolloでは呼ばれないようです。

on_dbl_click

on_dbl_click=

フォームのクライアント領域の地の部分(画像部品の残りの部分)をダブルクリックしたときに反応する。

#! ruby -Ks
form = Phi::Form.new :form,"パネル以外をダブルクリック"
panel = Phi::Panel.new form, :panel ,"パネル"
form.on_dbl_click=proc{form.caption = "form.on_dbl_click が反応しました"}
form.show
Phi.mainloop

on_deactivate

on_deactivate=

フォームがアクティブでなくなったときに呼ばれる。

他のフォームをクリックしたとき、Ctrl+TABで別のアプリに移ったとき、[_]アイコン化ボタンを押したとき、などに呼ばれる。

[x]ボタンで閉じたときにも呼ばれるが、(1)on_close_query、(2)on_close、(3)on_hide、(4)on_deactivateの順番で呼ばれる。on_close の後で呼ばれるので、うまく機能するかどうかは要注意かもしれない、まだ、試していない。

編集中のデータを保存するようとなどに使えるだろう。

* 反対の、フォームがアクティブになったときのイベントは on_activate

* 一般のコントロールの on_exit に近い感覚のイベント。

on_destroy

on_destroy=

* Apolloでは呼ばれないようです。ApolloではGCのタイミングで廃棄されることになるので、使えるようにしても、使い方はかなり難しいものになると思われます。

on_dock_drop

on_dock_drop=

on_dock_over

on_dock_over=

on_drag_drop

on_drag_drop=

on_drag_over

on_drag_over=

on_drop_files

on_drop_files=

on_end_dock

on_end_dock=

on_get_site_info

on_get_site_info=

on_help

on_help=

on_hide

on_hide=

on_key_down

on_key_down=

on_key_press

on_key_press=

on_key_up

on_key_up=

on_mouse_down

on_mouse_down=

on_mouse_move

on_mouse_move=

on_mouse_up

on_mouse_up=

on_mouse_wheel

on_mouse_wheel=

on_mouse_wheel_down

on_mouse_wheel_down=

on_mouse_wheel_up

on_mouse_wheel_up=

on_paint

on_paint=

on_resize

on_resize=

フォームのサイズが変化したときに呼ばれる。

フォームが最初に表示されるときにも呼ばれる。

フォームのサイズに応じて、画像部品の配置を適正化したい場合には、initialize に直接書くよりも、on_resize に書いたほうがよい。(スプリッタの移動にも対応するためには・・・)。

on_short_cut

on_short_cut=

on_show

on_show=

フォームが表示可能になったときに呼ばれる。(表示可能であっても、別のフォームに隠れていたり、アイコン化されている場合もあるので、必ずしも見えているとは限らない)。

(プログラムで show、 hide を繰り返さない限り)最初にフォームが作られたときの1回だけ呼ばれるでしょう。

* on_activate はフォームがアクティブになるたびに何度でも呼ばれます。最初にフォームが show されるときには(1)on_show、(2)on_activateの順番で呼ばれます。

* 反対のイベントは on_hide、on_close、on_close_query です。

on_start_dock

on_start_dock=

on_un_dock

on_un_dock=

paint

paint_controls => Phi::WinControl#paint_controls

paint_window => Phi::WinControl#paint_window

palette_changed => Phi::WinControl#palette_changed

parent => Phi::Control#parent

parent= => Phi::Control#parent=

parent_bi_di_mode

parent_bi_di_mode=

parent_bi_di_mode?

parent_ctl3d => Phi::WinControl#parent_ctl3d

parent_ctl3d= => Phi::WinControl#parent_ctl3d=

parent_ctl3d? => Phi::WinControl#parent_ctl3d?

parent_font

parent_font=

parent_font?

parent_form => Phi::Control#parent_form

parent_handle => Phi::WinControl#parent_handle

parent_window => Phi::WinControl#parent_window

parent_window= => Phi::WinControl#parent_window=

perform => Phi::Control#perform

pixels_per_inch

pixels_per_inch=

popup_menu

popup_menu=

position

position=

print

print_scale

print_scale=

prop_info => Phi::Component#prop_info

querying_end_session

read_state => Phi::WinControl#read_state

realign => Phi::WinControl#realign

recreate_wnd => Phi::WinControl#recreate_wnd

rect => Phi::Control#rect

rect= => Phi::Control#rect=

refresh => Phi::Control#refresh

reload_docked_control => Phi::WinControl#reload_docked_control

remove_control => Phi::WinControl#remove_control

repaint => Phi::Control#repaint

request_align

reset_ime => Phi::WinControl#reset_ime

right => Phi::Control#right

right= => Phi::Control#right=

scale_by => Phi::WinControl#scale_by

scale_controls => Phi::WinControl#scale_controls

scaled

scaled=

scaled?

screen_to_client => Phi::Control#screen_to_client

scroll_by => Phi::WinControl#scroll_by

select_first => Phi::WinControl#select_first

select_next => Phi::WinControl#select_next

send_cancel_mode

send_to_back => Phi::Control#send_to_back

set_bounds => Phi::Control#set_bounds

set_child_order => Phi::WinControl#set_child_order

set_focus => Phi::WinControl#set_focus

set_ime => Phi::WinControl#set_ime

set_z_order => Phi::WinControl#set_z_order

short_cut_enabled

short_cut_enabled=

show

show_control => Phi::WinControl#show_control

show_hint

show_hint=

show_hint?

show_modal

showing => Phi::WinControl#showing

showing? => Phi::WinControl#showing?

site_info => Phi::WinControl#site_info

stop_align => Phi::WinControl#stop_align

tab_order_list => Phi::WinControl#tab_order_list

tab_stop => Phi::WinControl#tab_stop

tab_stop= => Phi::WinControl#tab_stop=

tab_stop? => Phi::WinControl#tab_stop?

top => Phi::Control#top

top= => Phi::Control#top=

top_parent_handle => Phi::WinControl#top_parent_handle

transparent_color

transparent_color=

transparent_color?

transparent_color_value

transparent_color_value=

update => Phi::Control#update

update_actions

update_control_state => Phi::WinControl#update_control_state

update_window_state

use_dock_manager => Phi::WinControl#use_dock_manager

use_dock_manager= => Phi::WinControl#use_dock_manager=

use_dock_manager? => Phi::WinControl#use_dock_manager?

validate_rename

vert_scroll_bar

vert_scroll_bar=

visible

visible=

visible?

visible_dock_client_count => Phi::WinControl#visible_dock_client_count

width => Phi::Control#width

width= => Phi::Control#width=

window_handle => Phi::WinControl#window_handle

window_handle= => Phi::WinControl#window_handle=

window_menu

window_menu=

window_state

window_state=

そのフォームが、最小化(アイコン化)されているか(Phi::WS_MINIMIZED)、最大化(全画面化)されているか(Phi::WS_MAXIMIZED)、通常サイズで表示されている(Phi::WS_NORMAL)かを指定します。

require "Phi_sym" すると、window_state_sym プロパティが定義されて、シンボルで操作できるようになる。かな?

require "phi"
require "Phi_sym"
form = Phi::Form.new
form.window_state_sym = :maximized # 最大化して表示する
form.show
Phi.mainloop

p Phi::Form.window_state_sym_hash
#=> {:num_sym=>{0=>:normal, 1=>:minimized, 2=>:maximized},
#=>  :sym_num=>{:minimized=>1, :maximized=>2, :normal=>0}}

write_res_file => Phi::Component#write_res_file

Last modified:2007/08/27 16:19:12
Keyword(s):
References:[Phi-Classes] [Phi-Constants] [Phi::Button] [Phi::ControlScrollBar] [Phi::Form] [Phi::MainMenu] [image_of_controls] [tut-tut_form]