AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Panel mit vielen Buttons baut sich langsam auf
Thema durchsuchen
Ansicht
Themen-Optionen

Panel mit vielen Buttons baut sich langsam auf

Ein Thema von NielsB · begonnen am 4. Mär 2016 · letzter Beitrag vom 31. Jan 2019
Antwort Antwort
Seite 5 von 5   « Erste     345   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#41

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 19. Mär 2016, 13:08
Ich frage mich gerade, ob es vielleicht bringt Gruppen von Komponenten in Frames auszulagern...
Das wäre vermutlich keine so furchtbar große Umstellung, könnte aber das Problem umgehen, dass bei jedem Hinzufügen einer Komponente alle anderen benachrichtigt werden. Ob ein Frame das verhindert, bin ich mir gerade nicht sicher, vermute es aber.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
FarAndBeyond
(Gast)

n/a Beiträge
 
#42

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 19. Mär 2016, 17:31
Zitat:
Danke, das stellt mein Problem super dar. Ich habe die Größe der Buttons angepasst, um meinen PC sichtbar zu beschäftigen, etwa 10000 Stück. Nicht, dass das irgendeinen Sinn hätte, aber man sieht deutlich, wie zunächst nichts passiert, während die Buttons erzeugt werden. Sobald das Label verschwindet, fangen die Buttons an, von unten nach oben zu erscheinen, anstatt alle gleichzeitig angezeigt zu werden.
Echt? Das ist ja schräg...
Kannst du mal das hier ausprobieren: das Sleep(50) kannst du ja auf 5 oder 10 stellen, falls überhaupt notwendig...
(Wenn ich den Code hier fahre, dann werden die einzelnen Buttons sichtbar und relativ langsam von links nach rechts bzw. oben nach unten aufgebaut ohne das Panel1.Show irgend eine Wirkung hätte... ist schließlich von Anfang an sichtbar).

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
  Var
   I: Integer;
   B: TButton;
   myTop, myLeft, countLeft, countTop,
   btnWidth, btnHeight, maxLeft, panMaxH,
   panMaxW: Integer;
 Begin
  btnWidth := 100;
  btnHeight := 100;
  countLeft := 0;
  countTop := 1;
  myTop := 0;
  myLeft :=-100;

  Label1.Show;
  Panel1.Show;
  Form1.Update;
   panMaxH:= (Panel1.ClientHeight Div btnHeight);
   panMaxW:= (Panel1.ClientWidth Div btnWidth);

   For I:= 1 To (panMaxH*panMaxW)
   Do
    Begin
     myLeft:= myLeft +btnWidth;

      If (Panel1.ClientWidth-(countLeft*btnWidth)) < btnWidth
      Then
       Begin
        myLeft := 0;
        myTop := myTop +btnHeight;
        maxLeft := countLeft;
        countLeft:= 0;
        //countTop := countTop +1;
       End;

     B:= TButton.Create(Self);
     B.SetBounds(myLeft, myTop, btnWidth, btnHeight);
     B.Parent:= Panel1;

     countLeft:= countLeft +1;

     Sleep(50);
     Form1.Update;
    End;
  Label1.Hide;
 End;

End.
  Mit Zitat antworten Zitat
NielsB

Registriert seit: 4. Mär 2016
17 Beiträge
 
#43

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 25. Mär 2016, 16:59
Sorry, dass die Antwort etwas verspätet kommt: Mit dem eingebauten Update bauen sich die Buttons von oben nach unten auf, wie die Schleife es erwarten lässt, ohne Update war es von unten nach oben.
Ich habe mich einmal durch den unterliegenden Code debuggt und habe den Grund für meine Probleme entdeckt, jeder Button scheint eine Message zu erzeugen, die nach dem Erzeugen aller Buttons in einer Schleife abgearbeitet werden. Dabei wird für jeden Button die TWinControl.WMPaint Prozedur aufgerufen, die diesen dann auf das Panel zeichnet. Dabei wird jeder Button einzeln gezeichnet, das DoubleBuffered bezieht sich auf den Aufbau eines Buttons und bringt dementsprechend gar nichts.
Man müsste also die WMPaint Aufrufe kombinieren, sodass alle Veränderungen zwischengespeichert werden, bis schließlich der Buffer auf das Display gezeichnet wird.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#44

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 26. Mär 2016, 09:01
Hast du denn einmal ausprobiert wie schnell dieses Programm dort läuft? Bei meinen Tests lief das auch auf langsamen Rechnern gut.
Hier habe ich mal so etwas selbst gezeichnet:
http://www.delphipraxis.net/132375-p...-beta-6-a.html
Das funktionierte auch auf einem alten Rechner problemlos.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
NielsB

Registriert seit: 4. Mär 2016
17 Beiträge
 
#45

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 27. Mär 2016, 12:13
Ich habe die Suchfunktion einmal ausprobiert, dabei werden ja viele Komponenten aus/eingeblendet. Man erkennt dabei auch, dass die Buttons nicht gemeinsam, sondern in mehreren Gruppen gezeichnet werden, was aber keinem erkennbaren Muster folgt. Windows scheint die Aufrufe selbst zu "optimieren".

Ich bin mittlerweile aber auch so weit, dass ich die VCL Styles aufgeben werde, das führt zu nichts. Ohne Styles reicht die Hardware gerade so, dass alles scheinbar ohne Verzögerung erscheint. Wenn sich mit den Windowsthemes noch was machen lassen sollte, werde ich es damit machen und wenn nicht, dann nicht...
  Mit Zitat antworten Zitat
Red-Flash

Registriert seit: 29. Dez 2006
2 Beiträge
 
Delphi 10 Seattle Enterprise
 
#46

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 31. Jan 2019, 10:43
Ich habe auch das Problem (zwar nicht nur Bottons, sondern viele Andere Komponenten) unter Delphi XE10...

Wenn man allerdings alle Komponenten auf einen TIWRegion einfügt, der auf der TForm ist, geht der Aufbau sehr schnell.

Weiß jemand warum ?

Und der TIWRegion verursacht beim Beenden ein Speicherloch.
Wenn man im Projekt ReportMemoryLeaksOnShutdown auf True setzt kommt die Meldung mit dem Speicherloch.
Erst wenn man den TIWRegion aus dem Formular gelöscht UND aus der Usesklausel das ganze IW Gedöns entfernt hat kommt die Meldung nicht mehr...

Weiß da jemand warum ?
Oliver
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#47

AW: Panel mit vielen Buttons baut sich langsam auf

  Alt 31. Jan 2019, 14:35
Hallo,
schau mal in der entsprechenden Unit ganz unten (initialize oder letztes begin/end).
Da wird bestimmt irgendein Cache erzeugt und zum Schluss nicht wieder freigegeben.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 03:31 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