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

https://www.vbarchiv.net
Rubrik: Controls · ListView   |   VB-Versionen: VB4, VB5, VB607.09.04
Listview-Spaltenbreite sperren

Verhindern, dass in einem ListView-Steuerelement die Spaltenbreiten verändert wird.

Autor:   Ralf HähnelBewertung:  Views:  18.547 
www.hippsoft.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wollten Sie in einem Listview auch schon mal feste und nicht veränderbare Spaltenbreiten? Bisher gabs keine befriedigenden Tipps im WEB, wie gesagt bis jetzt.

Dabei ist die Sache recht einfach. Der Listview-ColumnHeader ist ein separates Objekt mit einem eigenem Handle und die API-Funktion "EnableWindow" kann jedes Objekt das ein Handle besitzt deaktivieren.

Einziges "kleines" Problem ist, das Handle des ColumnHeader zu ermitteln. Aber auch daran haben die API-Väter gedacht -> die Message LVM_GETHEADER liefert uns genau dieses Handle.

Mit diesen ganzen Informationen, sollte uns nun nichts mehr daran hindern eine kleine Routine zum Setzen und Ermitteln des ColumnHeader-Status zu schreiben:

Option Explicit
 
' Benötigte API-Deklarationen
Private Declare Function IsWindowEnabled Lib "user32.dll" ( _
  ByVal hWnd As Long) As Long
 
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hWnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Long) As Long
 
Private Declare Function EnableWindow Lib "user32.dll" ( _
  ByVal hWnd As Long, _
  ByVal fEnable As Long) As Long
 
Private Const LVM_FIRST = &H1000
Private Const LVM_GETHEADER As Long = (LVM_FIRST + 31)
' Ermittelt das Handle des ListView-Headers
Public Function HeaderHwnd(ByVal oListView As ListView) As Long
  If oListView Is Nothing Then Exit Function
  HeaderHwnd = SendMessage(oListView.hWnd, LVM_GETHEADER, 0, ByVal 0&)
End Function
' Gibt zurück, ob der ListView-Header verändert werden kann
Public Property Get HeaderEnabled(ByVal oListView As ListView) As Boolean
  Dim lHandle As Long
 
  lHandle = HeaderHwnd(oListView)
  If lHandle = 0 Then Exit Property
 
  HeaderEnabled = (IsWindowEnabled(lHandle) = 1)
End Property
' Legt fest, ob der ListView-Header verändert werden kann
Public Property Let HeaderEnabled(ByVal oListView As ListView, _
  bHeaderEnabled As Boolean)
 
  Dim lHandle As Long
 
  lHandle = HeaderHwnd(oListView)
  If lHandle = 0 Then Exit Property
 
  EnableWindow lHandle, Abs(bHeaderEnabled)
End Property

Aufruf:

' deaktiviert den ListView-Header
' (die Spaltenbreite kann nicht verändert werden)
HeaderEnabled(ListView1) = False
' aktiviert den ListView-Header
' (die Spaltenbreite kann wieder verändert werden)
HeaderEnabled(ListView1) = False

Viel Spaß
 



Anzeige

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

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.