Transparente Richtextbox Flackert

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von SplittyDev.

    Transparente Richtextbox Flackert

    Guten Tag,
    ich habe mit einer Klasse eine transparente Richtextbox erstellt. Läuft 1A. Aber jedes mal wenn da ein Text rein geschrieben wird fängt dies an zu Flackern.

    Code:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class TransparentRichTextBox
    3. Inherits RichTextBox
    4. <DllImport("kernel32.dll", CharSet:=CharSet.Auto)> _
    5. Private Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr
    6. End Function
    7. Protected Overrides ReadOnly Property CreateParams() As CreateParams
    8. Get
    9. Dim params As CreateParams = MyBase.CreateParams
    10. If LoadLibrary("msftedit.dll") <> IntPtr.Zero Then
    11. params.ExStyle = params.ExStyle Or &H20
    12. params.ClassName = "RICHEDIT50W"
    13. End If
    14. Return params
    15. End Get
    16. End Property
    17. End Class


    Meine Form hat schon DoubleBuffered auf true. Aber es flackert immer weiter.

    mit freundlichen Grüßen
    Marcel Bengen (DrawCase)
    Vielleicht auch noch beim Control DoubleBuffer auf true setzen?

    VB.NET-Quellcode

    1. Sub New
    2. SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint Or ControlStyles.ResizeRedraw, True)
    3. UpdateStyles()
    4. End Sub
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Okey, dann is das nur GDI+ kompatibel..
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    @SplittyDev:

    In dem von dir verlinkten Thread konnte das Problem durch Me.DoubleBuffered = True gelöst werden...

    Das wurde hier auch schon von @Gather: und @Artentus: vorgeschlagen!
    Ergebnis war: [...] macht die Controls weiß und flackert noch mehr!
    Ich Antworte nach bestem Wissen und Gewissen. Ich übernehme keine Garantie für die Richtigkeit oder Fehlerfreiheit meiner Texte.


    Ich konnte dir helfen?
    - Das ist schön :) Ich würde mich über ein "Hilfreich" freuen ^^
    @misbe:

    Wenn man das genau so macht wie oben beschrieben flackert nichts.

    Außerdem glaube ich kaum, dass DoubleBuffer mal funktioniert und mal nicht,
    noch dazu bei Verwendung des exakt gleichen codes.

    // Edit
    Um noch was konstruktives zum Thema Beizutragen:

    Möglicherweise zeichnet @DrawCase: das Control über ein Bild, das er in den Hintergrund der Form geladen hat.
    Dann buggt alles unter Umständen ziemlich rum.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SplittyDev“ ()

    Könnte am UserPaint liegen. Normalerweise schaltet man das an, weil man fürs OwnerDrawing der DoubleBuffer aktivieren möchte. In dem Fall kann ich aber nicht einschätzen, ob das durchgeführte dann vom System als OwnerDrawing registriert wird. Wenn nämlich nicht, dann hindert dieser Flag das Control am gezeichnet werden.
    @SplittyDev: Ich revidiere mein "Nutzloser Beitrag"! War etwas unüberlegt und idiotisch von mir!

    Du hast recht. Das es bei einem funktioniert und beim anderen nicht ist wohl ein Zeichen dafür, dass da etwas nicht passt!
    Ich Antworte nach bestem Wissen und Gewissen. Ich übernehme keine Garantie für die Richtigkeit oder Fehlerfreiheit meiner Texte.


    Ich konnte dir helfen?
    - Das ist schön :) Ich würde mich über ein "Hilfreich" freuen ^^
    Kannst ja versuchen es beim Textinput zu locken.
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    @misbe: Kein Problem, kommt vor.

    Ich kann nur aus eigener Erfahrung berichten, dass Transparenz das letzte ist,
    was man versuchen sollte, wenn man über nen Hintergrund drüberzeichnet.

    Dafür ist GDI+ einfach nicht leistungsfähig genug.
    Musste ich auch feststellen, während ich ein kleineres Spiel in C# schrieb.