Hi,
ich habe für euch hier ein kleines Histogramm-Control mit beispiel im CMD-Style:
mfg
gfcwfzkm
PS: Weis jemand, wie man daraus ein richtiges Control in .dll Form macht?
ich habe für euch hier ein kleines Histogramm-Control mit beispiel im CMD-Style:
VB.NET-Quellcode
- Imports System.Drawing.Drawing2D
- Public Class Form1
- Dim H As Histogramm = New Histogramm
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- With H
- .Size = New Size(500, 500)
- For I As Integer = 0 To 20
- .Werte.Add(Int(Rnd() * 100))
- Next
- .Location = New Point(0, 0)
- End With
- Me.Controls.Add(H)
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- With H
- For I As Integer = 0 To 20
- H.Werte.Add(Int(Rnd() * 100))
- Next
- End With
- End Sub
- End Class
- Public Class Histogramm
- Inherits PictureBox
- Dim LineColor As Color = Color.Lime
- Dim StepX As Integer = 10
- Dim StepY As Integer = 10
- Dim GitterColor As Color = Color.DarkRed
- Dim BackgroundColor As Color = Color.Black
- Dim LastY As Integer
- Dim YMax As Integer = 0
- Dim RefreshTimer As Timer
- Public Werte As List(Of Integer)
- Sub New()
- Me.DoubleBuffered = True
- Me.RefreshTimer = New Timer
- Me.Werte = New List(Of Integer)
- Me.LastY = 0
- With Me.RefreshTimer
- .Interval = 1000
- .Enabled = True
- AddHandler .Tick, AddressOf NeuZeichnen
- End With
- End Sub
- Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
- 'MyBase.OnPaint(pe)
- With pe.Graphics
- .Clear(Me.BackgroundColor)
- For I As Integer = 0 To Me.Width Step StepX
- .DrawLine(New Pen(GitterColor), I, 0, I, Me.Height)
- Next
- For J As Integer = 0 To Me.Height Step StepY
- .DrawLine(New Pen(GitterColor), 0, J, Me.Width, J)
- Next
- Dim Y As Integer
- For Each Wert As Integer In Werte
- YMax = Math.Max(Math.Max(YMax, Wert), YMax)
- Next
- Dim X As Integer = 10
- Dim XOld As Integer = 0
- Dim YOld As Integer = LastY
- Form1.Text = Format(Me.Werte.Count)
- If Me.Werte.Count > 0 Then
- Select Case Me.Werte.Count
- Case 1
- Y = YOld
- .DrawLine(New Pen(LineColor), XOld, YOld, X, Y)
- XOld = X
- YOld = Y
- X = X + StepX
- Case Is >= 2
- YOld = CInt((Me.Height / YMax) * Werte(0))
- For W As Integer = 1 To Werte.Count - 1
- Y = CInt((Me.Height / YMax) * Werte(W))
- .DrawLine(New Pen(LineColor), XOld, YOld, X, Y)
- XOld = X
- YOld = Y
- X = X + StepX
- If X > Me.Width Then Exit For
- Next
- End Select
- LastY = Werte(Werte.Count - 1)
- End If
- If XOld < Me.Width Then
- .DrawLine(New Pen(LineColor), XOld, YOld, Me.Width, YOld)
- End If
- If Werte.Count > 0 Then
- Werte.RemoveAt(0)
- Else
- Me.YMax = 0
- End If
- End With
- End Sub
- Sub NeuZeichnen(ByVal sender As Object, ByVal e As EventArgs)
- Me.Refresh()
- End Sub
- End Class
mfg
gfcwfzkm
PS: Weis jemand, wie man daraus ein richtiges Control in .dll Form macht?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „gfcwfzkm“ ()