4

この Q&A Component Creation - Joining Components Together?からの例をテストしています。カスタム/複合コンポーネントを作成する方法を学びます。

サンプルからインストールされたコンポーネントはフォームにドラッグして動作しますが、実行時に作成できないようです。

procedure TForm1.Button1Click(Sender: TObject);
var
MyPanel2 : TMyPanel;
begin
MyPanel2 := TMyPanel.Create(Form1);
With MyPanel2 do
  begin
    Left := 10;
    Top := 10;
    Width := 400;
    Height := 400;
    Visible := True;
    Image.Picture.LoadFromFile('C:\test.png');
  end;
end;

所有者として自分自身と Form1 の両方を試しました。パネルと画像の両方のプロパティで遊んだ。

何が間違っているのかわかりません。pngimage を自分の用途に追加するのを忘れた場合を除いて、エラーはありません。コードを問題なくステップ実行します。実行時の作成では視覚的に何も起こりません。

4

1 に答える 1

8

Parentランタイム コードで設定する必要があります。

MyPanel2 := TMyPanel.Create(Self);
with MyPanel2 do
begin
  Parent := Self;//oops, you forgot to set this
  SetBounds(10, 10, 400, 400);
  Image.Picture.LoadFromFile('C:\test.png');
end;

あなたの質問のコードは、単純なバニラTPanel、または実際にはコントロールを表示するコントロールにはなりません。

documentationから、私の強調で:

コントロールの親を指定します。

コントロールの親を取得または設定するには、Parent プロパティを使用します。コントロールの親は、それを含むコントロールです。たとえば、アプリケーションのグループ ボックスに 3 つのラジオ ボタンが含まれている場合、グループ ボックスは 3 つのラジオ ボタンの親であり、ラジオ ボタンはグループ ボックスの子コントロールです。

親として機能するには、コントロールが TWinControl の子孫のインスタンスである必要があります。

実行時に新しいコントロールを作成するときは、新しいコントロールの Parent プロパティ値を割り当てます。通常、これはフォーム、パネル、グループ ボックス、または別のものを含むように設計されたコントロールです。コントロールの親を変更すると、コントロールが画面上で移動し、新しい親内に表示されます。親コントロールが移動すると、子は親と一緒に移動します。

于 2013-01-28T20:38:36.743 に答える