Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi parent / child management mit Drawgrids und Shapes (https://www.delphipraxis.net/5069-parent-child-management-mit-drawgrids-und-shapes.html)

Tiefflieger 22. Mai 2003 17:29


parent / child management mit Drawgrids und Shapes
 
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 :wall: :
:warn: 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]

oki 23. Mai 2003 13:22

Hi,

ich hab deine Frage etwas spät gesehen. Aber doch noch eine Erfsahrung von mir.

Wenn ich Listen löschen will, bei denen ich die einzelnen Elemente bearbeiten muß (frei geben wie bei dir), dann zähle ich immer rückwärts. Dann klappt alles wie am Schnürchen.

Delphi-Quellcode:
For Count := List.Count - 1 downto 0 do ....
Zu deiner letzten Frage.

Bei mir hat TShape die Eigenschaft Parent. TShape ist von TControl abgeleitet und TControl definiert die Eigenschaft Parent. Somit hat TShape ein property Parent.

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz