IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] [Interface] Grille avec combobox


Sujet :

VB 6 et antérieur

  1. #1
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut [VB6] [Interface] Grille avec combobox
    Salut

    J'utilise un datagrid lié à une BD en ADO. Je veux modifier mes données via le datagrid (là, pas de prob) mais certains champs ont des données figées dans un combobox lors de l'encodage (via VB l'encodage et là, pas dans un datagrid).

    Vous avez compris que lorsque je me trouve sur ces champs, j'aimerais avoir un combobox de sélection dans ma cellule du datagrid.

    Est-ce possible ? Si oui, comment ?

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    Voilà un exemple d'une FlexGrille avec un TextBox, tu as juste à le remplacer par une ComboBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Public Sub flgGrille_EnterCell()
            'Affichage du textbox de saisie de données
            '=========================================
            txtSaisie.Text = flgGrille.TextMatrix(flgGrille.Row, flgGrille.Col)
            txtSaisie.Top = flgGrille.CellTop + flgGrille.Top
            txtSaisie.Left = flgGrille.CellLeft + flgGrille.Left
            txtSaisie.Height = flgGrille.CellHeight
            txtSaisie.Width = flgGrille.CellWidth
            Select Case flgGrille.ColAlignment(flgGrille.Col)
                Case flexAlignLeftCenter
                    txtSaisie.Alignment = vbLeftJustify
                Case flexAlignCenterCenter
                    txtSaisie.Alignment = vbCenter
                Case flexAlignRightCenter
                    txtSaisie.Alignment = vbRightJustify
            End Select
            txtSaisie.Visible = True
            txtSaisie.SelStart = Len(txtSaisie.Text)
    On Error Resume Next
            txtSaisie.SetFocus
    End Sub
     
    Public Sub flgGrille_LeaveCell()
        'Enregistrement de la saisie dans la grille
        '==========================================
        If txtSaisie.Visible Then
            flgGrille.TextMatrix(flgGrille.Row, flgGrille.Col) = txtSaisie.Text
            txtSaisie.Visible = False
        End If
    End Sub
     
    Private Sub txtSaisie_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
            Call flgGrille_LeaveCell
            If flgGrille.Col + 1 < flgGrille.Cols Then
                flgGrille.Col = flgGrille.Col + 1
            Else
                flgGrille.Col = flgGrille.FixedCols
                If flgGrille.Row + 1 < flgGrille.Rows Then flgGrille.Row = flgGrille.Row + 1
            End If
            Call flgGrille_EnterCell
        ElseIf KeyAscii = vbKeyEscape Then
            txtSaisie.Visible = False
        End If
    End Sub
     
    Private Sub flgGrille_Scroll()
        flgGrille_LeaveCell
    End Sub

  3. #3
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Un grand merci Troopers, ta réponse va dans le sens de ma réflexion. Je me doutais bien qu'il fallait coder tout mais je posais la question afin d'être sûre qu'une fonctionnalité de VB n'existait pas.

    Ton code est superbe et je l'adapte dans mon projet.

    Merci et bonne continuation

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    Si tuveux j'ai le code pour redimensionner le textbox lorsque tu redimensionne une colonne....

  5. #5
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Si tu as un moment pour me l'envoyer ce serait super !

    Grand merci !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    Par contre c'est un peu plus compliquer...

    Il faut utiliser le sous classement de la flexgrille par les API car on a pas d'évènement ChangeWidth sur une colonne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Form_Load()
            'Sous classement
            gPrevWndProc = SetWindowLong(flgGrille.hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
        'fin du sous classement de la grille
        SetWindowLong flgGrille.hwnd, GWL_WNDPROC, gPrevWndProc
    End Sub
    dans un module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Private Const WM_SIZE = &H5
    Private Const WM_PAINT = &HF
     
    Public Const GWL_WNDPROC = (-4)
     
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     
    Public gPrevWndProc As Long
     
    'Sous classement de la grille de saisie
    '======================================
    Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If uMsg = WM_SIZE Or uMsg = WM_PAINT Then
            If frmGrille.txtSaisie.Visible Then
                frmGrille.txtSaisie.Top = frmGrille.flgGrille.CellTop + frmGrille.flgGrille.Top
                frmGrille.txtSaisie.Left = frmGrille.flgGrille.CellLeft + frmGrille.flgGrille.Left
                frmGrille.txtSaisie.Height = frmGrille.flgGrille.CellHeight
                frmGrille.txtSaisie.Width = frmGrille.flgGrille.CellWidth
            End If
        End If
        WindowProc = CallWindowProc(gPrevWndProc, hwnd, uMsg, wParam, lParam)
    End Function

    Attention! Le sous classement par les API a tendance à faire planter Visual Basic en debuggage, mais ça fonctionne très bien en compilé....

  7. #7
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Re-merci Troopers !

    Effectivement c'est un peu plus complexe surtout quand on ne touche pas souvent aux API. Je viens d'ailleurs de mettre un post pour le path d'un fichier via API car j'ai des prob de compréhension vis-à-vis des arguments de ces onctions particulières.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  2. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  3. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  4. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 09h51
  5. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/09/2002, 15h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo