![]() |
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:
spielfeld.ComponentCount zeigt dann auch immer die Gesamtanzahl der Spielsteine an.
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; Will ich aber alle Spielsteine mit folgendem Code löschen:
Delphi-Quellcode:
werden nur die roten steine entfernt, danach gibts die Fehlermeldung "List index out of bounds (AnzahlDerRotenSteine)"
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; 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] |
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:
Zu deiner letzten Frage.
For Count := List.Count - 1 downto 0 do ....
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 03:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz