Autor Beitrag
GruppeCN
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: Fr 20.07.07 17:21 
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 :)

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: 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?

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: 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.
Einloggen, um Attachments anzusehen!
_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 20.07.07 23:01 
Hallo,

mit einer exe kann man wenig anfangen.

Bei jeder Änderung alles zurück setzen und dann wieder alles Formatieren, da ist es kein Wunder wenn es flackert. Nehme an, wenn Du die Routine zur gezielten Formatierung fertig hast, wird sich das anders darstellen.

Kennst Du das Tutorial?:
RichEdit, Schlüsselwort-Syntaxhighlighting

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: Sa 21.07.07 16:31 
user profile iconLannes hat folgendes geschrieben:
Kennst Du das Tutorial?:
RichEdit, Schlüsselwort-Syntaxhighlighting

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.
Einloggen, um Attachments anzusehen!
_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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. (gerade getestet, funktioniert).

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: 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.

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 25.07.07 18:48 
Hallo,

eventuell hilft Dir der Einbau von BeginPaint und EndPaint weiter.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
GruppeCN Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 322



BeitragVerfasst: Do 26.07.07 17:27 
ähm, was meinst du? Prinzipiell hab ich ja das Neuzeichnen gestoppt, bis ich alles fertig hab.

_________________
Warum sind die Sachen, die du suchst, immer da, wo du zuletzt nachsiehst?
Weil du aufhörst zu suchen, wenn du sie gefunden hast.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )