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 ' 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 Dieser Tipp wurde bereits 925 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
Neu! sevCoolbar 3.0 ![]() Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |