Das ListView-Control gehört sicherlich zu einem der meist verwendeten Controls in der eigenen VB-Anwendung. Verwendet man das ListView-Control nicht im Report-Modus (Detail-Ansicht), kann der Anwender die einzelnen Elemente zur Laufzeit verschieben, was jedoch nicht immer gewollt ist. Leider verfügt das ListView-Control über keine entsprechende Eigenschaft, die das Verschieben der ListView-Elemente verhindert. Per Subclassing lässt sich diese Funktionalität jedoch mit wenig Aufwand nachrüsten. Erstellen Sie ein neues Projekt und platzieren auf die Form ein ListView-Control und ein ImageList-Control. Fügen Sie dem ImageList-Control ein Bildsymbol hinzu. Option Explicit Private Sub Form_Load() Dim i As Long ' ImageList-Control an das ListView binden Set ListView1.Icons = ImageList1 ' Ansicht auf "große Symbole" festlegen ListView1.View = lvwIcon ' ein paar ListView-Elemente erzeugen For i = 1 To 20 ListView1.ListItems.Add , , "Element " & CStr(i), 1 Next i ' Subclassing starten StartSubclass Me.hWnd End Sub Private Sub Form_Unload(Cancel As Integer) ' Wichtig! Das Subclassing muss ordnungegemäß ' wieder ausgeschaltet werden!!! EndSubclass End Sub Fügen Sie dem Projekt ein neues Modul mit folgendem Code hinzu: Option Explicit ' Benötigte API-Deklarationen 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 CallWindowProc Lib "user32" _ Alias "CallWindowProcA" ( _ ByVal lpPrevWndFunc As Long, _ ByVal hWnd As Long, _ ByVal Msg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Public Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ pDest As Any, _ pSource As Any, _ ByVal dwLength As Long) Private Const WM_NOTIFY = &H4E Private Const GWL_WNDPROC = -4 Private nOldWndProc As Long Private nHWnd As Long Private Type NMHDR hwndFrom As Long idFrom As Long code As Long End Type ' Nachrichten-Konstanten Public Const LVN_FIRST = -100& Public Const LVN_BEGINDRAG = (LVN_FIRST - 9) Public Sub StartSubclass(hWnd As Long) ' Subclassing starten nHWnd = hWnd nOldWndProc = SetWindowLong(nHWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Dim oMsg As NMHDR Select Case uMsg Case WM_NOTIFY ' Message-Struktur füllen Call CopyMemory(oMsg, ByVal lParam, Len(oMsg)) Select Case oMsg.code Case LVN_BEGINDRAG ' Nachrichtenverarbeitung auf "erledigt" setzen, ' so dass der Drag-Vorgang sofort abgebrochen wird WindowProc = 1 Exit Function End Select End Select ' Alle anderen Windows-Nachrichten an das Objekt weiterleiten WindowProc = CallWindowProc(nOldWndProc, hWnd, uMsg, wParam, lParam) End Function Public Sub EndSubclass() ' Subclassing beenden Call SetWindowLong(nHWnd, GWL_WNDPROC, nOldWndProc) End Sub Dieser Tipp wurde bereits 10.778 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 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. |