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

tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 20 mars 2007 à 11:09 - Dernière réponse : tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention
- 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
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 20 mars 2007 à 14:48
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 

Merci tof008 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de tof008
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 20 mars 2007 à 11:15
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
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 20 mars 2007 à 14:12
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
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 20 mars 2007 à 14:24
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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 20 mars 2007 à 14:33
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
tof008 707 Messages postés jeudi 5 mai 2005Date d'inscription 5 janvier 2010 Dernière intervention - 20 mars 2007 à 14:52
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.