TFrameを使用するには?

解決


もうすぐ中級者  2009-06-24 01:10:49  No: 34887  IP: [192.*.*.*]

TFrame の使い方についての質問なのですが
理解できず、対処できないので教えてください

TFrameから派生したTMyFrameでメニューを作りました。
フォームにはPageControlを配置し
いくつかのTabSheetとTabSheetMyFrameを作りました。

TabSheetMyFrameのOnShowで
  MyFrame := TMyFrame.Create(TabSheetMyFrame);
  MyFrame.Parent := TabSheetMyFrame;

TabSheetMyFrameのOnHideで
  MyFrame.Free;
  MyFrame := Nil;

と、しました。

PageControlのActivePageがTabSheetMyFrame以外で
PageControl.ActivePage := TabSheetOther
としていれば
TabSheetMyFrameに切り替えるとフレームが表示されるのに、

Form.Create で
PageControlのActivePageをTabSheetMyFrameで
PageControl.ActivePage := TabSheetMyFrame
にするとフレームが表示されないのはどうしてでしょうか?

編集    削除
KHE00221  2009-06-24 14:32:41  No: 34888  IP: [192.*.*.*]

タブを切り替えるとき 新しいタブの SHOW 元のタブの HIDE と
実行されるので

TabSheetMyFrameのOnShowで
  MyFrame := TMyFrame.Create(TabSheetMyFrame);
  MyFrame.Parent := TabSheetMyFrame;

TabSheetMyFrameのOnHideで
  MyFrame.Free;
  MyFrame := Nil;

だとタブを切り替えたとたんに消えると思うんだけど・・・

こんな感じにすべきかと?

procedure TForm7.TabSheetOnShow(Sender: TObject);
begin
    Frame8.Parent := TTabSheet(Sender);
end;

procedure TForm7.FormCreate(Sender: TObject);
begin
    Frame8 := TFrame8.Create(TTabSheet(Sender));
    Frame8.Parent := PageControl1.ActivePage;
    TabSheet1.OnShow := TabSheetOnShow;
    TabSheet2.OnShow := TabSheetOnShow;
end;

一応 TabSheetOnShow で

 TabSheet(Sender).BringToFront;

を入れれば表示されるようになると思うけど(タブが1個の場合表示されない)

編集    削除
もうすぐ中級者  2009-06-30 00:48:04  No: 34889  IP: [192.*.*.*]

FormのOnActiveでFrameを貼り付けて
FormのOnDestroyでFrmaeを削除すればいいんですよね。

編集    削除