AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi zur laufzeit erstellte Items löschen und Name zuweisen
Thema durchsuchen
Ansicht
Themen-Optionen

zur laufzeit erstellte Items löschen und Name zuweisen

Ein Thema von Detrox · begonnen am 29. Okt 2009 · letzter Beitrag vom 29. Okt 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#11

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

  Alt 29. Okt 2009, 18:46
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Detrox

Registriert seit: 26. Okt 2009
59 Beiträge
 
#12

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

  Alt 29. Okt 2009, 19:13
Ich bin gerade am rumbasteln ich melde mich wieder


Danke schonmal werd mir das zu gemüte führen man lernt nie aus
  Mit Zitat antworten Zitat
Detrox

Registriert seit: 26. Okt 2009
59 Beiträge
 
#13

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

  Alt 29. Okt 2009, 19:20
Super habs soweit auch kapiert, nur einwas versteh ich nicht was soll das bedeuten?

if FWait mod 10 = 0 then Sry wenn ich mich ein bisschen dumm anstelle aber ich möchte auch verstehn was ich da mache
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#14

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

  Alt 29. Okt 2009, 19:23
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#15

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

  Alt 29. Okt 2009, 19:24
Zitat von Detrox:
Super habs soweit auch kapiert, nur einwas versteh ich nicht was soll das bedeuten?

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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Detrox

Registriert seit: 26. Okt 2009
59 Beiträge
 
#16

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

  Alt 29. Okt 2009, 20:17
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:
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#17

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

  Alt 29. Okt 2009, 20:18
Das musst Du dann in die Schleife innerhalb des Timers verlagern, siehe mein Beispiel.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Detrox

Registriert seit: 26. Okt 2009
59 Beiträge
 
#18

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

  Alt 29. Okt 2009, 20:21
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);
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#19

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

  Alt 29. Okt 2009, 20:25
Mir scheint, Du hast das Beispiel doch noch nicht so ganz begriffen. Sind in FShapes jetzt Deine TImages drin? Und was ist createitem?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Detrox

Registriert seit: 26. Okt 2009
59 Beiträge
 
#20

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

  Alt 29. Okt 2009, 20:29
Ja hab das nur noch nicht umbenannt hab Images erstellt anstatt Shapes, funktioniert auch alles SUper !

createimage
createitem := TImage.Create(nil);
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 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