AGB  ·  Datenschutz  ·  Impressum  







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

Controls wärend der Laufzeit ENTFERNEN.

Ein Thema von tomate007 · begonnen am 12. Nov 2007 · letzter Beitrag vom 12. Nov 2007
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 13:56
Du kannst einfach über alle Komponenten in deiner ScrollBox (rückwärts) iterieren und die gefundenen Edit- und Label-Komponenten freigeben. Wenn sich da keine anderen Komponenten befinden, geht das sogar ohne Typprüfung. Auf jeden Fall wird so das mehrfache Durchgehen der Liste via FindComponent vermieden. Dass auch Free() nicht ganz ohne Kosten ist, versteht sich von selbst.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 14:06
Zitat von tomate007:
Eine Liste ist nicht zu machen, der Kunde MÖCHTE vorne nen Label mit der Spaltenüberschrift und dahinter dann ein Edit.
Controls sind nun mal nicht gedacht, als Liste missbraucht zu werden. Bei einigen Zeilen mag dies noch gehen, aber irgendwann ist der Overhead den die Controls erzeugen so extrem, dass kein PC der Welt da noch schnell genug wäre. (Eine Möglichkeit wäre noch, nur so viele Controls zu erzeugen, wie sichtbar sind. Und beim "scrollen" immer wieder mit dem Daten füllen...)
Kunden haben in der Regel nicht viel Ahnung von Softwareentwicklung, darum kommen sie ja zu "uns". Du schreibst einem Maurer auch nicht vor, wie er den Mörtel zu verarbeiten hat - denn er sollte es am besten wissen. Also falls die Daten über ein (tief liegendes) Maximum reichen, musst du wohl deinem Kunden klar machen, das diese Lösung so nicht praktikabel ist. Man kann auch ohne all zu großen Aufwand Listen erstellen, die sich optisch kaum von einer "Label-Edit"-Lösung unterscheiden, aber extrem viel mehr Performance haben ...

[edit] Falls du Align nutzt, mache auf jeden Fall DisableAlign und EnableAlign! [/edit]
Chris
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#13

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 14:40
Zitat von marabu:
Du kannst einfach über alle Komponenten in deiner ScrollBox (rückwärts) iterieren und die gefundenen Edit- und Label-Komponenten freigeben. Wenn sich da keine anderen Komponenten befinden, geht das sogar ohne Typprüfung. Auf jeden Fall wird so das mehrfache Durchgehen der Liste via FindComponent vermieden. Dass auch Free() nicht ganz ohne Kosten ist, versteht sich von selbst.
Das hört sich doch gut an... ich bräuchte ne prozedur die ALLE Componenten auf der ScrollBox entfernt mit .free... ist das dann schneller??? Also... deine idee ist super denn ich habe da nicht andere Componenten drauf.

Könntest du/ihr mir sagen wie ich das machen kann?? kann ich sowas wie

On all Objects in ScrollBox do .free

^^

ich weiß... warscheinlich zu einfach


Zitat von Deep-Sea:
Controls sind nun mal nicht gedacht, als Liste missbraucht zu werden. Bei einigen Zeilen mag dies noch gehen, aber irgendwann ist der Overhead den die Controls erzeugen so extrem, dass kein PC der Welt da noch schnell genug wäre. (Eine Möglichkeit wäre noch, nur so viele Controls zu erzeugen, wie sichtbar sind. Und beim "scrollen" immer wieder mit dem Daten füllen...)[...]

[edit] Falls du Align nutzt, mache auf jeden Fall DisableAlign und EnableAlign! [/edit]

Also der Kunde ist ein interner Mitarbeiter und MÖCHTE ES SO HABEN ohne wenn und aber. Und da ich in der Ausbildung bin hab ich nichts zu melden und muss es halt so machen....

Ach ja... ist alles nicht so einfach ^^

Bin ja froh das ihr mir helft.

MFG
Andre
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#14

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 14:48
Zitat von tomate007:
On all Objects in ScrollBox do .free
Delphi-Quellcode:
With ScrollBox123 do
  While ControlCount > 0 do Controls[0].Free;
Zitat von tomate007:
Also der Kunde ist ein interner Mitarbeiter und MÖCHTE ES SO HABEN ohne wenn und aber. Und da ich in der Ausbildung bin hab ich nichts zu melden und muss es halt so machen....
Dann muss er damit leben, das es pro Aktualisierung 2 Minuten dauert
(Oder eben nur so viele Controls erzeugen, wie sichtbar sind und dynamisch beim scrollen laden ...)
Chris
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#15

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 15:00
Zitat von Deep-Sea:
Zitat von tomate007:
On all Objects in ScrollBox do .free
Delphi-Quellcode:
With ScrollBox123 do
  While ControlCount > 0 do Controls[0].Free;
Zitat von tomate007:
Also der Kunde ist ein interner Mitarbeiter und MÖCHTE ES SO HABEN ohne wenn und aber. Und da ich in der Ausbildung bin hab ich nichts zu melden und muss es halt so machen....
Dann muss er damit leben, das es pro Aktualisierung 2 Minuten dauert
(Oder eben nur so viele Controls erzeugen, wie sichtbar sind und dynamisch beim scrollen laden ...)

DANKÖÖÖÖÖÖÖÖSCHÖÖÖNNN

Es funktioniert!!!!!


Ich danke euch allen....
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#16

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 15:01
Zitat von tomate007:
Delphi-Quellcode:
     if pruefung = true then begin
     for i:= 1 to AnzahlSpalten-1 do begin
     TEdit(Scrollbox1.FindComponent('Edit'+ IntToStr(i))).Free;
     TLabel(Scrollbox1.FindComponent('Label'+ IntToStr(i))).Free;
     end;
     end;
SO GEHT DAS NICHT
wenn du die erste gelöscht hast gibt es die letze schon nicht mehr.

machs so
Delphi-Quellcode:
     if pruefung = true then
     begin
       for i:= AnzahlSpalten-1 downto 1 do
       begin
         TEdit(Scrollbox1.FindComponent('Edit'+ IntToStr(i))).Free;
         TLabel(Scrollbox1.FindComponent('Label'+ IntToStr(i))).Free;
       end;
     end;
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#17

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 15:04
Zitat von QuickAndDirty:
Zitat von tomate007:
Delphi-Quellcode:
     if pruefung = true then begin
     for i:= 1 to AnzahlSpalten-1 do begin
     TEdit(Scrollbox1.FindComponent('Edit'+ IntToStr(i))).Free;
     TLabel(Scrollbox1.FindComponent('Label'+ IntToStr(i))).Free;
     end;
     end;
SO GEHT DAS NICHT
wenn du die erste gelöscht hast gibt es die letze schon nicht mehr.
Oh doch das geht. Nur weil man "Edit1" freigibt, bleibt "Edit5" immer noch "Edit5" Er greift ja nicht über einen Index auf die Komponente zu, sondern über den Namen ...
Chris
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#18

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 15:04
Eine andere Idee wäre es gewesen, im Hintergrund eine ObjectList zu benutzen.
Beim Erzeugen Deiner Controls packst Du einfach eine Referenz in diese Liste und beim Freigeben musst Du dann nur einmal durch diese Liste durchrennen und alle Controls freigeben, die da drin stecken.

Somit ersparst Du Dir auch das FindComponent.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#19

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 15:06
Zitat von Phoenix:
Eine andere Idee wäre es gewesen, im Hintergrund eine ObjectList zu benutzen.
Beim Erzeugen Deiner Controls packst Du einfach eine Referenz in diese Liste und beim Freigeben musst Du dann nur einmal durch diese Liste durchrennen und alle Controls freigeben, die da drin stecken.

Somit ersparst Du Dir auch das FindComponent.
Da sich in der ScrollBox eh nur die besagten Komponenten befinden, ist das nun nicht mehr nötig


Zitat von tomate007:
Es funktioniert!!!!!
Was hast du erwartet?!
Chris
  Mit Zitat antworten Zitat
tomate007

Registriert seit: 1. Apr 2007
46 Beiträge
 
#20

Re: Controls wärend der Laufzeit ENTFERNEN.

  Alt 12. Nov 2007, 15:15
also jungs... es funktioniert alles mit:

Delphi-Quellcode:
With ScrollBox123 do
  While ControlCount > 0 do Controls[0].Free;
und zwar ist es so das alle Componenten die gelöscht werden sollen sich soweso in ScrollBox123 befinden.

Von daher klappt es super...



Zitat von QuickAndDirty:
Zitat von tomate007:
Delphi-Quellcode:
     if pruefung = true then begin
     for i:= 1 to AnzahlSpalten-1 do begin
     TEdit(Scrollbox1.FindComponent('Edit'+ IntToStr(i))).Free;
     TLabel(Scrollbox1.FindComponent('Label'+ IntToStr(i))).Free;
     end;
     end;
SO GEHT DAS NICHT
wenn du die erste gelöscht hast gibt es die letze schon nicht mehr.

machs so
Delphi-Quellcode:
     if pruefung = true then
     begin
       for i:= AnzahlSpalten-1 downto 1 do
       begin
         TEdit(Scrollbox1.FindComponent('Edit'+ IntToStr(i))).Free;
         TLabel(Scrollbox1.FindComponent('Label'+ IntToStr(i))).Free;
       end;
     end;
Genau, wie Deep-Sea schon geschrieben hat geh ich da auf den Namen und nicht auf den Index, nur natürlich war dies zu langsam da ich die FindComponent-Sache mit drin hatte welche, wie ich es heut gelernt habe, sehr sehr langsam ist.

Würde jedem empfehlen der viele Componenten, dass er einfach nen panel macht und da die dinger drauf setzt die entfernt werden sollen und dann halt mit dem Code oben die Objects löscht.

Zitat von Deep-Sea:
Zitat von tomate007:
Es funktioniert!!!!!
Was hast du erwartet?!
Naja... das es klappt wenn der Code schon von einem Deep-Sea kommt dann muss er ja klappen


Also nochmal


ICH DANKE EUCH ALLEN!!!!

MFG
Andre

@Mod Thema kann geschlossen werden von meiner Seite aus.
  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 09:55 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