Einzelnen Beitrag anzeigen

MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Abziehen von WS_EX_COMPOSITED = Flicker

  Alt 4. Feb 2021, 18:08
Hallo, es könnte sein, dass es keine Möglichkeit gibt.
Ich optimiere gerade meine ListBox. Ich sende je nach Aktion WM_SETREDRAW mit TRUE oder FALSE. Das geht schneller und besser als:
Delphi-Quellcode:
NewExStyle := GetWindowLong(LB.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED;
SetWindowLong(LB.Handle, GWL_EXSTYLE, NewExStyle);
Aber bei manchen Aktionen nützt mir WM_SETREDRAW nicht (bzw. es geht wohl nicht wegen dem setzen von columns - genau hab ich da noch nicht geschaut). Da wäre wieder WS_EX_COMPOSITED besser. Das kann ich ja machen (das geht ohne Probleme) aber ich muss den Wert wieder abziehen. Das erreiche ich wohl so:
Delphi-Quellcode:
NewExStyle := GetWindowLong(LB.Handle, GWL_EXSTYLE);
SetWindowLong(LB.Handle, GWL_EXSTYLE, NewExStyle and not WS_EX_COMPOSITED);
Aber dann flickert die ListBox 1x auf. Das ist unschön. Habe auch schon "LockWindowUpdate" probiert. Geht leider nicht. Wenn es beim abziehen von WS_EX_COMPOSITED immer 1x flickert, dann nützt mir das ganze anschalten nicht. Ich kann leider nicht WS_EX_COMPOSITED immer an lassen. Dann macht WM_SETREDRAW wieder kein Sinn.

Jemand ne Idee wie ich beim abschalten von WS_EX_COMPOSITED das flickern wegbekomme?
  Mit Zitat antworten Zitat