vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Linie zeichnen mit zentrierter Beschriftung 
Autor: mullfreak
Datum: 24.09.08 08:45

Hallo,

ich will eine Linie zeichnen an der zentriert ein Buchstabe steht.
Linie zeichnen ist kein Thema. DrawString ist kein Thema.
Nur wie kann ich beides verbinden?

Gruß und danke.

Mull
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linie zeichnen mit zentrierter Beschriftung 
Autor: bauer
Datum: 24.09.08 09:47

Aus den beiden Endpunkten läßt sich der Mittelpunkt der Linie berechnen. Hier muss der Text ansetzen.

Stellt sich nur noch die Frage, ob der Text immer waagerecht an der Linien steht oder z.B. bei schrägen Linien der Text gedreht hin muss, genauer: Die Steigung / Drehwinkel der Linie haben soll.

Danach richtet sich dann, ob zuvor evtl. noch eine Rotation vom Koordinatensystem notwendig ist.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linie zeichnen mit zentrierter Beschriftung 
Autor: mullfreak
Datum: 24.09.08 10:14

Hallo bauer,

vielen Dank für den Hinweis. Bis jetzt hab ich leider noch keine Ahnung wie ich das machen soll. Ich google jetzt mal rum, wird sich schon was finden.

Die Rotation des Koordinatensystems wäre kein Problem. Das hab ich schon mal gemacht.

Gruß
Mull
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linie zeichnen mit zentrierter Beschriftung 
Autor: bauer
Datum: 24.09.08 10:33

Sofern die Steigung der Geraden sich nicht auf den Text vererben soll, dann in etwa wie folgt.

Sofern der Text quasi parallel zur Geraden stehen soll, dann Steigung ausrechen der Geraden und als Drehwinkel in eine Koordinatentransformaation vor dem Stringzeichnen reinstecken.


 Private Sub Form1_Paint(ByVal sender As Object, ByVal e As _
   System.Windows.Forms.PaintEventArgs) Handles Me.Paint
 
        LinieMitText(e.Graphics, New Point(10, 10), New Point(220, 410))
 
    End Sub
 
 
 
    ''' <summary>
    ''' Text steht direkt auf der Linienmitte, zentriert auf beiden Achsen, 
    ' nicht gedreht um Liniensteigung
    ''' </summary>
    ''' <param name="pGR"></param>
    ''' <param name="pP1"></param>
    ''' <param name="pP2"></param>
    ''' <remarks></remarks>
    Private Sub LinieMitText(ByVal pGR As Graphics, ByVal pP1 As Point, ByVal _
      pP2 As Point)
 
        Dim l_TextAnsatzStelle As New Point
        Dim l_SF As New StringFormat
 
        If pP1.X < pP2.X Then
            l_TextAnsatzStelle.X = pP1.X + 0.5 * (pP2.X - pP1.X)
        Else
            l_TextAnsatzStelle.X = pP2.X + 0.5 * (pP1.X - pP2.X)
        End If
 
        If pP1.Y < pP2.Y Then
            l_TextAnsatzStelle.Y = pP1.Y + 0.5 * (pP2.Y - pP1.Y)
        Else
            l_TextAnsatzStelle.Y = pP2.Y + 0.5 * (pP1.Y - pP2.Y)
        End If
 
        l_SF.LineAlignment = StringAlignment.Center
        l_SF.Alignment = StringAlignment.Center
 
        pGR.DrawLine(Pens.Black, pP1, pP2)
        pGR.DrawString("Hugo", New Font("Arial", 12), Brushes.Blue, _
          l_TextAnsatzStelle, l_SF)
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linie zeichnen mit zentrierter Beschriftung 
Autor: mullfreak
Datum: 24.09.08 10:46

Hi,

super! Vielen Dank. Jetzt fehlt noch die Umsetzung auf meinen Code. Ich habe hier ein Dreieck gezeichnet, dass sich mit "MouseMove" bewegen lässt. Nun will ich alle drei Schenkel beschriften mit "a", "b" und "c". Die Schrift soll immer zentriert sein, wenn das Dreieck bewegt wird.

Hier mal mein Code, das Dreieck ist gezeichnet und es ist beweglich:

Public Class Form1
 
    Private Sub Form1_Click(ByVal sender As Object, ByVal e As _
      System.EventArgs) Handles Me.Click
        Invalidate()
    End Sub
 
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
 
        Dim g As Graphics = CreateGraphics()
        Dim p As Pen = New Pen(BackColor, 0)
 
        g.Clear(BackColor)
 
        Dim ptMitte As New PointF(CSng(ClientSize.Width / 2), CSng( _
          ClientSize.Height / 2))
 
        Static ptmaus As New PointF
 
        Dim br As New SolidBrush(Color.Black)
        Dim fn As New Font("Arial", 10)
 
        ' Löschen
        'g.DrawLine(p, ptMitte, ptmaus)
 
        ' Lote
        g.DrawLine(p, ptmaus, New PointF(ptmaus.X, ptMitte.Y))
        g.DrawLine(p, ptMitte, New PointF(ptmaus.X, ptMitte.Y))
 
        ' Sichtbar zeichnen
        ptmaus.X = CSng(e.X)
        ptmaus.Y = CSng(e.Y)
        p.Color = Color.Black
        g.DrawLine(p, ptMitte, ptmaus)
 
        ' Lote
        p.Color = Color.Black
        g.DrawLine(p, ptmaus, New PointF(ptmaus.X, ptMitte.Y))
        g.DrawLine(p, ptMitte, New PointF(ptmaus.X, ptMitte.Y))
 
        'g.DrawString("a", fn, br, 0, 10)
        'g.DrawString("b", fn, br, 0, 40)
        'g.DrawString("c", fn, br, 0, 50)
 
 
    End Sub
 
End Class
Gruß
Markus
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linie zeichnen mit zentrierter Beschriftung 
Autor: bauer
Datum: 24.09.08 11:09

Wie wäre es dann so?

(abgesehen davon, daß es als Alternative zu Dim g As Graphics = CreateGraphics() bessere Wege gibt)



Public Class Form1
 
 
    Private Sub Form1_Click(ByVal sender As Object, ByVal e As _
          System.EventArgs) Handles Me.Click
        Invalidate()
    End Sub
 
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
 
        Dim g As Graphics = CreateGraphics()
        Dim p As Pen = New Pen(BackColor, 0)
 
        g.Clear(BackColor)
 
        Dim ptMitte As New PointF(CSng(ClientSize.Width / 2), CSng( _
          ClientSize.Height / 2))
 
        Static ptmaus As New PointF
 
        Dim br As New SolidBrush(Color.Black)
        Dim fn As New Font("Arial", 10)
 
        ' Löschen
        'g.DrawLine(p, ptMitte, ptmaus)
 
        ' Lote
        g.DrawLine(p, ptmaus, New PointF(ptmaus.X, ptMitte.Y))
        g.DrawLine(p, ptMitte, New PointF(ptmaus.X, ptMitte.Y))
 
        ' Sichtbar zeichnen
        ptmaus.X = CSng(e.X)
        ptmaus.Y = CSng(e.Y)
        p.Color = Color.Black
        g.DrawLine(p, ptMitte, ptmaus)
 
        ' Lote
        p.Color = Color.Black
        g.DrawLine(p, ptmaus, New PointF(ptmaus.X, ptMitte.Y))
        g.DrawLine(p, ptMitte, New PointF(ptmaus.X, ptMitte.Y))
 
        'g.DrawString("a", fn, br, 0, 10)
        'g.DrawString("b", fn, br, 0, 40)
        'g.DrawString("c", fn, br, 0, 50)
 
 
        LinieMitText(g, "a", ptMitte, ptmaus)
        LinieMitText(g, "b", ptmaus, New PointF(ptmaus.X, ptMitte.Y))
        LinieMitText(g, "c", ptMitte, New PointF(ptmaus.X, ptMitte.Y))
 
    End Sub
 
 
 
 
 
 
 
    ''' <summary>
    ''' Text steht direkt auf der Linienmitte, zentriert auf beiden Achsen, 
    ' nicht gedreht um Liniensteigung
    ''' </summary>
    ''' <param name="pGR"></param>
    ''' <param name="pP1"></param>
    ''' <param name="pP2"></param>
    ''' <remarks></remarks>
    Private Sub LinieMitText(ByVal pGR As Graphics, ByVal pText As String, _
      ByVal pP1 As PointF, ByVal pP2 As PointF)
 
        Dim l_TextAnsatzStelle As New Point
        Dim l_SF As New StringFormat
 
        If pP1.X < pP2.X Then
            l_TextAnsatzStelle.X = pP1.X + 0.5 * (pP2.X - pP1.X)
        Else
            l_TextAnsatzStelle.X = pP2.X + 0.5 * (pP1.X - pP2.X)
        End If
 
        If pP1.Y < pP2.Y Then
            l_TextAnsatzStelle.Y = pP1.Y + 0.5 * (pP2.Y - pP1.Y)
        Else
            l_TextAnsatzStelle.Y = pP2.Y + 0.5 * (pP1.Y - pP2.Y)
        End If
 
        l_SF.LineAlignment = StringAlignment.Center
        l_SF.Alignment = StringAlignment.Center
 
        pGR.DrawLine(Pens.Black, pP1, pP2)
        pGR.DrawString(pText, New Font("Arial", 12), Brushes.Blue, _
          l_TextAnsatzStelle, l_SF)
 
    End Sub
 
 
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Linie zeichnen mit zentrierter Beschriftung 
Autor: mullfreak
Datum: 24.09.08 11:28

Hammermäßig!!! Super Geil!

Vielen Dank.

Gruß
Mull
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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-2024 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