Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Bei DoubleBuffered im RichEdit ist die Schrift weg
GruppeCN - Fr 20.07.07 17:21
Titel: Bei DoubleBuffered im RichEdit ist die Schrift weg
Hallo Delphianer!
Wenn ich bei einem TRichEdit die Eigenschaft DoubleBuffered auf true setze, verschwindet auf einmal die Schrift. Kann mir jemand sagen, warum und was man dagegen tun kann?
Danke schonmal :)
GruppeCN - Fr 20.07.07 18:13
okay, hab soeben in der Hilfe die Lösung gefunden:
Zitat: |
Note: Some controls, such as TRichEdit, can’t paint themselves into a bitmap. For such controls, DoubleBuffered must be set to false. |
Nur die Frage ist, was man dann gegen das Flackern im RichEdit unternehmen kann?
Lannes - Fr 20.07.07 18:19
Hallo,
ich habe schon viel mit dem RichEdit veranstaltet, aber zum Flackern konnte ich es noch nie bewegen.
Wann tritt das denn auf? Was wird ausgeführt?
GruppeCN - Fr 20.07.07 19:12
Naja, im Prinzip versuche ich mich gerade an einem erweiterten RichEdit, das über Syntax Highlighting verfügt. Dabei hab ich zum einen links ein Rechteck reingezeichnet, auf dem die Zeilennummern angezeigt werden. Außerdem ist aktuell die Routine noch in Arbeit, deshalb aktualisiere ich einfach immer den ganzen Inhalt, d.h. zuerst wird der gesamte Inhalt selektiert und auf die Standardeinstellungen zurückgesetzt und dann eingefärbt. Selbst ohne enthaltene Tags oder so, also so, dass der Text einfach normal schwarz ist, flackert es leicht, wenn ich einfach schnell auf der Tastatur rumhacke.
Um das zu unterbinden habe ich in einem ersten Schritt bereits vor dem aktualisieren das Neuzeichnen per LockWindowUpdate(Handle); unterbunden.
Ich hab den aktuellen Stand einfach mal angehängt.
GruppeCN - Sa 21.07.07 16:31
Ja, da bin ich auch schon drauf gestossen. Quasi genauso mach ich das auch, aber ich bin mir nicht sicher, ob sich das Flackern abstellt, wenn die Routine erstmal fertig ist.
Mittlreweile hab ich links noch eine Leiste für die Zeilennummerierung hinzugefügt. Die flackert aber ganz besonders. Prinzipiell aber kommt mir das merkwürdig vor, weil ich ja schließlich das Neuzeichnen abschalte, dann im RichEdit die Änderungen vornehme und dann das Neuzeichnen wieder aktiviere und die Komponente neuzeichne. Also sollte die Komponente ja quasi 1 mal pro Tastenanschlag neu gezeichnet werden. Auch wenn ich nur einen kleinen Teil des Textes einfärbe ohne vorher den Rest zurückzusetzen muss die Komponente doch mindestens 1 mal neugezeichnet werden, also dürfte da doch prinzipiell kein Unterschied sein?
Ich hab mal den aktuellen Stand und den Quellcode angehängt. Ich benutzte Delphi 7 Enterprise aber nur Standardkomponenten.
Lannes - Di 24.07.07 09:40
Hallo,
hab mich jetzt mal etwas näher damit befasst.
Der Bereich des Gutters wird in WMPaint durch inherited gezeichnet und dann nochmal über den Gutter-Zeichnencode, daher das Flackern.
Versuche durch Abfangen von WM_ERASEBKGND haben auch keine Verbesserung gebracht.
Ob man das RichEdit dazu bringen kann, nur den Bereich außerhalb des Gutters zu zeichenen?, kA :(
Spricht irgendwas dagegen die Gutterdarstellung auf einer anderen Komponente zu realisieren? z.B.
DELPHI PAGES: Richedit and lines numbers. [
http://www.delphipages.com/threads/thread.cfm?ID=108158&G=108148] (gerade getestet, funktioniert).
GruppeCN - Mi 25.07.07 18:31
Danke erstmal für die Arbeit, die du dir gemacht hast :)
Prinzipiell spricht nichts dagegen, das auf eine andere Komponente auszulagern. Leider dürfte dann immer noch ein Flackern des Textes übrig bleiben, das man so fast nicht wahrnimmt, weil eben der blaue Balken viel stärker flackert.
Ich versuch mich aber erstmal daran, die Geschichte mit der Nummerierung vom RichEdit zu trennen.
Lannes - Mi 25.07.07 18:48
Hallo,
eventuell hilft Dir der Einbau von BeginPaint und EndPaint weiter.
GruppeCN - Do 26.07.07 17:27
ähm, was meinst du? Prinzipiell hab ich ja das Neuzeichnen gestoppt, bis ich alles fertig hab.
Lannes - Do 26.07.07 17:34
Hallo,
also Deinen kompletten Code habe ich mir nicht bis ins letzte Detail reingezogen, sucht man im Inet nach Flackern und WM_PAINT dann werden immer wieder BeginPaint und EndPaint erwähnt. Daher mein Vorschlag diesbezgl.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!