vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
OwnerDraw Textbox zeichnet Cursor falsch 
Autor: icolor
Datum: 30.05.11 10:19

Hallo,

ich entwickle gerade eine komplett selbst gezeichnete Textbox. Sieht so weit auch schon sehr gut aus. Allerdings habe ich hierbei ein kleines Problem.

Ich zeichne den Text wie folgt:
    Public Sub Text(ByVal g As Graphics, ByVal ClientRectangle As Rectangle, _
      ByVal Text As String, ByVal TextAlign As ocl.AlignmentHorizontal, ByVal _
      Font As Font, ByVal Color As Color)
 
        Dim Pos As New Point(0, 0)
 
        Dim flags As TextFormatFlags = TextFormatFlags.NoPadding
        Dim proposedSize As Size = New Size(Integer.MaxValue, Integer.MaxValue)
        Dim SizeF As SizeF = g.MeasureString(Text, Font)
        Dim Size As Size = TextRenderer.MeasureText(g, Text, Font, _
          proposedSize, flags)
 
        Select Case TextAlign
            Case ocl.AlignmentHorizontal.Left
                Pos.X = ClientRectangle.X
            Case ocl.AlignmentHorizontal.Middle
                Pos.X = CSng(ClientRectangle.X + ClientRectangle.Width / 2.0 - _
                  Size.Width / 2)
            Case ocl.AlignmentHorizontal.Right
                Pos.X = ClientRectangle.Right - Size.Width
        End Select
        Pos.Y = ClientRectangle.Y + CSng(ClientRectangle.Height / 2.0 - _
          Size.Height / 2.0) 'Mitte
 
        Dim rect As Rectangle = New Rectangle(Pos, Size)
        TextRenderer.DrawText(g, Text, Font, Pos, Color.Black, flags)
 
    End Sub
und jetzt möchte ich einen Cursor darüber malen, der sich wenn ich die Tasten nach links und rechts bewege darüber gezeichnet wird:
    Public Sub Cursor(ByVal g As Graphics, ByVal Rectangle As Rectangle, ByVal _
      Color As Color, ByVal State As Boolean)
 
        If State = False Then
            'sichtbar aber transparent
            Color = Color.FromArgb(128, Color.Gray)
        End If
 
        g.FillRectangle(New SolidBrush(Color), Rectangle)
 
    End Sub
Was mir Probleme bereitet ist die Ermittlung der genauen Cursoposition:
    Private Function GetCursorCaret(ByVal g As Graphics, ByVal ClientRectangle _
      As Rectangle, ByVal Font As Font) As Rectangle
 
        Dim Location As Point
        Dim proposedSize As Size = New Size(Integer.MaxValue, Integer.MaxValue)
        Dim flags As TextFormatFlags = TextFormatFlags.NoPadding
        Location = ClientRectangle.Location
 
        Dim X As Integer = 0
        Dim T As String = ""
        If SelectStart > 0 Then
            T = Caption.Substring(0, SelectStart)
            'X = CInt(g.MeasureString(T, Font).Width)
            Location.X = TextRenderer.MeasureText(T, Font, proposedSize, _
              flags).Width
            Location.X = Location.X + X
        End If
 
        GetCursorCaret = New Rectangle(Location, New Size(3, _
          ClientRectangle.Height))
 
    End Function
Der Cursor steht nie direkt hinter dem Buchstaben, sondern "optisch gesehen" an einer völlig falschen Position.

Weiß jemand Rat?
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
OwnerDraw Textbox zeichnet Cursor falsch1.349icolor30.05.11 10:19
Re: OwnerDraw Textbox zeichnet Cursor falsch944icolor30.05.11 11:25
Re: OwnerDraw Textbox zeichnet Cursor falsch885wb-soft30.05.11 22:35

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel