vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 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 - Fortgeschrittene
Freie Platzierung einer Annotation (ohne Datenanker) 
Autor: Manfred X
Datum: 27.10.14 23:32

Sei "area" eine ChartArea im ChartControl "cht" und
eine Rectangle sei wie folgt definiert ....
(Die Area-Achsen müssen explizite Daten-Grenzen [Minimum, Maximum] besitzen)

   Dim engfile As String = "Was auch immer"
   Dim ra As New RectangleAnnotation
 
   With ra
     .Text = IO.Path.GetFileNameWithoutExtension(engfile)
     .Name = "File"
 
     .ClipToChartArea = area.Name
 
     .Font = New Font("Arial", 14, FontStyle.Bold)
     .ForeColor = Color.Plum
     .LineColor = Color.Blue
     .BackColor = Color.Transparent
     .LineWidth = 1
 
     .AxisX = area.AxisX
     .AxisY = area.AxisY
   End With
Im Paint-Event des Chart kann eine Positionierung der Annotation
durch Skalen-Transformation erfolgen ....
(Hier am Beispiel der x-Achse.)
  Private Sub Paint(sender As Object, _
    e As System.Windows.Forms.PaintEventArgs) Handles cht.Paint
 
    Dim cht As Chart = CType(sender, Chart)
    Dim fa As RectangleAnnotation = _
        CType(cht.Annotations("File"), RectangleAnnotation)
 
    Dim axisx As Axis = fa.AxisX
 
    Dim sz As SizeF
    Using g As Graphics = cht.CreateGraphics()
         g.PageUnit = GraphicsUnit.Pixel
         sz = g.MeasureString(fa.Text, fa.Font) 'Breite in Pixel
    End Using
 
    With axisx
       'Skalenbereich aus Datengrenzen in Pixelmaßstab
       Dim pixXmin As Double = .ValueToPixelPosition(.Minimum)
       Dim pixXmax As Double = .ValueToPixelPosition(.Maximum)
 
       Dim axis_data As Double = .Maximum - .Minimum
       Dim axis_pixel As Double = pixXmax - pixXmin
 
       'Transformation von Pixelskala auf Datenskala 
       Dim x As Double = ((axis_pixel - 1.05 * sz.Width) * _
                axis_data / axis_pixel) + .Minimum
 
       fa.X = x
       fa.Y = fa.AxisY.Maximum
    End With
End Sub
Ob das die einfachste Lösung ist, kann ich nicht beurteilen.
Vielleicht kennt jemand eine Alternative ....

Beitrag wurde zuletzt am 27.10.14 um 23:37:29 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Platzierung von ein MS Chart Annotation1.932henrikl200027.10.14 11:44
Re: Platzierung von ein MS Chart Annotation1.398Manfred X27.10.14 21:14
Freie Platzierung einer Annotation (ohne Datenanker)1.356Manfred X27.10.14 23:32
Re: Freie Platzierung einer Annotation (ohne Datenanker)1.250henrikl200029.10.14 10:42

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