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

VB.NET - Ein- und Umsteiger
Re: Textausrichtung auf Baseline 
Autor: Kalli
Datum: 24.02.16 09:45

Nach vielen Jahren mal wieder
Ich musste dieses Problem wieder angehen und habe es für mich endlich lösen können (allerdings mithilfe von VB Net 2015, das sicher auch in diesem Bereich gegenüber VB Net 2008 einiges Neue anzubieten hat).
Es geht darum in einer Picture Box eine Textzeile mit verschiedenen Fonts und Textgrößen so auszugeben, dass der gesamte Text auf seiner Baseline ausgerichtet wird.
Dazu dient diese Funktion: (ich habe hier ganz bewusst auf alles verzichtet, was den Code komplizieren könnte)
Public Function ybase(fo As Font, y As Single) As Integer
        Dim py As Integer, fs As FontStyle = fo.Style, ff As FontFamily = _
          fo.FontFamily
        'den Umrechnungsfaktor von Points auf Pixel bestimmen
        Dim korr As Single = fo.GetHeight() / fo.FontFamily.GetLineSpacing(fs)
        'über GetCellAscent den Abstand zur Baseline bestimmen und auf Pixel 
        ' umrechnen (*korr)
        py = y - ff.GetCellAscent(fs) * korr
        'bestimmt den Y-Wert der Textausgabe in Pixeln so, dass der Text auf 
        ' Höhe seiner Baseline ausgegeben wird
        Return py
End Function
Die Textausgabe könnte dann z.B. so aussehen: ("inhalt" ist die Picturebox, e.X,e.Y die Mauskoordinaten für die Textausgabe also z.B. bei Inhalt_Mouseup(......)

 
        Dim fo As New Font("Times New Roman", 20, FontStyle.Bold Or _
          FontStyle.Italic)
        Dim fo1 As New Font("Mistral", 80, FontStyle.Regular Or _
        FontStyle.Underline)
        Dim s As String = "Hallo Kallegogo"
        Dim g As Graphics = inhalt.CreateGraphics()
        g.PageUnit = GraphicsUnit.Pixel
        Dim b As Brush = Brushes.Black
        Dim py As Integer = ybase(fo, e.Y) 'Auf Baseline korrigieren
        Dim py1 As Integer = ybase(fo1, e.Y)'auf Baseline korrigieren
        g.DrawString(s, fo, b, New Point(0, py))
        g.DrawString(s, fo1, b, New Point(200, py1))
        ff.Dispose()
        fo.Dispose()
        fo1.Dispose()
Ich hatte im Netz etliches dazu gefunden, aber überwiegend sehr komplizierten Code im Zusammenhang mit diversen Browsern und nur einen Lösungsansatz wie in der obigen Funktion, der allerdings ein falsches Ergebnis lieferte.

Dont debug, because there will allways be one more bug

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Textausrichtung auf Baseline1.928Kalli05.01.08 20:14
Re: Textausrichtung auf Baseline1.376cookstdu06.01.08 08:32
Re: Textausrichtung auf Baseline1.260Kalli06.01.08 10:17
Re: Textausrichtung auf Baseline1.460Kalli07.01.08 17:41
Re: Textausrichtung auf Baseline1.297ModeratorFZelle07.01.08 17:49
Re: Textausrichtung auf Baseline1.613Kalli07.01.08 20:45
Re: Textausrichtung auf Baseline1.538ModeratorFZelle07.01.08 22:01
Re: Textausrichtung auf Baseline1.118Kalli24.02.16 09:45

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