[VB6] multi selection dans un MSFlexgrid [Résolu]

Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
- - Dernière réponse : tof008
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
- 20 mars 2007 à 14:52
Bonjour,

Aprés plusieurs recherches sur le forum, les codes, etc..., je n'ai pas réussi à résoudre mon probleme :
Je voudrais (tout simplement) réussir à faire une multi selection (plusieurs lignes) sur un MSFlexGrid!
Si jamais quelqu'un avait une idée, il m'éviterait d'envoyer mon clavier dans mon écran!!!

Merci pour votre aide, bonne journée.

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
6
3
Merci
Ouf! A force de recherches et de tests, voila une solution pour une selection multilignes (qui ne se suivent pas) dans un FlexGrid

Ca a l'air compliqué mais ca marche nickel

Créez juste une form avec un MSFlexGrid appelé MSFlexGrid1 et un bouton appelé command1 :

OptionExplicit

PrivateDeclareFunction LockWindowUpdate Lib"user32" _

   (ByVal hwnd AsLong) _

   AsLong

Private m_booKeyCtrl AsBoolean
Private m_booKeyShift AsBoolean
Private m_booProcessSelected AsBoolean

PrivateSub Command1_Click()

With MSFlexGrid1

   m_booProcessSelected = True
   LockWindowUpdate .hwnd

   Dim lngColSave AsLong: lngColSave = .Col

   Dim lngRowSave AsLong: lngRowSave = .Row

   Dim lngRow AsLong
   For lngRow = .FixedRows To .Rows - 1

      .Row = lngRow

      If .CellBackColor = .BackColorSel Then
         Debug.Print .Row & " <- Selected"
      EndIf
   Next lngRow

   .Col = lngColSave

   .Row = lngRowSave

   LockWindowUpdate 0

   m_booProcessSelected = False
EndWith
EndSub

PrivateSub Form_Load()

   

   Form1.Move _

      Screen.Width * 0.1, _

      Screen.Height * 0.1, _

      Screen.Width * 0.8, _

      Screen.Height * 0.8

      

   With MSFlexGrid1

      .AllowUserResizing = flexResizeColumns

      .AllowBigSelection = False
      .Cols = 4

      .ColWidth(0) = 400

      .FillStyle = flexFillRepeat

      .FocusRect = flexFocusNone

      .HighLight = flexHighlightNever

      .Rows = 1

      .SelectionMode = flexSelectionFree

      Dim lngIndex AsLong
      For lngIndex = 1 To .Cols - 1

         .ColWidth(lngIndex) = 1500

      Next lngIndex

   EndWith
   

   Dim intIndex AsInteger
   For intIndex = 1 To 500

      MSFlexGrid1.AddItem "" & vbTab & "x" & Format(intIndex, "000") & vbTab & _

      Str(Time()) & vbTab & String(intIndex, "*")

   Next intIndex

EndSub

PrivateSub Form_Resize()

WithMe
   If .WindowState = vbMinimized ThenExitSub
   Command1.Move 0, 0.9 * .ScaleHeight, .ScaleWidth, 0.1 * .ScaleHeight

   MSFlexGrid1.Move 0, 0, .ScaleWidth, 0.9 * .ScaleHeight

EndWith
EndSub

PrivateSub MSFlexGrid1_KeyDown(KeyCode AsInteger, Shift AsInteger)

    

   If Shift = vbShiftMask _

   Then
      m_booKeyShift = True
   EndIf
   If Shift = vbCtrlMask _

   Then
      m_booKeyCtrl = True
   EndIf

EndSub

PrivateSub MSFlexGrid1_Keyup(KeyCode AsInteger, Shift AsInteger)

With MSFlexGrid1

    

   m_booKeyCtrl = False
   m_booKeyShift = False

EndWith
EndSub

PrivateSub MSFlexGrid1_RowColChange()

With MSFlexGrid1

   Static booBusy AsBoolean
   If m_booKeyShift _

   Or m_booProcessSelected _

   Or booBusy _

   Then
      ExitSub
   EndIf
   booBusy = True
    

   Dim intThisCol AsInteger
   Dim intThisRow AsInteger
   intThisCol = .Col

   intThisRow = .Row

    

   LockWindowUpdate .hwnd

    

   If m_booKeyCtrl _

   Then
      .Col = 1

      .Row = intThisRow

      .ColSel = .Cols - 1

      .RowSel = intThisRow

      If .CellBackColor = .BackColorSel _

      Then
         .CellBackColor = .BackColor

         .CellForeColor = .ForeColor

      Else
         .CellBackColor = .BackColorSel

         .CellForeColor = .ForeColorSel

      EndIf
   Else
      .Col = 1

      .Row = 1

      .ColSel = .Cols - 1

      .RowSel = .Rows - 1

      .FillStyle = flexFillRepeat

      .CellBackColor = .BackColor

      .CellForeColor = .ForeColor

      .Col = 1

      .Row = intThisRow

      .ColSel = .Cols - 1

      .RowSel = intThisRow

      .CellBackColor = .BackColorSel

      .CellForeColor = .ForeColorSel

   EndIf
    

   .Col = intThisCol

   .Row = intThisRow

    

   LockWindowUpdate 0&

   booBusy = False
    

EndWith
EndSub

PrivateSub MSFlexGrid1_SelChange()

With MSFlexGrid1

    

   IfNot m_booKeyShift _

   Then
      ExitSub
   EndIf
    

   Dim intThisCol AsInteger
   Dim intThisRow AsInteger
   intThisCol = .Col

   intThisRow = .Row

    

   Dim intNextCol AsInteger
   Dim intNextRow AsInteger
   intNextCol = .ColSel

   intNextRow = .RowSel

    

   LockWindowUpdate .hwnd

    

   ' Clear Screen

   .Col = 1

   .Row = 1

   .ColSel = .Cols - 1

   .RowSel = .Rows - 1

   .FillStyle = flexFillRepeat

   .CellBackColor = .BackColor

   .CellForeColor = .ForeColor

    

   ' Update Multiline

   .Col = 1

   .Row = intThisRow

   .ColSel = .Cols - 1

   .RowSel = intNextRow

   .FillStyle = flexFillRepeat

   .CellBackColor = .BackColorSel

   .CellForeColor = .ForeColorSel

   

   LockWindowUpdate 0&

    

Tag900:

    

   .Col = intNextCol

   .Row = intNextRow

EndWith
EndSub

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 146 internautes nous ont dit merci ce mois-ci

Commenter la réponse de tof008
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
4
0
Merci
Salut 505618 tof008! Ca faisait longtemps!
=Controles#select_flexgrid
http://vb.developpez.com/faq/?page=Controles#select_flexgrid

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
6
0
Merci
Hey [auteurdetail.aspx?ID=786090 Drikce06]!

Effectivement ca faisait un petit moment... Je n'avais pas de problêmes insurmontables ces derniers temps lol!
Je te remercie pour ton lien, mais en fait, ce que je voudrai c'est pouvoir selectionner plusieurs lignes, mais qui ne se suivent pas obligatoirement : du genre la ligne 1 la troisieme, et la derniere...
Et je n'y arriiiiiiive pas!!!! argh!
Je vais continuer mes recherches! Merci pour ton aide

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
Commenter la réponse de tof008
Messages postés
2247
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
4
0
Merci
Quand j'ai vu ça, j'en est déduit que tu pouvais sélectionner plusieurs lignes étant donné qu'il donne le code pour pouvoir en sélectionner qu"une seule!

Mais peut être qu'effectivement tu as la possibilité de sélectionner seulement des lignes qui se suivent!

Bon, hé bien au prochain casse tête alors!

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Bonjour,

Il ne te viendait pas à l'idée, par exemple, d'utiliser l'événement MouseDow associé avec le bouton droit de la souris (entre autres possibilités de TON choix ergonomique) pour alimenter un tableau, une listbox invisible, ou ce que tu veux ?
Puis, bien sur, utiliser ce que tu as ainsi "alimenté"...
C'est ce qui me vient en tout premier à l'esprit, sans même réfléchir ...
Commenter la réponse de jmfmarques
Messages postés
707
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
6
0
Merci
[auteurdetail.aspx?ID=615490 jmfmarques]
je viens de voir ton message, mais le probleme c'est qu'il faut justement que les choix soient visibles par l'utilisateur pour qu'il puisse voir ou vérifier les élements choisis...
Bon, au final, j'ai eu du bol de trouver un code correct que j'ai adapté à ma sauce...

Merci pour ton aide quand même!

         (Si la réponse vous convient, appuyez sur réponse acceptée...).

                           Noubliez pas de lire le REGLEMENT 
Commenter la réponse de tof008