名前 題名 ▼ takiさん > コンポーネントの登録先はFormなんですね。 > > 複数個のコンポーネントを動的に生成する時、配列を用意して > > PanelArray[i] := TPanel.Create(Self); > > なんて記述するので、てっきり配列に登録するんだと思っていました。 > > 複数個のコンポーネントを生成後、配列にnilを代入してもコンポーネントは > 消えないし、クリックすると反応するし。 > > http://mrxray.on.coocan.jp/Delphi/plSamples/161_CreateComponent_List.htm の > > 02_複数のパネルを作成 ( 配列を使用 ) の一部を使いテストしました。 > > Button2はForm1のControlCountを表示します。 > パネルを生成する前は4で、生成後は9になります。ここに登録されるんですね。 > > Button3は配列にnilを代入しています。 > それでも、生成したpanelをクリックすると色が変わります。 > > > unit Unit1; > > interface > > uses > Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, > Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; > > type > TForm1 = class(TForm) > Button1: TButton; > Button2: TButton; > Label1: TLabel; > Button3: TButton; > procedure Button1Click(Sender: TObject); > procedure Button2Click(Sender: TObject); > procedure Button3Click(Sender: TObject); > private > { Private 宣言 } > //作成する個数が決まっている場合用の配列(静的配列) > FPanelArray1 : array[0..4] of TPanel; > procedure PanelClickEvent(Sender : TObject); > public > { Public 宣言 } > end; > > var > Form1: TForm1; > > implementation > > {$R *.dfm} > > procedure TForm1.Button1Click(Sender: TObject); > var > LWidth : Integer; > LHeight: Integer; > i : Integer; > begin > //パネルを作成 > LWidth := 100; > LHeight := 28; > > for i := 0 to High(FPanelArray1) do begin > FPanelArray1[i] := TPanel.Create(Self); > > //Parent(配置場所)をSelf,つまりこのForm1とする > //これがないと配置場所不明で表示されない > FPanelArray1[i].Parent := Self; > > FPanelArray1[i].Left := 90; > FPanelArray1[i].Width := LWidth; > FPanelArray1[i].Height := LHeight; > FPanelArray1[i].Top := 40 + (LHeight + 3) * (i - 1); > FPanelArray1[i].Color := clSilver; > FPanelArray1[i].Caption := 'Panel ' + IntToStr(i + 1); > > //これがないとTPanelのColorプロパティの設定が反映されない場合がある > FPanelArray1[i].ParentBackground := False; > > //OnClickイベントをPanelClickEventというメソッドに割当てる > FPanelArray1[i].OnClick := PanelClickEvent; > end; > end; > > procedure TForm1.Button2Click(Sender: TObject); > begin > label1.Caption := inttostr(Self.ControlCount); > end; > > procedure TForm1.Button3Click(Sender: TObject); > var > i:integer; > begin > for i := 0 to High(FPanelArray1) do begin > FPanelArray1[i] := nil; > end; > end; > > procedure TForm1.PanelClickEvent(Sender: TObject); > begin > TPanel(Sender).Color := RGB(Random(255), Random(255), Random(255)); > end; > > end. > > でも、Panelを簡単に操作するにはFPanelArray1はやはり必要ですね。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link