AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte zur Laufzeit erstellen und löschen

Ein Thema von bwolf · begonnen am 12. Jul 2006 · letzter Beitrag vom 12. Jul 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Objekte zur Laufzeit erstellen und löschen

  Alt 12. Jul 2006, 20:37
Zitat von Peinhard:
Zitat von Khabarakh:
Auch eine while-Schleife würde nichts ändern. Es wird zwar keine Exception ausgelöst, aber lediglich jedes zweite Item gelöscht.
Das hab' ich so pauschal auch nicht behauptet
Aber auch nicht verneint, also habe ich verneint .

Es gäbe auch noch eine Alternative, bei der die Schleifenrichtung irrelevant ist, allerdings auch wieder etwas ineffektiver:
Delphi-Quellcode:
for i := 0 to List.Count - 1 do
  ThrowIntoGarbage(List[0]);
[edit]Entspricht der Lösung von jbg weiter oben. [/edit]

PS: Das halte ich für einen groben Designfehler in der VCL. Mit einer einfachen Control-Collection-Klasse würde ein "Controls.Clear" genügen und alle wären zufrieden.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#12

Re: Objekte zur Laufzeit erstellen und löschen

  Alt 12. Jul 2006, 20:42
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  while Panel1.ControlCount > 0 do
  begin
      showmessage(Panel1.Controls[0].name);
      Panel1.Controls[0].free;
      Application.ProcessMessages;
  end;
end
Was haltet ihr denn von dieser Lösung ...

Da braucht kein Compiler irgendwas optimieren und die Diskussionen werden gespart

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#13

Re: Objekte zur Laufzeit erstellen und löschen

  Alt 12. Jul 2006, 21:07
Zitat von Khabarakh:
Zitat von Peinhard:
Das hab' ich so pauschal auch nicht behauptet
Aber auch nicht verneint, also habe ich verneint .
Aber die pauschale Verneinung ist ja auch wieder nicht richtig!

Und dein sowie das Beispiel von Rufo Sir zeigt zu allem Überfluss auch noch, daß es doch 'von vorne' geht, und zwar sowohl mit while als auch mit for. Halten wir doch für die interessierte Nachwelt fest, daß man von vorne nie das 'i-te', sondern immer nur das '0-te' Element wegwuschen darf - am effektivsten aber ist und bleibt for 'von hinten', da sich die Liste dabei nicht ständig neu justieren muß und keine while-Bedingung bei jedem Durchlauf neu geprüft werden muß.

Feierabend!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: Objekte zur Laufzeit erstellen und löschen

  Alt 12. Jul 2006, 23:57
Zitat von Sir Rufo:
Da braucht kein Compiler irgendwas optimieren und die Diskussionen werden gespart
Das ist aber von der Ausführungsgeschwindigkeit die langsamste Variante, da er so mit jedem gelöschten Element erstmal alle nachfolgenden Elemente eins nach vor schieben muss. Dieser Weg ist am uneffektivsten. Wenn, dann so und es läuft auch schnell ab:

Delphi-Quellcode:
  while Panel1.ControlCount > 0 do
  begin
    showmessage(Panel1.Controls[Pred(Panel1.ControlCount)].name);
    Panel1.Controls[Pred(Panel1.ControlCount)].free;
    Application.ProcessMessages;
  end;
/EDIT: Hat Peinhard ja doch schon erwähnt...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:17 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