Soweit funktioniert auch alles, jetzt geht es daran die Sache Grafisch darzustellen:
Dazu habe ich eine Klasse von TPanel abgeleitet die ich jetzt immer mit neuen Panels als Scheiben befüllen will.
Warum leitest du von einem Panel ab?
Das ist doch unflexibel und umständlich.
Stattdessen nimmt man eine ganz normale Klasse:
Delphi-Quellcode:
TVisTower = class(TObject)
private
FContainer : TWinControl;
protected
procedure MaleTurm(ATower: TTower);
public
constructor Create(AContainer:TWinControl);
published
end;
und übergibt einen "Container".
Das könnte ein Panel, eine Groupbox oder ein Formular sein.
Kurz gesagt, jedes Control, dass andere Controls aufnehmen kann ist als Basis geeignet.
Auf diesem Container werden nun die farbigen Panels, die die Scheiben darstellen erzeugt.
Delphi-Quellcode:
while not ATower.IsEmpty do
begin
schicht := TPanel.Create(FContainer);
schicht.Anchors := [akBottom];
schicht.Width := FContainer.Width - (i * 4);
schicht.Left := 2;
schicht.Height := 10;
schicht.Top := i * schicht.Height;
if ((i mod 2) = 0) then
schicht.Color := clRed
else
schicht.Color := clGreen;
schicht.Caption:= IntToStr(ATower.Get);
// Diese Zuweisung macht das neu erzeugte Panel erst sichtbar!
schicht.Parent := FContainer;
inc(i);
end;