10

私はいつもの散歩をしていて、いくつかのフレームの議論に出くわしました。

私は主に Delphi 愛好家であり、プロではありません。そのため、TFrame を独自の方法で使用する方法を学ばなければなりませんでした。

  • ユニット内に TFrame を作成します。
  • そのユニットをメイン フォームの Uses 句に追加します。
  • その TFrame の型のプライベート変数を持つ
  • フォームの OnCreate は TFrame をインスタンス化し、それを Create と .Parent の両方で TPanel にアタッチします。
  • 私のアクションの 1 つで、TFrame.Visible := True と .BringToFront を設定しました。

これは、個人的に熟考した後の私の実践です。

フレームを他にどのように使用できますか?

4

4 に答える 4

17

それは一つの方法であり、何も悪いことではありません。別の方法は、視覚的に行うことです。したがって、基本的にフレームをフォームに追加できます。これを行うには:

  • フレームを作成します。
  • フレームを配置するフォームに移動します。
  • Frames コンポーネントを追加する (標準タブ)
  • ドロップダウンからフレームを選択します。
  • それでおしまい!
于 2009-09-30T10:33:27.040 に答える
7

あなたのアプローチの唯一の問題は、同じフレームの複数のインスタンスを特定のフォームに追加できないことです。

Frame1 := TMyFrame.Create(Self);
Frame1.Parent := Self;
// ...
Frame2 := TMyFrame.Create(Self); // bombs out with "a component with the name MyFrame already exists"

彼の回避策は、インスタンスごとに異なる名前を割り当てることです。

Frame1 := TMyFrame.Create(Self)
Frame1.Parent := Self;
Frame1.Name := "FirstFrame";
// ...
Frame2 := TMyFrame.Create(Self); // works now, there is no name conflict
于 2009-09-30T17:47:21.420 に答える
6

フレームをコンポーネントとして登録することで、さらに一歩進むこともできます。

これにより、フレームコンポーネントがフォーム上にあるとすぐに、フレーム上のコンポーネントのプロパティを編集できなくなります。しかし、それは良いことだと思います。

Delphiについてのこの記事で説明しているように、フレームをコンポーネントとして登録することよりももう1つ必要なことがあります。これは、ビジュアルコンポーネントとしてのフレームです。Sprigを忘れないでください。

その知識は私のものではありません。今年初めにサンノゼで開催されたDelphiLiveカンファレンスでの彼のセッションの1つで、レイ・コノプカからそれを入手しました。

于 2009-09-30T13:24:24.720 に答える
2

これはより否定的な答えですが、少し複雑な GUI 用に TFrame の再親化を含む方法を試しました。

最初はうまくいきましたが、アプリケーションが成熟し、より多くのイベントが飛び交うようになると、変更する前にメッセージを無効にしてからしばらく (20ms) 処理する必要があり、フレームを変更するとクラッシュすることがありました。

私が最終的に見つけた原因の 1 つである TPopmenu は、グローバル データ構造にも自身を登録します。これで問題は減りましたが、まだ残っていたので、この概念から離れます。

于 2009-09-30T14:05:20.983 に答える