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 09.08.2001

Diese Seite wurde zuletzt aktualisiert am 09.08.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns 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 zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Gerahmte ListBoxen

Zurück...


Anzeige

(-hg) mailto:hg_listboxborder@aboutvb.de

Bei vielen Steuerelementen können Sie über eine Kombination der Appearance-Eigenschaft und einer BorderStyle-Eigenschaft einen Rahmenstil festlegen, von flach (ohne Rahmen) über eine einfache Konturlinie bis zum 3D-Rahmen. Da der ListBox die BorderStyle-Eigenschaft fehlt, bleibt der Weg über API-Funktionen, um eine rahmenlose ListBox zu erhalten.

Auch eine rahmenlose ListBox ist möglich

Auch eine rahmenlose ListBox ist möglich

Dazu setzen Sie als erstes die Appearance-Eigenschaft auf 0, so dass zunächst schon der einfache Konturrahmen gesetzt ist. Dann lesen Sie die aktuelle Stilekombination für das Fenster der ListBox mittels der API-Funktion GetWindowLong aus, löschen das Stil-Bit WS_BORDER (Stil And Not WS_BORDER), und weisen die veränderte Kombination dem Fenster über SetWindowLong wieder zu. Damit das Fenster auch mitbekommt, dass sich der Rahmenstil geändert hat, und es seine Darstellung aktualisieren kann, rufen Sie abschließend noch die API-Funktion SetWindowPos auf. Dabei werden alle Parameter bis auf den letzten mit 0 belegt, und im letzten Parameter übergeben Sie die Kombination aller möglichen Flags, die irgendeine andere Veränderung unterbinden (SWP_NO...) und ausdrücklich die Rahmenänderung mitteilen (SWP_FRAMECHANGED).

Umgekehrt können Sie das Stil-Bit WS_BORDER wieder zuweisen (Stil Or WS_BORDER), um wieder eine ListBox mit Rahmen zu erhalten. Allerdings erhalten Sie so zunächst nur den Konturrahmen - erst wenn Sie noch Appearance wieder auf 1 setzen, hat die ListBox wieder ihren 3D-Rahmen.

Damit beim Umschalten der Rahmenstile die Höhe der ListBox nicht schrumpft, sollten Sie die deren Eigenschaft IntegralHeight auf False setzen.

Die HilfsProzedur ListBoxBorder fasst die verschiedenen Einstellmöglichkeiten für den Rahmen einer ListBox zusammen. Sie übergeben ihr die betreffende ListBox und dazu den gewünschten Rahmenstil aus der Enumeration BorderConstants.

Private Declare Function GetWindowLong Lib "user32" _
 Alias "GetWindowLongA" (ByVal hwnd As Long, _
 ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
 Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
 ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
 (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
 ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
 ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_BORDER = &H800000
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOOWNERZORDER = &H200
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4

Public Enum BorderConstants
  bsFlat
  bsSingle
  bs3D
End Enum

Public Sub ListBoxBorder(ListBox As ListBox, _
 Optional ByVal BorderStyle As BorderConstants)

  Dim nStyle As Long
  Dim nBorder As Boolean
  
  With ListBox
    Select Case BorderStyle
      Case bsFlat
        .Appearance = 0
      Case bsSingle
        .Appearance = 0
        nBorder = True
      Case bs3D
        nBorder = True
      Case Else
        Err.Raise 5
    End Select
    nStyle = GetWindowLong(.hwnd, GWL_STYLE)
    If nBorder Then
      nStyle = nStyle Or WS_BORDER
    Else
      nStyle = nStyle And Not WS_BORDER
    End If
    SetWindowLong .hwnd, GWL_STYLE, nStyle
    SetWindowPos .hwnd, 0, 0, 0, 0, 0, _
     SWP_FRAMECHANGED Or SWP_NOACTIVATE Or SWP_NOMOVE Or _
     SWP_NOOWNERZORDER Or SWP_NOSIZE Or SWP_NOZORDER
    If BorderStyle = bs3D Then
      .Appearance = 1
    End If
  End With
End Sub

Beispiel-Projekt und Modul modListBoxBorder (listboxborder.zip - ca. 3,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

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

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer