Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi zur laufzeit erstellte Items löschen und Name zuweisen (https://www.delphipraxis.net/142521-zur-laufzeit-erstellte-items-loeschen-und-name-zuweisen.html)

DeddyH 29. Okt 2009 18:46

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:
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.
[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]

Detrox 29. Okt 2009 19:13

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

Detrox 29. Okt 2009 19:20

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:
if FWait mod 10 = 0 then
Sry wenn ich mich ein bisschen dumm anstelle aber ich möchte auch verstehn was ich da mache ;)

Namenloser 29. Okt 2009 19:23

Re: zur laufzeit erstellte Items löschen und Name zuweisen
 
Zitat:

Zitat von DeddyH
[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]

Das kann nicht passieren, denn solange der Code ausgeführt wird, kann die Application keine Messages abarbeiten, also auch nicht den Timer ausführen. Zumindest solange man nicht Application.ProcessMessages o.ä. aufruft.

DeddyH 29. Okt 2009 19:24

Re: zur laufzeit erstellte Items löschen und Name zuweisen
 
Zitat:

Zitat von Detrox
Super habs soweit auch kapiert, nur einwas versteh ich nicht was soll das bedeuten?

Delphi-Quellcode:
if FWait mod 10 = 0 then
Sry wenn ich mich ein bisschen dumm anstelle aber ich möchte auch verstehn was ich da mache ;)

Das heißt, dass der folgende Code nur bei jedem 10. Durchlauf abgearbeitet werden soll. MOD gibt den Rest bei ganzzahliger Division zurück, aber das kannst Du auch in der Hilfe bzw. der Delphi-Reference nachlesen ;)

Detrox 29. Okt 2009 20:17

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:
if createitem.top>=figur.top then ...
Aber sobald ein neues erzeugt wird, gilt der .top wert des neu erzeugten Objektes .

Wäre über weitere Hilfe dankbar :)

LG

DeddyH 29. Okt 2009 20:18

Re: zur laufzeit erstellte Items löschen und Name zuweisen
 
Das musst Du dann in die Schleife innerhalb des Timers verlagern, siehe mein Beispiel.

Detrox 29. Okt 2009 20:21

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);

DeddyH 29. Okt 2009 20:25

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?

Detrox 29. Okt 2009 20:29

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.
Seite 2 von 3     12 3      

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