Einzelnen Beitrag anzeigen

Tiefflieger

Registriert seit: 20. Mai 2003
18 Beiträge
 
Delphi 6 Personal
 
#1

parent / child management mit Drawgrids und Shapes

  Alt 22. Mai 2003, 17:29
ich versuche ein Vier-Gewinnt Spiel mit einem Drawgrid als Spielfeld und Shapes als Spielsteine zu realisieren.
Ich erzeuge jedesmal, wenn ich ein Spielstein ins Spielfeld einfüge, einen neuen Spielstein vom Typ TShape und weise der Eigenschaft parent des Spielsteines das Spielfeld zu:
Delphi-Quellcode:
procedure TFrm_VierGewinnt.SetzeSpielstein(Sender: TObject);
var spielstein : TShape;
begin
  spielstein := TShape.Create(Sender as TComponent);
  spielstein.Parent := Spielfeld;
  //es folgen noch zuweisungen für größe,farbe,position etc...
end;
spielfeld.ComponentCount zeigt dann auch immer die Gesamtanzahl der Spielsteine an.
Will ich aber alle Spielsteine mit folgendem Code löschen:
Delphi-Quellcode:
procedure TFrm_VierGewinnt.Menu_Spiel_NeuClick(Sender: TObject);
var i : integer;
begin
  for i := 0 to (Spielfeld.ComponentCount - 1) do
    if Spielfeld.Components[i] is TShape then
      Spielfeld.Components[i].Free;
end;
werden nur die roten steine entfernt, danach gibts die Fehlermeldung "List index out of bounds (AnzahlDerRotenSteine)"

1. wie kann der out of bounds sein, wenn ich den maximalwert vorher abgefragt hab?
2. warum kann ich eigentlich einem objekt TCanvas kein "parent" zuweisen?
[edit]
nach stundenlangem Tüffteln hab ichs geschafft :
wenn ich eine Komponente lösche, läßt das alle anderen Komponenten "Nachrücken"; das ist auch der Grund, warum immer nur die Hälfte gelöscht wurde: nachdem z.b. 3 von 6 Komponenten/steine gelöscht wurden, stand i auf 3, es gab aber nur noch 3 Komponenten/steine, die letzte Komponente hatte also da den index [2] -> fehler

bleibt die Frage, warum shapes keine parent-eigenschaft haben?
[/edit]
Irren ist menschlich.
Aber wenn man richtig Mist bauen will, braucht man einen Computer.

Dan Rather, CBS-Fernsehreporter
  Mit Zitat antworten Zitat