VB-Homepage Tipp 314

über welcher Zelle in einem MSFlexGrid befindet sich die Maus

Das MouseMove Ereignis ist ja gleichzusetzen mit dem MouseOver in der Internetprogrammierung, darüber läßt sich also in einem Control feststellen,
ob sich die Maus darüber befindet.
In diesem Ereignis sind auch ständig die X-Y Koordinaten der Maus abfragbar.

Unser Tipp wertet nun diese Koordinaten aus und vergleicht sie mit dem Gridcontrol, um die Zelle zu ermitteln, über welcher die Maus momentan steht.

Für ein Demoprojekt benötigen Sie neben einer Form, natürlich ein MS Flexgrid (MSFLXGRD.OCX) Control, um beim Test auch etwas angezeigt zu bekommen, müßten Sie diesem noch ein paar Werte spendieren und außerdem noch ein Label Objekt (Label1), der uns den Wert der Zelle anzeigen soll, über dem momentan die Maus steht.

Alles, was Sie an Deklaration benötigen ist in der nachfolgende Funktion enthalten.

Private Function GetRowColTwips(Grid As Object, x As Single, y As Single, colnum As Integer, rownum As Integer)

Dim Count As Integer
Dim minRow As Integer, minCol As Integer

colnum = -1
rownum = -1

With Grid
   If .AllowUserResizing = 0 Or .AllowUserResizing = 1 Then minRow = (y / .RowHeight(0)) - 1
   If .AllowUserResizing = 0 Or .AllowUserResizing = 2 Then minCol = (x / .ColWidth(0) - 1)
   If (minCol < 0) Then minCol = 0
   If (minRow < 0) Then minRow = 0

   For Count = minCol To .Cols - 1
      If .ColPos(Count) <= x And (.ColPos(Count) + .ColWidth(Count)) >= x Then
         colnum = Count
         Exit For
      End If

   Next Count
  
   For Count = minRow To .Rows - 1
      If .RowPos(Count) <= y And (.RowPos(Count) + .RowHeight(Count)) >= y Then
         rownum = Count
         Exit For
      End If
   Next Count
End With

Zeile = rownum
Spalte = colnum

End Function

Der Aufruf der Funktion erfolgt im
MSFlexGrid1_MouseMove Ereignis

Dim Col As Integer, Row As Integer

x = GetRowColTwips(MSFlexGrid1, x, y, MSFlexGrid1.Col, MSFlexGrid1.Row)

If x <> 0 Then
  MsgBox "Fehler"
Else
  Label1.Caption = "Spalte: " & Spalte & " / Zeile: " & Zeile
End If

Starten Sie Ihr Projekt mit F5 und bewegen Sie die Maus über dem GridControl,
im Label wird der Wert der Zelle angezeigt, über dem sich die Maus befindet.


Tipp-Download

Quelle : Chris Willetts / cdjw100@york.ac.uk

Zurück zur Übersichtsseite