■ パッケージ化したフォームの使い方

[Delphi Q & A 掲示板] [過去ログの一覧]


o8o8 2009/02/25(水) 15:08:01 <中級者>
Delphi2009を使用しています。
パッケージ化したフォームを継承して利用したいのですがうまくいきません。Delphi-MLでも過去に同じような投稿がありましたが、dfmに手を加える方法なのでしっくりきません。そもそもフォームをパッケージにして利用するのはNGなのでしょうか。

monaa 2009/02/26(木) 14:41:31
意味がかなり分からないのですが、
そのパッケージファイルは同じバージョンで行われてますか?
*.pasを使用しないのはどういったためなのでしょうか?
>>Delphi-MLでも過去に同じような投稿
できたらこういうのはリンクを張ってもらえると答えやすいと思います。

o8o8 2009/02/26(木) 17:31:15
monaa様、フォローありがとうございます。

>> そのパッケージファイルは同じバージョンで行われてますか?
すべてDelphi2009で作成しています。
パッケージに作成したベースになるフォームを、
他のプロジェクトに継承して利用しようとしています。

>> *.pasを使用しないのはどういったためなのでしょうか?
フォームの基本的な部分を統一したいのです。
あとで統一箇所を変更したいときに、
全てのフォームをリコンパイルしなくても
パッケージだけ更新すれば済むようにできればと思っています。

>> Delphi-MLでも過去に同じような投稿
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=045797

Mr.XRAY 2009/02/26(木) 19:13:46
Mr.XRAYです.

>> Delphi-MLでも過去に同じような投稿
>http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=045797

そういうことですか.

>パッケージ化したフォームを継承して利用したいのですがうまくいきません。

であれば,上のDelph MLの方法しかないと思います.
このMLの記事にあるように,フォームのないUnitであれば継承はできます.
それは,ビジュアルなコントロールがないからです.
同様に,実行時生成であれば,当たり前ですが,継承したフォームを作成することができます.

パッケージ化でなくても

1. ある元となるフォームを開発チームで共有したい.
2. 各開発者は,そのフォームを継承して設計時に利用したい
3. 各開発者にリポジトリに登録してもらう方法は使いたくない

というであれば,他の方法も考えられますが...
いずれにしても,各開発者にある程度の手間は必要です.
もちろん,パッケージで配布したとしても手間は必要だとは思いますが.

o8o8 2009/02/26(木) 21:33:53
Mr.XRAY様、フォローありがとうございます。

>> このMLの記事にあるように,フォームのないUnitであれば継承はできます.
これはMLにあるように、Class(TForm)の部分を書き換えるということになると思いますが、
継承メソッドにinheritedを都度付け加えていかないといけないようで、
抜け落ちるのが心配です。

>> というであれば,他の方法も考えられますが...
正に1,2,3に該当しますが、これのヒントを教えていただけますか。

Mr.XRAY [HomePage] 2009/02/26(木) 22:13:10
Mr.XRAYです.

>正に1,2,3に該当しますが、これのヒントを教えていただけますか。

と言われても,実は,単に継承フォームを作成するだけです.
と言うことは,したがって,もしかしたら,希望の動作をするものではないかも知れません.

継承フォームは,リポジトリに登録しなくても作成できますから...
以下Delphi 7 Proの場合です.Delphi 2009ではメニュー項目が違うかもしれません

1. 開発者のマシンはLANで接続されている場合,その共有フォルダに
  元となるフォームを置く.
    または,元となるフォーム群をまとめて,各開発者のDelphiから
    パスの通ったフォルダに置いてもらう.
    
2. 各開発者は,今開発中のIDEから,[プロジェクト][プロジェクトに追加]で選んでもらう
3. [ファイル][新規作成][その他]から,現在のプロジェクトのタブから
  たった今プロジェクトに追加したフォームを選択する.
    [継承]になっていることを確認して[OK]

これで元のフォームの継承フォームができます.
元のフォームに変更があれば,直ちに反映されます.
この方法であれば,パッケージにしなくとも,元のフォームのdfmとpasファイルを
コピーするだけです.

参考までに,リポジトリに登録したフォームの,継承フォームを作成する時は,
上の2. の,プロジェクトへの追加は自動的に行われます.これを手動で実行する
ということになります.

Mr.XRAY [HomePage] 2009/02/26(木) 22:15:11
スミマセン.ヒントでしたね.でしたら,

「リポジトリに登録せず,単に継承フォームをします」

です.

Mr.XRAY [HomePage] 2009/02/26(木) 22:19:54
訂正.(^_^;)

>「リポジトリに登録せず,単に継承フォームをします」

「リポジトリには登録しないで,継承フォームを作成します」

Mr.XRAY [HomePage] 2009/02/27(金) 13:53:05
>以下Delphi 7 Proの場合です.Delphi 2009ではメニュー項目が違うかもしれません

Delphi2009 Proの場合は[継承可能項目]ですね.
http://mrxray.on.coocan.jp/Others/Images/012.jpg

o8o8 2009/02/27(金) 14:58:42
[[解決]]

私としてはベースのフォームを変更したときに、それを格納している
パッケージをを配布しなおすだけで、他のプロジェクトの動作も変更できるようにしたいのです。

そこであれこれ考えた結果、以下のようにすることにしました。
1.パッケージに作成するベースフォームは、フォーム(dfm)を作らずユニットだけで構成し、メソッドに必要な処理を書いておく
2.適当なプロジェクトでフォームを新規作成し、usesにパッケージのユニット名を追加、class(TForm1)の部分をベースのクラスに書き換える
3.ベースと同じメソッドを作成し、inheritedを書いておく
4.プロジェクト外に単独で保存する
5.リポジトリに登録する

フォームの共通デザインは使えませんが、他のプロジェクトから
使用するときに、リポジトリ登録したフォームを
「コピーして使用」すれば、期待通りになりそうです。

monaa 2009/02/27(金) 18:38:04
いろいろ調べてみました。
Delphi本体ではこのようなことは無理みたいですね。
継承dfmを更新するツールを自作してしまえばそれでよい気がします。
私はやる予定はないですが、無理な作業ではないきがします。

Mr.XRAY [HomePage] 2009/02/27(金) 19:04:28
Mr.XRAYです.

そうですね.
素直に継承フォームを作成した方がいいとは思いますけど.個人的には.
設計時に加工できのが強みです.これこそDelphiのスバラシイところですから.

「パッケージ」にこだわるのであれば別ですが(笑)

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library