vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: Im MSHFlexGrid scrollen... 
Autor: ModeratorDieter (Moderator)
Datum: 29.02.04 12:40

Das liegt am Maustreiber. Im Normalfall sollte das Scrollen via WheelMouse möglich sein, wenn der korrekte Maustreiber installiert ist.

Um jedoch auf Nummer "Sicher" zu gehen, kannst Du das Scrollen via Subclassing lösen:

Erstelle ein Modul mit folgendem Code:
Option Explicit
 
' benötigte API-Funktionen
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
 
' Konstante für das Subclassing
Private Const GWL_WNDPROC = (-4)
Private Const WM_MOUSEWHEEL = &H20A
 
' Variable für die Original-Addresse der Windowsprozedur
Private oldWndProc As Long
 
' Subclassing starten
Public Sub StartSubclass(ByVal hWnd As Long)
  oldWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc)
End Sub
 
' Subclassing beenden
Public Sub StopSubclass(ByVal hWnd As Long)
  SetWindowLong hWnd, GWL_WNDPROC, oldWndProc
End Sub
 
' Windows-Messages abfragen
Public Function WndProc(ByVal hWnd As Long, _
  ByVal uMsg As Long, _
  ByVal wParam As Long, _
  ByVal lParam As Long) As Long
 
  ' WM_MOUSEWHEEL-Message abfragen!
  If uMsg = WM_MOUSEWHEEL Then
    ' Mausrad wurde gedreht!
    If wParam < 0 Then
      ' nach hinten: ScrollDown
      SendKeys "%{Down}"
    Else
      ' nach vorne: ScrollUp
      SendKeys "%{Up}"
    End If
  End If
 
  WndProc = CallWindowProc(oldWndProc, hWnd, uMsg, wParam, ByVal lParam)
End Function
Und jetzt noch folgenden Code in den Codeteil der Form einfügen, auf der sich das FlexGrid befindet:

Private Sub MSFlexGrid1_GotFocus()
  ' Subclassing aktivieren
  StartSubclass MSFlexGrid1.hWnd
End Sub
 
Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
  ' WheelMouse?
  With MSFlexGrid1
    If (KeyCode = vbKeyUp Or KeyCode = vbKeyDown) And (Shift = 4) Then
      Select Case KeyCode
        Case vbKeyUp
          KeyCode = 0
          If .TopRow > 1 Then .TopRow = .TopRow - 1
        Case vbKeyDown
          KeyCode = 0
          If .TopRow < .Rows - 1 Then .TopRow = .TopRow + 1
      End Select
    End If
  End With
End Sub
 
Private Sub MSFlexGrid1_LostFocus()
  ' Subclassing beenden
  StopSubclass MSFlexGrid1.hWnd
End Sub
Der Trick hierbei ist folgender:
Erhält das FlexGrid den Fokus wird das Subclassing gestartet. In der WndProc wird dann die Nachricht WM_MOUSEWHEEL abgefragt und je nach Drehrichtung des Scrollrades die Tastatenkombination "ALT+Up" bzw. "ALT+Down" an das FlexGrid gesendet. Im KeyDown-Ereignis des FlexGrids braucht man jetzt nur diese beiden Tastenkombinationen abfragen. Verliert das Grid den Fokus, wird das Subclassing wieder ausgeschaltet.

Auf diese Weise kann man nahezu jedes Control mit WheelMouse-Funktionalität ausstatten

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Im MSHFlexGrid scrollen...1.742Konsi29.02.04 11:49
Re: Im MSHFlexGrid scrollen...4.618ModeratorDieter29.02.04 12:40
Re: Im MSHFlexGrid scrollen...1.594Konsi29.02.04 15:55

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel