AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Extrem langsames Aktualisieren großer Anzahl von TLabels?
Thema durchsuchen
Ansicht
Themen-Optionen

Extrem langsames Aktualisieren großer Anzahl von TLabels?

Ein Thema von christian.noeding · begonnen am 29. Sep 2006 · letzter Beitrag vom 30. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#1

Extrem langsames Aktualisieren großer Anzahl von TLabels?

  Alt 29. Sep 2006, 22:19
Hallo Leute

Ich hab irgendwie einen Knoten im Hirn... Meine Anwendung hat bislang schon recht viele Labels, Buttons, etc. Jetzt ist es aber erforderlich, über hundert einzelne Labels zur Laufzeit hinzuzufügen (das klappt) und entsprechend anzuordnen (klappt auch). Die Labels stecken alle in einer Scrollbox.

Nun müssen alle 200 Labels auf einen Schlag mit neuen Caption-Werten beschrieben werden:

Delphi-Quellcode:
  for i:=1 to 200 do
  begin
    label_name[i].Caption:=data.names[i];
    label_wert[i].Caption:=data.value[i];
  end;
Solange die Labels sichtbar sind dauert das eine Ewigkeit (man kann gemütlich verfolgen, welches Label gerade aktualisiert wird ). Erst wenn ich Visible:=False setze rennt das ganze, aber hierdurch flimmert die Ausgabe aber erheblich. Was kann ich machen, damit das Flimmern nicht mehr auftritt, bzw. kann man die langsame Aktualisierung der knapp 200 Labels beschleunigen, ohne sie Unsichtbar zu machen? Das Setzen von DoubleBuffer der Forms hat nicht wirklich was gebracht...

vielen Dank für ein paar Hinweise... die Suche spuckte nicht gerade hilfreiches aus...
Christian Nöding
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:25
Soweit ich weiß sind Labels Areale des Forms und keine eigenen Controls - es sind einfach... Areale, auf die gezeichnet wird. Den Updateprozess in ein
Delphi-Quellcode:
BeginUpdate;
{ ... }
EndUpdate;
zu packen sollte helfen.
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:27
Nunja, aber ich habe "BeginUpdate" und "EndUpdate" nirgends deklariert oder eingebunden... Sind das spezielle Funktionen? Als direkten Aufruf kann ich sie jedenfalls nicht verwenden!?
Christian Nöding
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:31
Achje, Tatsache

Bin einfach zu verwöhnt von SuspendLayout/ResumeLayout aus .net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:31
Form.BeginUpdate; bzw. Form.EndUpdate;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:35
Hmm, das hatte ich schon probiert. Resultat: "Undefinierter Bezeichner: 'BeginUpdate'"

Sicher, dass ich nicht noch was spezielles Einbinden muss? Meine IDE bietet mir nur Form.BeginDrag und Form.BeginAutoDrag an !?
Christian Nöding
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:41
Hallo,

vielleicht hilft ein Blick in diesen Thread.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:46
Ah ich hab nicht nach Control, sondern nur nach Label, Form und Panel gesucht...ich probier das mal aus mit dem hier:

Delphi-Quellcode:
LockWindow(MyPanel.Handle);
MyPanel.Visible := False;
CreateControls;
MyPanel.Visible := True;
UnLockWindow(MyPanel.Handle);

klingt gut


Vielen Dank!
Christian Nöding
  Mit Zitat antworten Zitat
rd5pro
(Gast)

n/a Beiträge
 
#9

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 22:48
Die Labels haben doch ein Parent, auf dem sie platziert sind, oder?

Vielleicht funzt BeginUpdate...EndUpdate mit dem Parent der Labels?

Oder probier mal, das Parent der Labels während des Updates auf visible:=false zu setzen.

Roland
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Extrem langsames Aktualisieren großer Anzahl von TLabels

  Alt 29. Sep 2006, 23:03
Das Parent (also die Scrollbox) bietet mir ebenfalls nicht die BeginUpdate/EndUpdate Prozeduren an :-/


also ich habs jetzt mal so probiert:

Delphi-Quellcode:
LockWindow(scrollbox.Handle);
scrollbox.Visible := False;

for i:=1 to 200 do
  begin
    label_name[i].Caption:=data.names[i];
    label_wert[i].Caption:=data.value[i];
  end;

scrollbox.Visible := True;
UnLockWindow(scrollbox.Handle);
mit

Delphi-Quellcode:
procedure LockWindow(const Handle: HWND);
begin
  SendMessage(Handle, WM_SETREDRAW, 0, 0);
end;

procedure UnlockWindow(const Handle: HWND);
begin
  SendMessage(Handle, WM_SETREDRAW, 1, 0);
  RedrawWindow(Handle, nil, 0,
    RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
end;
Aber es flimmert immer noch, da ich die Werte z.T. mehrfach in der Sekunde ändere. Allerdings ist es subjektiv nicht mehr so schlimm wie vorher...

Ich schau mal, ob ich da noch was besseres finde...
Christian Nöding
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:47 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