Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit überzeichneter Textausgabe bei JvLinkLabel (https://www.delphipraxis.net/122700-problem-mit-ueberzeichneter-textausgabe-bei-jvlinklabel.html)

Assertor 20. Okt 2008 21:11


Problem mit überzeichneter Textausgabe bei JvLinkLabel
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo Mitstreiter,

Ich ein kleines Problem mit dem TJvLinkLabel aus den JEDIs: Ich sehe bei den Links immer einen leichten Versatz zur Runtime wenn der Link mal "Hot" oder "Clicked" war.

Ich habe schon die ganze Komponente auseinander genommen. Die Rect-Werte für die Ausgabe stimmen zu 100%. Es scheint also ein Problem zu geben, wenn TextOut mit den selben Koordinaten erneut den gleichen Text jedoch mit anderer Farbe ausgibt.

Das ganze ist in den Screenshots zu sehen.

ClipBoard01.png = Link vor dem MouseOver
ClipBoard02.png = Link während Mouse darüber ist
ClipBoard03.png = Link nach dem MouseOver

Zumindest ClipBoard03.png sollte ja wieder wie ClipBoard01.png aussehen.

Das ganze trifft auch auf die ältere TJvLinkLabel (noch vor der JEDI-Donation) bei Torry zu. Die Ausgabefunktionen scheinen soweit ich sehen kann alle korrekt zu sein.

Weiß da jemand aus dem Stehgreif etwas? Im MSDN hab ich nichts zu Problemen mit TextOut gefunden.

Gruß Assertor

Namenloser 20. Okt 2008 21:33

Re: Problem mit überzeichneter Textausgabe bei JvLinkLabel
 
Hallo,

ich denke mal, der Effekt tritt auf, weil die halbtransparenten Kanten des Textes, der durch das Antialiasing entsteht, immer wieder überzeichnet werden. Die einzige Lösung wäre meiner Meinung nach, den Bereich vorher mit der Hintergrundfarbe zu übermalen, bzw bei transparentem oder mehrfarbigem Hintergrund den Bereich mit InvalidateRect zum Neuzeichnen zu zwingen.

Das ist übrigens nicht nur ein JEDI-Problem, z.B. beim Instant-messenger Miranda wird durch eine Größenänderung des Fensters der Text in der Statusleiste überzeichnet. Da warte ich auch schon ewig auf einen Patch.

Assertor 20. Okt 2008 21:56

Re: Problem mit überzeichneter Textausgabe bei JvLinkLabel
 
Hi NamenLozer,

Zitat:

Zitat von NamenLozer
ich denke mal, der Effekt tritt auf, weil die halbtransparenten Kanten des Textes, der durch das Antialiasing entsteht, immer wieder überzeichnet werden. Die einzige Lösung wäre meiner Meinung nach, den Bereich vorher mit der Hintergrundfarbe zu übermalen, bzw bei transparentem oder mehrfarbigem Hintergrund den Bereich mit InvalidateRect zum Neuzeichnen zu zwingen.

Ja, das mit dem Antialiasing hab ich auch schon vermutet. Das Problem mit dem InvalidateRect ist bei der JvLinkLabel Komponente das alles über Interfaces gelöst ist. Durch die hohe Abstraktion hab ich keinen Zugriff auf Eltern-Elemente der GraphicControl.

Falls Jemandem noch speziell zum JvLinkLabel eine Idee kommt, wäre ich froh.

Gruß Assertor

Assertor 20. Okt 2008 22:39

Re: Problem mit überzeichneter Textausgabe bei JvLinkLabel
 
Hi,

Danke nochmal für das Brainstorming, Namenlozer. Ich hab es jetzt gelöst bekommen.

Für alle, die die Lösung irgendwann mal interessiert: TJvCustomLinkLabel.ActivateLinkNodeAtPos und TJvCustomLinkLabel.DeactivateActiveLinkNode anpassen. Inhalt des Parent für Transparenz auf ein übliches Buffer-Bitmap kopieren, dann die Ausgabe darauf und zum Schluß ein BitBlt.

An sich ganz einfach, war wohl irgendwie der Wurm drin ;)

Gruß Assertor


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:18 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