Attribute VB_Name = "BD_FlexGrid"
Option Explicit
'
Global Const P2I_TOT As String = "*"
' Fonction utilisée pour synchroniser la gestion des touches
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Function FGi(Display_List As Object, R As Integer, C As Integer) As Long
'========================================
' Auteur               : P2I (Nicolas ORNETO)
' Date création      : 08/10/2002
' Date modification :
'========================================
' On récupère la colonne d'un contrôle FlexGrid
'========================================
    '
    On Error Resume Next
    '
    FGi = C + Display_List.Cols * R
End Function
Sub KeyB_Click(KeyCode As Integer, Shift_Ent As Boolean, InputList As Object, FirstCol As Integer, LastCol As Integer, TOT_COl As Integer)
'=======================================================
' Auteur               : P2I (Nicolas ORNETO)
' Date création      : 07/11/2002
' Date modification :
'=======================================================
' Paramètres en entrée
' KeyCode       : Code de la touche clavier
' Shif_Ent      : Touche Shift appuyée Vrai/Faux
' InputList     : Contrôle MS FlexGrid
' FirstCol      : Première colonne visible de la grille
' LastCol       : Dernière colonne visible de la grille
' TOT_COl   : Ligne à éviter pour les lignes totalisation par exemple (-1 sinon utilisée)
'=======================================================
    Dim i As Integer
    Dim Trouve As Boolean
    '
    On Error Resume Next
    '
    ' Si Shift Tab alors Gauche
    If KeyCode = vbKeyRight And Shift_Ent = True Then
        KeyCode = vbKeyLeft
    End If
    '
    If KeyCode = vbKeyReturn Then
        ' Enter
        KeyCode = 0
    ElseIf KeyCode = vbKeyUp Then
        ' Haut
        If InputList.Row > InputList.FixedRows Then
            Trouve = False
            For i = InputList.Row - 1 To InputList.FixedRows Step -1
                If InputList.TextArray(FGi(InputList, i, TOT_COl)) <> P2I_TOT Then
                    Trouve = True
                    InputList.Row = i
                    Exit For
                End If
            Next i
            '
            If Not Trouve Then
                InputList.Row = InputList.FixedRows
            End If
        ElseIf InputList.Row = InputList.FixedRows Then
            Trouve = False
            For i = InputList.Rows - 1 To InputList.FixedRows Step -1
                If InputList.TextArray(FGi(InputList, i, TOT_COl)) <> P2I_TOT Then
                    Trouve = True
                    InputList.Row = i
                    Exit For
                End If
            Next i
            '
            If Not Trouve Then
                InputList.Row = InputList.FixedRows
            End If
        End If
    ElseIf KeyCode = vbKeyDown Then
        ' Bas
        If InputList.Row < InputList.Rows - 1 Then
            Trouve = False
            For i = InputList.Row + 1 To InputList.Rows - 1
                If InputList.TextArray(FGi(InputList, i, TOT_COl)) <> P2I_TOT Then
                    Trouve = True
                    InputList.Row = i
                    Exit For
                End If
            Next i
            '
            If Not Trouve Then
                InputList.Row = InputList.FixedRows
            End If
        Else
            InputList.Row = InputList.FixedRows
        End If
    ElseIf KeyCode = vbKeyLeft Then
        ' Gauche
        If InputList.Col = FirstCol Then
            InputList.Col = LastCol
        Else
            Trouve = False
            For i = InputList.Col - 1 To InputList.FixedCols Step -1
                If InputList.ColWidth(i) > 0 Then
                    InputList.Col = i
                    Trouve = True
                    Exit For
                End If
            Next i
            '
            If Not Trouve Then
                InputList.Col = FirstCol
            End If
        End If
    ElseIf KeyCode = vbKeyRight Then
        ' Droite
        If InputList.Col = LastCol Then
            InputList.Col = FirstCol
        Else
            Trouve = False
            For i = InputList.Col + 1 To InputList.Cols - 1
                If InputList.ColWidth(i) > 0 Then
                    InputList.Col = i
                    Trouve = True
                    Exit For
                End If
            Next i
            '
            If Not Trouve Then
                InputList.Col = LastCol
            End If
        End If
    End If
    '
End Sub

