![]() |
Extremes flimmern (auch mit Doublebuffered) bei PageControls
Und gleich noch was hinterher :roll:
Seit ich D2006 benutze (davor nur D5-D7) flimmern PageControls mit dem Style tsTabs und XP-Style extrem beim wechseln zwischen den Tabs. Doublebuffered hilft hierbei nichts. Ich habe schon vor fast einem Jahr versucht, diesem Problem auf die Schliche zu kommen, schaffte es dann aber nicht, es zu reproduzieren. Nun tritt es bei einem anderen Projekt auf, das ich von D5 auf D2006 bringen wollte (aua). Wenn ich den Style auf tsFlatButtons stellt läuft alles wunderbar :shock: Kennt jemand das Problem bzw. weiß, wie es zu lösen wäre? ... (Langsam aber sicher treibt Borland mich in den Wahnsinn ... vlt. ist das eine Verschwörung?! :mrgreen:) |
Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont
In der VCL wird einfach zu viel über einen Kamm geschert. Das TTabSheet besitzt keine eigenen WM_ERASEBKGND Message-Handler. Somit wird der von TWinControl aufgerufen, der über die Funktion DrawParentBackground zu erst mal ein FillRect(clBtnFace) durchführt und dieses dann mit dem TabBody-Theme übermalt. Dieses doppelte Malen kostet nicht nur Zeit sondern präsentiert sich dem Benutzer als Flackern.
Folgendes ist eine mögliche Implementierung, wie ich sie auch in meinen QualityCentral-Report eingetragen habe.
Delphi-Quellcode:
procedure TTabSheet.WMEraseBkgnd(var Message: TWMEraseBkgnd);
var R: TRect; begin if (PageControl.Style = tsTabs) and ThemeServices.ThemesEnabled and (csParentBackground in ControlStyle) then begin GetWindowRect(Handle, R); OffsetRect(R, -R.Left, -R.Top); ThemeServices.DrawElement(Message.DC, ThemeServices.GetElementDetails(ttBody), R); Message.Result := 1; end else inherited; end; |
Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont
Uii, es hilft *freude*
Danke :thumb: Und auf sowas muss man nun kommen :wall: Naja, hoffentlich behebt Borland das schnell, denn mit selbst geänderten Delphi-Sources ist das immer so 'ne Sache ^^ ... |
Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont
Und wie bekomme ich Delphi dazu, die ComCtrls.dcu neu zu erstellen?
Habe die Änderung eingebaut, das Projekt neu erstellt. Aber die ComCtrls.dcu hat immernoch das alte Datum. Wenn ich die ComCtrls.dcu lösche (damit sie neu erstellt wird), dann meckert der Compiler, dass sie nicht vorhanden ist. |
Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz