Freitag, 1. Juli 2011

Visual Basic 2011 Excel VBA Drehende Animationen programmieren SelMcKenzie Selzer-McKenzie


Visual Basic 2011 Excel VBA Drehende Animationen programmieren SelMcKenzie Selzer-McKenzie

Author D.Selzer-McKenzie
Heute zeige ich Ihnen, wie Sie mit einfachsten Mitteln eine drehende Animationen, die z.B. jeweils gezeichnet wird, programmieren können. Das Objekt dieser Animation können Sie vergrössern, vergleinern und auch spiegeln, alles während der Animation.
Den Code habe ich vorgeschrieben und Sie sollten das Video anhalten, um ihn abschreiben zu können. Genau muss es sein. Ich habne deshalb die Schrift so vergrössert, dass man es gut lesen kann.
Und wie Sie sehen, die Animation funktioniert perfekt, kann natürlich genausogut mit anderen Objekten oder Bildern gemacht werden, was ja besonders bei der Spiele-Programmierung zum Einsatz kommt.
Selzer-McKenzie
Der Code lautet:
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Vom Windows Form Designer generierter Code "

    Public Sub New()
        MyBase.New()

        ' Dieser Aufruf ist für den Windows Form-Designer erforderlich.
        InitializeComponent()

        ' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen

    End Sub

    ' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu bereinigen.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    ' Für Windows Form-Designer erforderlich
    Private components As System.ComponentModel.IContainer

    'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer erforderlich
    'Sie kann mit dem Windows Form-Designer modifiziert werden.
    'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
    Friend WithEvents KnopfVergrössern As System.Windows.Forms.Button
    Friend WithEvents KnopfVerkleinern As System.Windows.Forms.Button
    Friend WithEvents KnopfRichtung As System.Windows.Forms.Button
    Friend WithEvents KnopfSpiegeln As System.Windows.Forms.Button
    Friend WithEvents Taktgeber As System.Windows.Forms.Timer
    Friend WithEvents KnopfStart As System.Windows.Forms.Button
    Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container()
        Me.KnopfVergrössern = New System.Windows.Forms.Button()
        Me.KnopfVerkleinern = New System.Windows.Forms.Button()
        Me.KnopfRichtung = New System.Windows.Forms.Button()
        Me.KnopfSpiegeln = New System.Windows.Forms.Button()
        Me.Taktgeber = New System.Windows.Forms.Timer(Me.components)
        Me.KnopfStart = New System.Windows.Forms.Button()
        Me.SuspendLayout()
        '
        'KnopfVergrössern
        '
        Me.KnopfVergrössern.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer))
        Me.KnopfVergrössern.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.KnopfVergrössern.Location = New System.Drawing.Point(32, 16)
        Me.KnopfVergrössern.Name = "KnopfVergrössern"
        Me.KnopfVergrössern.Size = New System.Drawing.Size(96, 32)
        Me.KnopfVergrössern.TabIndex = 0
        Me.KnopfVergrössern.Text = "Grösser"
        Me.KnopfVergrössern.UseVisualStyleBackColor = False
        '
        'KnopfVerkleinern
        '
        Me.KnopfVerkleinern.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer))
        Me.KnopfVerkleinern.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.KnopfVerkleinern.Location = New System.Drawing.Point(144, 16)
        Me.KnopfVerkleinern.Name = "KnopfVerkleinern"
        Me.KnopfVerkleinern.Size = New System.Drawing.Size(96, 32)
        Me.KnopfVerkleinern.TabIndex = 1
        Me.KnopfVerkleinern.Text = "Kleiner"
        Me.KnopfVerkleinern.UseVisualStyleBackColor = False
        '
        'KnopfRichtung
        '
        Me.KnopfRichtung.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer))
        Me.KnopfRichtung.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.KnopfRichtung.Location = New System.Drawing.Point(256, 16)
        Me.KnopfRichtung.Name = "KnopfRichtung"
        Me.KnopfRichtung.Size = New System.Drawing.Size(96, 32)
        Me.KnopfRichtung.TabIndex = 2
        Me.KnopfRichtung.Text = "Richtung"
        Me.KnopfRichtung.UseVisualStyleBackColor = False
        '
        'KnopfSpiegeln
        '
        Me.KnopfSpiegeln.BackColor = System.Drawing.Color.FromArgb(CType(CType(192, Byte), Integer), CType(CType(192, Byte), Integer), CType(CType(255, Byte), Integer))
        Me.KnopfSpiegeln.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.KnopfSpiegeln.Location = New System.Drawing.Point(368, 16)
        Me.KnopfSpiegeln.Name = "KnopfSpiegeln"
        Me.KnopfSpiegeln.Size = New System.Drawing.Size(96, 32)
        Me.KnopfSpiegeln.TabIndex = 3
        Me.KnopfSpiegeln.Text = "Spiegeln"
        Me.KnopfSpiegeln.UseVisualStyleBackColor = False
        '
        'Taktgeber
        '
        '
        'KnopfStart
        '
        Me.KnopfStart.BackColor = System.Drawing.Color.Green
        Me.KnopfStart.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.KnopfStart.ForeColor = System.Drawing.SystemColors.ButtonHighlight
        Me.KnopfStart.Location = New System.Drawing.Point(536, 16)
        Me.KnopfStart.Name = "KnopfStart"
        Me.KnopfStart.Size = New System.Drawing.Size(96, 32)
        Me.KnopfStart.TabIndex = 4
        Me.KnopfStart.Text = "START"
        Me.KnopfStart.UseVisualStyleBackColor = False
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.BackgroundImage = Global._2DGrafik.My.Resources.Resources.smk_aus
        Me.ClientSize = New System.Drawing.Size(783, 450)
        Me.Controls.Add(Me.KnopfStart)
        Me.Controls.Add(Me.KnopfSpiegeln)
        Me.Controls.Add(Me.KnopfRichtung)
        Me.Controls.Add(Me.KnopfVerkleinern)
        Me.Controls.Add(Me.KnopfVergrössern)
        Me.Name = "Form1"
        Me.Text = "Vector-Graphicen in alle Richtungen drehen, vergrössern und verkleinern by SelMcK" & _
            "enzie®"
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private DerDrehwinkel As Double
    Private DerSinus, DerKosinus As Double
    Private DerSpiegelungsfaktor As Integer
    Private DerMass_Stabsfaktor As Double
    Private BezugHorizontal, BezugVertikal As Double
    Private DerRichtungsflag As Boolean
    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        BezugHorizontal = Me.Size.Width / 2
        BezugVertikal = Me.Size.Height / 2
        DerDrehwinkel = 0
        DerSpiegelungsfaktor = 1
        DerMass_Stabsfaktor = 10
        MyBase.OnLoad(e)
    End Sub
    Private Sub MeineMasse(ByVal dx1 As Double, ByVal dy1 As Double, ByVal R As Double)
        Dim x1, y1 As Double
        dx1 = DerMass_Stabsfaktor * dx1
        dy1 = DerMass_Stabsfaktor * dy1
        R = DerMass_Stabsfaktor * R
        x1 = BezugHorizontal + dx1 * DerKosinus - DerSpiegelungsfaktor * dy1 * DerSinus
        y1 = BezugVertikal - DerSpiegelungsfaktor * dy1 * DerKosinus - dx1 * DerSinus
        Dim x, y, d As Single           ' Hilfsvariablen
        ' Konvertierungen, wegen strenger Typprüfung erforderlich:
        x = Convert.ToSingle(x1 - R)              ' linke obere Ecke
        y = Convert.ToSingle(y1 - R)              '    "    "     "
        d = Convert.ToSingle(2 * R)               ' Durchmesser
        ' Kreis zeichnen:
        Dim FarbeRot As New Pen(Color.Red, 2)
        Dim Zeichnen As Graphics = Me.CreateGraphics
        Zeichnen.DrawEllipse(FarbeRot, x, y, d, d)
        Zeichnen.Dispose()
    End Sub
    Private Sub DieZeichnung(ByVal dx1 As Double, ByVal dy1 As Double, ByVal dx2 As Double, ByVal dy2 As Double) ' zeichnet relative Linie
        Dim x1, y1, x2, y2 As Double
        dx1 = DerMass_Stabsfaktor * dx1
        dy1 = DerMass_Stabsfaktor * dy1
        x1 = BezugHorizontal + dx1 * DerKosinus - DerSpiegelungsfaktor * dy1 * DerSinus
        y1 = BezugVertikal - DerSpiegelungsfaktor * dy1 * DerKosinus - dx1 * DerSinus
        dx2 = DerMass_Stabsfaktor * dx2
        dy2 = DerMass_Stabsfaktor * dy2
        x2 = BezugHorizontal + dx2 * DerKosinus - DerSpiegelungsfaktor * dy2 * DerSinus
        y2 = BezugVertikal - DerSpiegelungsfaktor * dy2 * DerKosinus - dx2 * DerSinus
        Dim xa, ya, xb, yb As Single   ' Hilfsvariablen
        ' Konvertierungen,wegen strenger Typprüfung erforderlich:
        xa = Convert.ToSingle(x1)              ' Anfangspunkt
        ya = Convert.ToSingle(y1)              '      "    
        xb = Convert.ToSingle(x2)               ' Endpunkt
        yb = Convert.ToSingle(y2)               '    "    
        ' Linie zeichnen:
        Dim FarbeGrün As New Pen(Color.Green, 2)
        Dim Zeichnen As Graphics = Me.CreateGraphics()
        Zeichnen.DrawLine(FarbeGrün, xa, ya, xb, yb)
        Zeichnen.Dispose()
    End Sub
    Private Sub HausZeichnen() ' zeichnet Haus

        'Frontseite:
        DieZeichnung(0, 10, 10, 10)
        DieZeichnung(10, 10, 10, 0)
        DieZeichnung(10, 0, 0, 0)
        DieZeichnung(0, 0, 0, 10)
        ' Fenster:
        DieZeichnung(1, 8, 4, 8)
        DieZeichnung(4, 8, 4, 4)
        DieZeichnung(4, 4, 1, 4)
        DieZeichnung(1, 4, 1, 8)
        ' Tür:
        DieZeichnung(6, 0, 6, 8)
        DieZeichnung(6, 8, 9, 8)
        DieZeichnung(9, 8, 9, 0)
        DieZeichnung(9, 0, 6, 0)
        ' Dachgiebel:
        DieZeichnung(-1, 9, 5, 15)
        DieZeichnung(5, 15, 11, 9)
        ' rundes Giebelfenster:
        MeineMasse(5, 12, 1)
        ' Schornstein:
        DieZeichnung(7, 13, 7, 16)
        DieZeichnung(7, 16, 9, 16)
        DieZeichnung(9, 16, 9, 11)
    End Sub
    Private Sub Taktgeber_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Taktgeber.Tick
        Dim Zeichnen As Graphics = Me.CreateGraphics
        Zeichnen.Clear(Me.BackColor)       ' Zeichnung löschen
        If DerRichtungsflag Then
            DerDrehwinkel = DerDrehwinkel + Math.PI / 100    ' im Uhrzeigersinn
        Else
            DerDrehwinkel = DerDrehwinkel - Math.PI / 100    ' entgegen Uhrzeigersinn
        End If
        DerSinus = Math.Sin(DerDrehwinkel)
        DerKosinus = Math.Cos(DerDrehwinkel)
        Call HausZeichnen()
    End Sub
    ' Vergrößern:
    Private Sub KnopfVergrössern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KnopfVergrössern.Click
        DerMass_Stabsfaktor += 1
    End Sub
    ' Verkleinern:
    Private Sub KnopfVerkleinern_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KnopfVerkleinern.Click
        DerMass_Stabsfaktor -= 1
    End Sub
    ' Spiegeln:
    Private Sub KnopfSpiegeln_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KnopfSpiegeln.Click
        DerSpiegelungsfaktor = -DerSpiegelungsfaktor
    End Sub
    ' Richtung ändern:
    Private Sub KnopfRichtung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KnopfRichtung.Click
        DerRichtungsflag = Not DerRichtungsflag
    End Sub
    Private Sub KnopfStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KnopfStart.Click

        Start$ = "START" : Stop$ = "STOP"
        If KnopfStart.Text = Start$ Then
            KnopfStart.Text = Stop$
            KnopfStart.BackColor = Color.Red
            Taktgeber.Enabled = True
        ElseIf KnopfStart.Text = Stop$ Then
            KnopfStart.Text = Start$
            KnopfStart.BackColor = Color.Green
            Taktgeber.Enabled = False
        End If
    End Sub
End Class



Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.