AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Abziehen von WS_EX_COMPOSITED = Flicker

Abziehen von WS_EX_COMPOSITED = Flicker

Ein Thema von MicMic · begonnen am 4. Feb 2021 · letzter Beitrag vom 12. Feb 2021
Antwort Antwort
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
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
144 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Abziehen von WS_EX_COMPOSITED = Flicker

  Alt 10. Feb 2021, 17:51
Hi,

ich kann noch nicht so ganz nachvollziehen, was Du genau erreichen willst. In delphi würde ich mit BeginUpdate ... EndUpdate arbeiten.

Tomy
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#3

AW: Abziehen von WS_EX_COMPOSITED = Flicker

  Alt 10. Feb 2021, 18:31
SetRedraw=False ist eine Art von BeginUpdate bzw. DisableControls
und Composited entspricht einem DoubleBuffered.

Also im Prinzip will er wohl "viele" Änderungen machen und dabei das übermäßige Zeichnen unterbinden.


Hast es so mal versucht?
Code:
SetRedraw(False)
SetStyle(GetStyle and not Composited)
SetRedraw(True)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MicMic

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

AW: Abziehen von WS_EX_COMPOSITED = Flicker

  Alt 12. Feb 2021, 21:02
Danke noch für die Tipps.
Hab sehr viel ausprobiert. Auch durch einen Tipp inzwischen mit diesem SetRedraw gearbeitet.
Ob nun SetRedraw, WS_EX_COMPOSITED, DoubleBuffered... ich kam schon an mein Ziel. Null Flackern aber der Aufbau wurde recht langsam. Alles hat so seine Vor- und Nachteile. Letztendlich nutze ich nichts mehr direkt bzw. WS_EX_COMPOSITED entsprechend auf Aktionen. Verarbeite "wm_erasebkgnd" selber und nur in einer Scroll-Aktion wird speziell "WS_EX_COMPOSITED" abgeschaltet. Das kurze Flickern/Flackern mancher Items bekommt man dann gar nicht mit (zumindest in meinem Fall). Das einschalten von WS_EX_COMPOSITED flackert dagegen nicht. Ist halt alles einfacher, wenn man mit den Komponenten nicht so viel macht. Bei einer größeren Anwendung mit viel Source und Möglichkeiten braucht man hier und da schon so manch Zaubertrick. Da hilft es dann nicht mehr, nur DoubleBuffered (als Beispiel) einzuschalten. Ich muss mich aber im großen Ganzen immer herantasten und viel ausprobieren.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:53 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