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

Phi.load_from_dfm

Phi.load_from_dfmメソッドはdfmファイルを使ってフォームオブジェクトを作成します。

たとえばDelphi で作成した dfmファイル(Unit1.dfm)がスクリプトと同じディレクトリにコピーされている場合には、次のようにすればフォームが表示される。

require "phi"
dfm_path = "Unit1.dfm"
form = Phi.load_from_dfm(dfm_path)
form.show
Phi.mainloop
form = Phi.load_from_dfm( dfm_path )

手順:

(1)Delphiでフォームを作成し、Delphiを終了すると、dfmファイルができる。

(2)dfmファイルをディレクトリにコピーする。

(3)スクリプトで 「form = Phi.load_from_dfm(dfm_path)」を実行する。

require "phi"
dfm_path = "Unit1.dfm"
form = Phi.load_from_dfm(dfm_path)
form.show
Phi.mainloop

(4)formから画像部品への参照を取り出して、ローカル変数に代入し、それを使ってイベントハンドラなどを作成する。

(5)dfmファイルが気に入らない場合には、dfmファイルを直接編集してもよい。もしくは、Delphiで作り直してコピーする。(Delphiで使用するdfmファイルはDelphiで必要なファイルなので直接編集しないほうがよい)。


* 2005-09-14(水):現在のバージョンでは以下のエラー(フォームの名前が /TForm\d+/ にマッチしない場合)は出ない?

require "phi"
require "dialogs"
dfm_path = "c:/program files/apollo/src/Browser.dfm"
form = Phi.load_from_dfm(dfm_path)
form.show
Phi.mainloop

であれば、ruby_ap.exe でも実行できる模様。


Delphiで作成したフォームの名前が /TForm\d+/ にマッチしない場合には、 load_from_dfm の第二引数で指定する。たとえば、Apollo.exe のフォーム Browser.dfm を指定すると次のようなエラーになる。

require "phi"
dfm_path = "c:/program files/apollo/src/Browser.dfm"
form = Phi.load_from_dfm(dfm_path)
form.show
Phi.mainloop

これを Apollo.exe で実行すると

コンポーネント名 StatusBar はすでに使われています (IOError)

と出る。このメッセージは不可解だが(※1)、ruby_ap.exe で実行すると次のようにでる。

c:/program files/apollo/bin/phi.rb:330:
 in `_load': クラス TFormBrowser が見つかりません (IOError)

このようなメッセージが出た場合には、第2引数に"TFormBrowser?"を加えればよい。

require "phi"
dfm_path = "c:/program files/apollo/src/Browser.dfm"
form = Phi.load_from_dfm(dfm_path)
form.show
Phi.mainloop

* 加えてないじゃん。

Last modified:2005/09/14 11:36:31
Keyword(s):
References:[dfmファイル] [using_delphi_form]