Delphi XE2 に取り組んでいます。サードパーティのコンポーネントやスイートはなく、派手なものはありません。
フォームに TCategoryPanelGroup (catPanGroup) を取得しました。必要な数の TCategoryPanel を簡単に追加できます。
procedure TSomeForm.PopulateGrp(Sender: TObject);
var catPanel: TCategoryPanel;
x: word;
begin
x := 0;
while x < 9 do
begin
catPanel := catPanGroup.CreatePanel(Self) as TCategoryPanel;
// Also tried the line below, using the panel group as the owner
// catPanel := catPanGroup.CreatePanel(catPanGroup) as TCategoryPanel;
//it also works without the following line
catPanel.PanelGroup := catPanGroup;
catPanel.Caption := 'and nothing else matters';
Inc(x);
end; //loop
end;
パネルの順序は気にしませんし、(まだ) 見た目も気にしません。これらのパネル内にラベル、テキストボックス、ボタンを挿入できます。これらは正常に機能し、問題はありません。私はアプリケーションを終了し、(明らかな)リークはありません。
ただし、アプリケーションは少し動的であり、パネルを削除する必要があります。最後のパネルとしましょう。したがって、私の即時の反応は次のとおりです。
var catPanel: TCategoryPanel;
begin
catPanel := catPanGroup.Panels[catPanGroup.Panels.Count - 1];
catPanGroup.Panels.Remove(catPanel);
end;
または:
var catPanel: TCategoryPanel;
begin
catPanGroup.Panels.Delete(catPanGroup.Panels.Count - 1);
end;
平:
var catPanel: TCategoryPanel;
begin
catPanel := catPanGroup.Panels[catPanGroup.Panels.Count - 1];
catPanGroup.Panels.Remove(catPanel);
catPanGroup.RemoveControl(catPanel);
//catPanel.PanelGroup := nil; <- can't do, it raises an exception
end;
そして、物事がうまくいかなかったとき、私は:
catPanGroup.Panels.Clear();
//and rebuild every single panel
では、エラーは何ですか? エラーが発生しない場合もありますが、アプリケーションを終了すると常に例外 (アクセス違反) が発生します。¿おそらく、TCategoryPanel 内に挿入したコントロールから来ているのでしょうか? いいえ、これらのパネルにコントロールを作成しなくてもアクセス違反が発生します。そして、例外は、パネルを削除する (または削除しようとする) ときにのみポップします。近いうちに XE3 で自宅で試してみます。
誰でも実行時に TCategoryPanel を作成および削除できますか?