Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
TFormPanel : TPanel に TForm をハメ込んで表示する
written by Osamu Takeuchi 2001.04.14 版
osamu@big.or.jp, http://www.big.or.jp/~osamu/
[説明]
別のフォームを、パネル内にハメ込み、チャイルドウィンドウと
して使うためのコントロールです。TNotebook/TPageControl の
代わりに使えば、各ページを独立のTFormとして設計・管理する
ことができます。これにより、肥大化しがちなメインフォームの
ユニットを、いくつかのユニットに無理なく分割することができ、
コードの管理をしやすくなります。
[使い方]
内部にハメ込むフォームを指定するために、次の2つのプロパティ
がTPanelに追加されています。
public
property Form:TForm; read/write
published
{$IFDEF WIN32}
property FormName:string; read/write
{$ELSE}
property FormCaption:string; read/write
{$ENDIF}
それぞれ、フォームそのもの、あるいはフォームのキャプション・
Name プロパティを代入することで、指定したフォームをチャイルド
ウィンドウとして、TFormPanel いっぱいに表示することができます。
また、Form に nil が代入されたり、FormCaption/FormName に '' が
代入された時には設計時に TFormPanel に乗せてあったコントロールが
そのまま表示されます。
初期 Delphi では実行時にすべての Form の Name プロパティが
空であると言う困った仕様(?)になっているため、FormName は
FormCaption というプロパティで代用されています。実際には
WIN32 環境でも FormCaption プロパティは利用可能ですが、
これは下位互換性のためだけに残されているものです。
代わりに FormName プロパティを使うようにしてください。
設計時には Form プロパティは使用できません。FormName
(または FormCaption) プロパティでフォームを指定して下さい。
実行時には、Fromプロパティを利用した方が、確実で、高速と
なります。
フォームはハメ込まれる前にCreateされている必要があります。
ただし、csLoading in ComponentState の場合には、ハメ込む
フォームが作られていない場合が多いと考え、TFormPanelが表示
されるまでに指定フォームがCreateされていればよいようにして
あります。
指定されたフォームがメニューを持つ場合、つまり Form.Menu
<>nil の場合には、このメニューはTFormPanelを所有する
フォームのメニューにマージされます。
ただし、メニューのマージは、TMainMenu.Merge手続きを使って
実現されているため、同時に2つ以上のメニューをマージすること
はできません。したがって、一つのフォームに2つ以上の
TFormPanelを配置する場合や、MDIアプリケーションの中で使う
場合、他でAutoMergeをTrueにしたMenuを使う場合には注意が必要
です。
TFormPanelを所有するフォームがメニューを持たない場合、かつ、
はめ込まれたフォームがメニューを持つ場合には、はめ込まれた
フォームのメニューを、所有フォームのメインメニューとします。
[制限事項]
はめ込まれるFormのTForm.AutoScrollはTFormPanelの中では機能
しないので、AutoScrollの変わりに、TScrollBoxを使う必要が
あります。
TFormPanelのOwnerがメインフォームである場合、他フォームを
モードレスでShowすると、MergeされていたメニューがUnMerge
されてしまいます。これを防ぐには、メインフォームの OnActivate
で TFormPanel.SetupMenu を呼んでください。
[使用例]
TNoteBook/TPageControl の代用として用いる。
> オブジェクトインスペクタにて
> TabSet1.PageIndex:=0;
> FormPanel1.FormName:='Form2';
> あるいは
> FormPanel1.FormCaption:='Form2';
procedure TForm1.TabSet1Click(Sender:TObject);
begin
case TabSet1.TabIndex of
0: FormPanel1.Form:=Form2;
1: FormPanel1.Form:=Form3;
2: FormPanel1.Form:=Form4;
3: FormPanel1.Form:=Form5;
end;
end;
[使用に関する注意]
特に制限は設けませんが、ソースを再配布する場合には、コメント
部分を残し、原作者がtakeuchi@exp.t.u-tokyo.ac.jpであること、
誰がどの部分に手を加えたか(もしあれば)を明記した上でお願い
します。
これを使って有用なアプリケーションが出来上がったらメールでで
も御一報頂けると励みになります。
**************************************************************
modified by Osamu Takeuchi 1997.4.30
takeuchi@exp.t.u-tokyo.ac.jp
フォーム切り替え時のShow/Hideのタイミングを調整し、ちらつきを
押さえた。これにより、Form=nil、あるいは、FromCaption=''の時
に、もともと設計時にTFormPanel上に配置してあったコントロール
を利用することができるようになった。
**************************************************************
modified by Osamu Takeuchi 1997.11.14
takeuchi@exp.t.u-tokyo.ac.jp
TFormPanelをメインフォームに貼った場合にメニューのMergeが
解けてしまう場合があるのを回避するため、SetupMenu手続きを
新設した。
**************************************************************
modified by Osamu Takeuchi 2001.04.14
osamu@big.or.jp
32bit 版 Delphi では、はめ込む Form を Name プロパティで
設定できるように改良。Delphi 1 では実行時、すべてのForm の
Name プロパティが空であるという困った仕様(?)があるので、
このプロパティは利用できない。この変更により、32bit Delphi
では FormCaption プロパティの利用は推奨されなくなった。
このプロパティは下位互換性のためのみに残されている。Delphi5
以降では FormCaption プロパティは旧式とされ、デフォルトで
オブジェクトインスペクタに表示されない。
Delphian World に登録した初期バージョン。
**************************************************************
modified by Osamu Takeuchi 2003.11.11
osamu@big.or.jp
Delphi7 への対応 FmPnlReg.pas にちょっと手直し
Version.inc のバージョンアップ
**************************************************************