vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls   |   VB-Versionen: VB202223.07.24
Ein Windrosen-Control zum Positionieren von Forms oder Controls

Die Windrose besteht aus 9 Richtungspfeilen, die sich gewissermaßen an den Himmelsrichtungen orientieren. Das Klicken auf einen Pfeil bewirkt das Positionieren einer Form oder eines Controls auf einer Form.

Autor:   Dietrich HerrmannBewertung:  Views:  327 
ohne HomepageSystem:  Win7, Win8, Win10, Win11 Beispielprojekt 

Das Windrosen-Control kann man im Projekt einsetzen, wenn man von einer Form aus, auf der sich das Control befindet, eine andere externe Form auf dem Bildschirm variabel positionieren möchte, oder aber (als zweite Möglichkeit) ein Control auf der gleichen Form eben auf dieser positionieren möchte.

Die Windrose kann durch Ändern der Fontgröße in seiner Größe beeinflusst werden.

Als Fonts werden WingDings2 und WingDings3 benötigt. Zum Positionieren sind allerdings noch andere Programmierschritte erforderlich. Zunächst definiert man eine Variabel in der Ausgangsform, die das Positionieren beeinflusst, wenn sie sich ändert. Das zu ermitteln, definiert man eine Variable:

Dim WithEvents pp As New clsVariableChange

Hier sieht man, dass die Klasse clsVariableChange verwendet wird (siehe mein Tipp  Ereignis auslösen, wenn Variable sich ändert).
Hier der Code dazu:

' Variable auf Änderung überwachen
Public Class clsVariableChange
  Private mVarValue As String
 
  Public Event VariableChanged(ByVal mVarValue As String)
 
  Public Property theVariable() As String
    Get
      theVariable = mVarValue
    End Get
    Set(ByVal value As String)
      mVarValue = value
      RaiseEvent VariableChanged(mVarValue)
    End Set
  End Property
End Class

Wenn sich der Wert der Variable pp ändert, nämlich bei Klick auf einen Pfeil der Windrose, wird im Falle, dass eine externe Form positioniert werden soll, das entsprechende Event pp_VariableChanged aufgerufen.Hier der entsprechende Code:

' Positionieren der Form mittels Windrose und Funktion CalcNewPositionPoint
Private Sub pp_VariableChanged(mValue As Object) Handles pp.VariableChanged
  frmRect = frmDaysShowSmall.RectangleToScreen(frmDaysShowSmall.Bounds)
  frmDaysShowSmall.Location _
    = CalcNewPositionPoint(
    New Rectangle(screenRect.X, screenRect.Y, screenRect.Width, screenRect.Height),
    frmRect, pp.theVariable)
End Sub

Das löst die Positionierung der externen Form auf dem Bildschirm aus.

Voraussetzung, dass eine Form positioniert wird ist, dass vor Benutzung der Windrose ihre Eigenschaft Windrose.extForm gesetzt wird mit dem Formnamen der externen Form. Wird das nicht gemacht, arbeitet Windrose im Modus 'positionieren eines Controls auf der Ausgangsform'.

Zum eigentlichen Positionieren wird die Funktion CalcNewPositionPoint verwebdet. Hier deren Code:

''' <summary>
''' 	Positionieren eines Rechtecks auf einem 'Hintergrund'-Rechteck
''' </summary>
''' <param name="theOrigCoords">die Koordinaten des Hintergrundrechtecks</param>
''' <param name="theObjCoords">die Koordinaten des zu positionierenden Rechtecks</param>
''' <param name="theAlignment">die Ausrichtung des zu pos. Rechtecks</param>
''' <returns>die neue Location des zu pos. Rechtecks</returns>
Public Function CalcNewPositionPoint(theOrigCoords As Rectangle,
  theObjCoords As Rectangle,
  theAlignment As PositionsOfObjects) As Point
  Dim x As Short = theOrigCoords.X
  Dim y As Short = theOrigCoords.Y
 
  ' Position (Koordinaten) ermitteln
  With theObjCoords
    Select Case theAlignment
      Case PositionsOfObjects.UpperLeftCorner      ' oben links
        x = theOrigCoords.Left
        y = theOrigCoords.Top
      Case PositionsOfObjects.UpperRightCorner     ' oben rechts
        x = theOrigCoords.Right - .Width
        y = theOrigCoords.Top
      Case PositionsOfObjects.BottomLeftCorner     ' unten links
        x = theOrigCoords.Left
        y = theOrigCoords.Bottom - .Height
      Case PositionsOfObjects.BottomRightCorner    ' unten rechts
        x = theOrigCoords.Right - .Width
        y = theOrigCoords.Bottom - .Height
      Case PositionsOfObjects.Center               ' zentrieren
        x = theOrigCoords.Left + (theOrigCoords.Width - .Width) / 2
        y = theOrigCoords.Top + (theOrigCoords.Height - .Height) / 2
      Case PositionsOfObjects.UpperCenterBorder    ' zentriert oben
        x = theOrigCoords.Left + (theOrigCoords.Width - .Width) / 2
        y = theOrigCoords.Top
      Case PositionsOfObjects.RightCenterBorder    ' zentriert rechts
        x = theOrigCoords.Right - .Width
        y = theOrigCoords.Top + (theOrigCoords.Height - .Height) / 2
      Case PositionsOfObjects.BottomCenterBorder   ' zentriert unten
        x = theOrigCoords.Left + (theOrigCoords.Width - .Width) / 2
        y = theOrigCoords.Bottom - .Height
      Case PositionsOfObjects.LeftCenterBorder     ' zentriert links
        x = theOrigCoords.Left
        y = theOrigCoords.Top + (theOrigCoords.Height - .Height) / 2
    End Select
 
    ' Rechteck neu positionieren
    .Location = New Point(x, y)
  End With
  Return theObjCoords.Location
End Function

mit Enumeration

''' <summary>
''' Aufzählung möglicher Ausrichtungen
''' Form an Form
''' </summary>
Public Enum PositionsOfObjects
  UpperCenterBorder    ' zentriert oberer Rand	Norden orth
  RightCenterBorder    ' zentriert rechter Rand	Osten ast
  BottomCenterBorder   ' zentriert unterer Rand	Süden outh
  LeftCenterBorder     ' zentriert linker Rand	Westen est
  Center               ' zentriert Zentrum Center
  UpperLeftCorner      ' oben linke Ecke NordWest NorthWest
  UpperRightCorner     ' oben rechte Ecke NordOst NorthEast
  BottomLeftCorner     ' unten linke Ecke SüdWest SouthWest
  BottomRightCorner    ' unten rechte Ecke SüdOst SouthEast
End Enum

 Download Quellcode



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.