2010-09-25 10 views
13

Ich habe ein Formular mit 50 oder mehr Steuerelementen, die ich zur Laufzeit erstellen und hinzufügen. Ich möchte nicht sehen, dann eins nach dem anderen; Ich würde lieber Zeichnung/Start Pufferung am Anfang deaktivieren & dann sehen sie alle auf einmal erscheinen.Wie kann ich die Bildschirmaktualisierung deaktivieren, die viele Steuerelemente aktualisiert?

Ich erinnere mich, dass ich vor etwa 10 Jahren so etwas in BCB gemacht habe, aber vergiss es.

+3

Sie könnten alle diese Steuerelemente auf einem TPanel platzieren und ein-/ausblenden. Aber bist du dir sicher, dass du wirklich 50 Kontrollen brauchst? Vielleicht wärst du besser mit einer einzigen benutzerdefinierten Steuerung, die aus 50 Teilen besteht? Ich habe keine Ahnung, was deine Situation ist, aber nach meiner Erfahrung, wenn jemand eine riesige Anzahl von ähnlichen Steuerelementen zu einem Formular hinzufügt, sollte er/sie sich wirklich ein neues Steuerelement mit einer großen Anzahl von ähnlichen Teilen bauen! –

+0

Guter Punkt (+1), aber es sind nicht immer die gleichen Steuerelemente. Sie werden dynamisch von bestimmten Benutzerwahlen erzeugt, dann kann er sie positionieren. Es gibt eine Save-Option, und es ist die Neuzeichnung bei Load, die mich betrifft. – Mawg

Antwort

36

Ich bin mir nicht sicher, ob es eine Delphi-spezifische Methode gibt, dies zu tun, aber mit der Win32-API geschieht dies über die WM_SETREDRAW Nachricht.

Bearbeiten: Vielen Dank an Ken White und Sertac Akyuz für den folgenden Beispielcode.

+9

+1, ich hoffe, dass Ihre Antwort eine Menge Upvotes schnell genug bekommt, um Antworten mit ['LockWindowUpdate'] zu verhindern (http://msdn.microsoft.com/en-us/library/dd145034%28VS.85%29.aspx)). –

+2

nur aus Neugier, warum? – Mawg

+5

LockWindowUpdate wurde entwickelt, um das Zeichnen für Drag & Drop zu stoppen, es geht ein bisschen weiter als WM_SETREDRAW, weil es Annahmen darüber machen könnte, was der Benutzer tat. Eine Annahme war, dass seit dem Ziehen und Ablegen die Fensterbewegung deaktiviert/ignoriert werden konnte. Sie können weiterhin ein Fenster ziehen, in dem WM_SETREDRAW auf false festgelegt ist. –

9

Ich einfach Visible = False behalten, bis alles nett und bereit ist.

+0

+1 Das ist auch eine Möglichkeit (ich hatte darüber nachgedacht, wollte nur sehen, ob es keinen anderen Weg gab) – Mawg

+5

@Mawg, für die Erstellung von Runtime-Komponenten scheint es so, als halte Visible = False "fühlt sich besser an, während WM_SETREDRAW" fühlt sich "besser für die Aktualisierung einer bereits bestehenden und bereits sichtbaren Kontrolle. –

+0

+1 danke. Ich habe sie beide ausprobiert und es ist 50/50 (ymmv) – Mawg

Verwandte Themen