Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Flackern beim erstellen einer Form vermeiden (https://www.delphipraxis.net/159122-flackern-beim-erstellen-einer-form-vermeiden.html)

manuel.taber 15. Mär 2011 14:31

Flackern beim erstellen einer Form vermeiden
 
Hallo,

habe eine kurze Frage zu Delphi.

Ich habe das Problem, dass beim erstellen einer Form die Anzeige teilweise sehr stark flackert. Nach einigen Analysen habe ich festgestellt, dass beim OnShow Ereignis die Form noch nicht gezeichnet ist.

Ist es irgendwie möglich, die Anzeige so lange zu sperren bis sie vollständig gezeichnet ist?

Danke im voraus
mfg Manuel

alfold 15. Mär 2011 14:45

AW: Flackern beim erstellen einer Form vermeiden
 
So ist es. Erst nach onShow ist das Zeichnen abgeschlossen.
Ich würde aber mal vermuten das Du irgend was nicht richtig machst, so das ein Durchgängiges Zeichnen verhindert wird.

Ansonsten DoubleBuffered := True setzen.

Empfehlung, mal den Code durchsuchen wo und wer da was alles sich behindert!

alfold

manuel.taber 15. Mär 2011 15:24

AW: Flackern beim erstellen einer Form vermeiden
 
Hallo alfold,

vielen dank für deine schnelle Antwort.
Ich habe jetzt Versucht im OnResize ein Application.ProcessMessages einzubauen.
Darum habe ich das Hauptpanel mit folgender Funktion gesperrt:

Code:
procedure LockControl(pWinControl: TWinControl; pLock: Boolean);
begin
  { Uebergebene Komponente wird gesperrt }
  if (pWinControl = nil) or (pWinControl.Handle = 0) then
    Exit;
  if pLock then begin
    SendMessage(pWinControl.Handle, WM_SETREDRAW, 0, 0)
  end else begin
    SendMessage(pWinControl.Handle, WM_SETREDRAW, 1, 0);
    RedrawWindow(pWinControl.Handle, nil, 0,
      RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);
  end;
end;
Es ist zwar jetzt eine Verbesserung da, es gibt aber immer noch ein leichtes flackern.

Gibt es kein Event (z.B. OnFinishPaint) das aufgerufen wird, wenn alles gezeichnet ist?

alfold 15. Mär 2011 15:40

AW: Flackern beim erstellen einer Form vermeiden
 
so wie ich das verstehe(und davon leider wenig) :wink:
rufst du hintereinander das neuzeichnen auf?
einmal um die form zu zeichnen
SendMessage(pWinControl.Handle, WM_SETREDRAW, 1, 0);

und danach noch mal um den rest mit zuzeichnen
RedrawWindow(pWinControl.Handle ......

währe es nicht besser:
mit SendMessage eine WM_PAINT Nachricht an das Fenster senden?

alfold


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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