![]() |
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Du musst die Unit Contnrs einbinden. Ich habe mal schnell eine Demo mit Shapes geschrieben, das ist nur eine Form mit einem Timer (Interval 50).
Delphi-Quellcode:
[edit] Add: Sollten das zuviele Bilder werden, so dass sich der Timer "selbst überholt", kannst Du ihn im Timer-Ereignis zuerst disablen, abarbeiten und zum Schluss wieder enablen. [/edit]
unit ListDemoMain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Contnrs; type TfrmListDemo = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } FShapes: TObjectList; FWait: integer; procedure CreateShape; public { Public-Deklarationen } end; var frmListDemo: TfrmListDemo; implementation {$R *.dfm} //Dynamisches Erzeugen eines TShape und Ablegen in der Liste procedure TfrmListDemo.CreateShape; var Shape: TShape; begin Shape := TShape.Create(nil); Shape.Parent := self; Shape.Shape := stCircle; Shape.Brush.Color := clRed; Shape.Left := Random(ClientWidth div Shape.Width) * Shape.Width; FShapes.Add(Shape); end; procedure TfrmListDemo.FormCreate(Sender: TObject); begin DoubleBuffered := true; FShapes := TObjectList.Create; Randomize; FWait := 0; end; //Freigeben der Liste und aller enthaltenen Objekte procedure TfrmListDemo.FormDestroy(Sender: TObject); begin FShapes.Free; end; //ggf. Shape erzeugen oder freigeben, wenn unten angekommen procedure TfrmListDemo.Timer1Timer(Sender: TObject); var i: integer; begin if FWait mod 10 = 0 then CreateShape; for I := FShapes.Count - 1 downto 0 do if (FShapes[i] as TShape).Top >= ClientHeight - (FShapes[i] as TShape).Height then FShapes.Delete(i) else (FShapes[i] as TShape).Top := (FShapes[i] as TShape).Top + 1; inc(FWait); end; end. |
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Ich bin gerade am rumbasteln ich melde mich wieder :)
Danke schonmal werd mir das zu gemüte führen man lernt nie aus :D |
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Super habs soweit auch kapiert, nur einwas versteh ich nicht was soll das bedeuten?
Delphi-Quellcode:
Sry wenn ich mich ein bisschen dumm anstelle aber ich möchte auch verstehn was ich da mache ;)
if FWait mod 10 = 0 then
|
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Zitat:
|
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Zitat:
|
Re: zur laufzeit erstellte Items löschen und Name zuweisen
So hab alles soweit verstanden vielen Dank dafür :)
Noch eine Sache das Problem hatte ich ja vorhin auch schon, ich habe eine Kollisionsabfrage, mal vereinfacht ungefähr so:
Delphi-Quellcode:
Aber sobald ein neues erzeugt wird, gilt der .top wert des neu erzeugten Objektes .
if createitem.top>=figur.top then ...
Wäre über weitere Hilfe dankbar :) LG |
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Das musst Du dann in die Schleife innerhalb des Timers verlagern, siehe mein Beispiel.
|
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Hab ich ;)
itemisdrauf=5 ist nur ne sicherheitsabfrage ob schon eins erstellt wurde.
Delphi-Quellcode:
var i: integer;
begin Statusbar1.Panels[0].Text:= inttostr (figur.top); // Zeig mit Topwert von Figur if itemisdrauf=5 then Statusbar1.Panels[1].Text:= inttostr (createitem.top); // Zeig mit Topwert von erzeugtem Object if ((itemisdrauf=5) and (createitem.top>=figur.top)) // Item fällt auf Figut then showmessage('lol'); if FWait mod 100 = 0 then CreateShape; itemisdrauf:=5; for I := FShapes.Count - 1 downto 0 do if (FShapes[i] as TImage).Top >= spielfeld.Height+spielfeld.top - (FShapes[i] as TImage).Height-2 then FShapes.Delete(i) else (FShapes[i] as TImage).Top := (FShapes[i] as TImage).Top + 1; inc(FWait); |
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Mir scheint, Du hast das Beispiel doch noch nicht so ganz begriffen. Sind in FShapes jetzt Deine TImages drin? Und was ist createitem?
|
Re: zur laufzeit erstellte Items löschen und Name zuweisen
Ja hab das nur noch nicht umbenannt hab Images erstellt anstatt Shapes, funktioniert auch alles SUper !
createimage
Delphi-Quellcode:
createitem := TImage.Create(nil);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:00 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-2025 by Thomas Breitkreuz