AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Extremes flimmern (auch mit Doublebuffered) bei PageControls
Thema durchsuchen
Ansicht
Themen-Optionen

Extremes flimmern (auch mit Doublebuffered) bei PageControls

Ein Thema von Deep-Sea · begonnen am 20. Dez 2007 · letzter Beitrag vom 29. Jan 2008
Antwort Antwort
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#1

Extremes flimmern (auch mit Doublebuffered) bei PageControls

  Alt 20. Dez 2007, 14:25
Und gleich noch was hinterher

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
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?! )
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont

  Alt 20. Dez 2007, 17:29
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;
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont

  Alt 21. Dez 2007, 08:34
Uii, es hilft *freude*
Danke

Und auf sowas muss man nun kommen Naja, hoffentlich behebt Borland das schnell, denn mit selbst geänderten Delphi-Sources ist das immer so 'ne Sache ^^ ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont

  Alt 29. Jan 2008, 12:58
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Extremes flimmern (auch mit Doublebuffered) bei PageCont

  Alt 29. Jan 2008, 12:59
Zitat von RavenIV:
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.
Kopier die neue ComCtrls.pas in dein Projektverzeichnis bzw. in ein eigenes Verzeichnis das du per Suchpfad aufnimmst.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:32 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