ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 30.07.2001

Diese Seite wurde zuletzt aktualisiert am 30.07.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicAddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zur AVB-Web-Site, Kontakt und Impressum

Zurück...

Trennende Optik

Zurück...

(-hg) mailto:hg_menubottomline@aboutvb.de

Bei einem Form, das keinen eigentlichen, optisch abgesetzten Arbeitsbereich hat, beispielsweise als dialog-ähnliches Form, fehlt eine optische Trennung zwischen Menüleiste und der übrigen Oberfläche. Und auch eine Statuszeile (etwa aus den Microsoft Common Controls) sollte optisch von der übrigen Fläche getrennt erscheinen.

Eine solche Trennung bietet unser Steuerelement MenuBottomLine in Form einer horizontalen Linie, die sich automatisch horizontal oben oder unten ausrichtet (VB-Eigenschaft Align). Sie können zwischen drei Stilen wählen: mit 3D-Effekt eingraviert (mblSunken) oder erhaben (mblRaised), oder als einfache Trennlinie in der im System eingestellten Rahmenkantenfarbe (vbWindowFrame).

Eine horizontale, sich selbst ausrichtende Trennlinie in drei Stilen

Eine horizontale, sich selbst ausrichtende Trennlinie in drei Stilen

Auch mehrfach untereinander angeordnete Toolbars aus den Microsoft Common Controls lassen sich optisch schöner voneinander Trennen. Sie verfügen zwar über eine obere Trennlinie (Eigenschaften Appearance = 1 und BorderStyle = 0), jedoch sind die sich ergebenden Abstände oben und unten nicht symmetrisch. Platzieren Sie die Toolbars (mit Appearance = 0) zwischen MenuBottomLine-Steuerelementen, können Sie in deren Eigenschaften SpaceTop und SpaceBottom die Freiräume oberhalb und unterhalb der Trennlinien pixelgenau festlegen.

Auch untereinander angeordnete Toolbars lassen sich optisch ansprechend voneinander trennen

Auch untereinander angeordnete Toolbars lassen sich optisch ansprechend voneinander trennen

Das Steuerelement MenuBottomLine ist fensterlos - die Linien sind Line-Steuerelemente, die daher direkt auf dem Container dargestellt werden. Wie das normale Line-Steuerelement ist es völlig passiv und kann auch nicht den Fokus erhalten. Die Freiräume oberhalb und Unterhalb der Trennlinie nehmen automatisch die Hintergrundfarbe an, wenn die Eigenschaft AutoBackColor auf True gesetzt ist (Voreinstellung).

Ein kleiner Trick sorgt dafür, dass das Steuerelement nur horizontal oben oder unten ausgerichtet werden kann - es sperrt sich im Resize-Ereignis des UserControls automatisch gegen eine vertikale Ausrichtung und gegen eine Aufhebung der Ausrichtung. Auch wenn Sie im Eigenschaftenfenster per Doppelklick die Align-Eigenschaft weiterschalten wollen, springt der Wert immer wieder automatisch auf vbAlignTop oder vbAlignBottom.

Es ist nicht notwendig, das UserControl als OCX zu kompilieren - Sie können es auch als privates Steuerelement-Modul in ein Projekt einfügen und dort verwenden.

Public Enum MenuBottomLineStyleConstants
  mblSunken
  mblRaised
  mblSingle
End Enum

Private pAutoBackColor As Boolean
Private pSpaceBottom As Single
Private pSpaceTop As Single
Private pStyle As MenuBottomLineStyleConstants

Public Property Get AutoBackColor() As Boolean
  AutoBackColor = pAutoBackColor
End Property
  
Public Property Let AutoBackColor(New_AutoBackColor As Boolean)
  pAutoBackColor = New_AutoBackColor
  PropertyChanged "AutoBackColor"
End Property

Public Property Get SpaceBottom() As Single
  SpaceBottom = pSpaceBottom \ Screen.TwipsPerPixelY
End Property

Public Property Let SpaceBottom(New_SpaceBottom As Single)
  Select Case New_SpaceBottom
    Case pSpaceBottom \ Screen.TwipsPerPixelY
      Exit Property
    Case Is < 0
      Err.Raise 380
    Case Else
      pSpaceBottom = New_SpaceBottom * Screen.TwipsPerPixelY
      UserControl_Resize
      PropertyChanged "SpaceBottom"
  End Select
End Property

Public Property Get SpaceTop() As Single
  SpaceTop = pSpaceTop \ Screen.TwipsPerPixelY
End Property

Public Property Let SpaceTop(New_SpaceTop As Single)
  Select Case New_SpaceTop
    Case pSpaceTop \ Screen.TwipsPerPixelY
      Exit Property
    Case Is < 0
      Err.Raise 380
    Case Else
      pSpaceTop = New_SpaceTop * Screen.TwipsPerPixelY
      UserControl_Resize
      PropertyChanged "SpaceTop"
  End Select
End Property

Public Property Get Style() As MenuBottomLineStyleConstants
  Style = pStyle
End Property

Public Property Let Style(New_Style As MenuBottomLineStyleConstants)
  Select Case New_Style
    Case pStyle
    Case mblSunken, mblRaised, mblSingle
      pStyle = New_Style
      UserControl_Resize
      PropertyChanged "Style"
    Case Else
      Err.Raise 380
  End Select
End Property

Private Sub UserControl_AmbientChanged(PropertyName As String)
  If pAutoBackColor Then
    Select Case LCase$(PropertyName)
      Case "backcolor"
        UserControl.BackColor = Ambient.BackColor
    End Select
  End If
End Sub

Private Sub UserControl_Paint()
  Static sInProc As Boolean
    
  If sInProc Then
    Exit Sub
  Else
    sInProc = True
  End If
  UserControl_Resize
  sInProc = False
End Sub

Private Sub UserControl_Resize()
  Static sInProc As Boolean
    
  If sInProc Then
    Exit Sub
  Else
    sInProc = True
  End If
  With Extender
    Select Case .Align
      Case vbAlignTop, vbAlignBottom
      Case Else
        .Align = vbAlignTop
    End Select
  End With
  With UserControl
    .Enabled = False
    Select Case pStyle
      Case mblSunken
        lnShadow.BorderColor = vb3DShadow
        lnHighlight.BorderColor = vb3DHighlight
        .Height = 2 * Screen.TwipsPerPixelY + pSpaceTop + pSpaceBottom
      Case mblRaised
        lnShadow.BorderColor = vb3DHighlight
        lnHighlight.BorderColor = vb3DShadow
        .Height = 2 * Screen.TwipsPerPixelY + pSpaceTop + pSpaceBottom
      Case mblSingle
        lnShadow.BorderColor = vbWindowFrame
        .Height = Screen.TwipsPerPixelY + pSpaceTop + pSpaceBottom
    End Select
  End With
  With lnShadow
    .Y1 = pSpaceTop
    .Y2 = .Y1
    .X1 = 0
    .X2 = UserControl.ScaleWidth
  End With
  With lnHighlight
    .Visible = Not CBool(pStyle = mblSingle)
    .Y1 = Screen.TwipsPerPixelY + pSpaceTop
    .Y2 = .Y1
    .X1 = 0
    .X2 = UserControl.ScaleWidth
  End With
  sInProc = False
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  With PropBag
    pAutoBackColor = .ReadProperty("AutoBackColor", True)
    pSpaceBottom = .ReadProperty("SpaceBottom", 0)
    pSpaceTop = .ReadProperty("SpaceTop", 0)
    pStyle = .ReadProperty("Style", mblSunken)
  End With
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  With PropBag
    .WriteProperty "AutoBackColor", pAutoBackColor, True
    .WriteProperty "SpaceBottom", pSpaceBottom, 0
    .WriteProperty "SpaceTop", pSpaceTop, 0
    .WriteProperty "Style", pStyle, mblSunken
  End With
End Sub

Private Sub UserControl_Initialize()
  pAutoBackColor = True
End Sub

Beispiel-Projekt und UserControl MenuBottomLine (menubottomline.zip - ca. 5,5 KB)



Komponenten-Übersicht

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2023 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...