Claiyah
Messages postés580Date d'inscriptionmercredi 20 août 2008StatutMembreDernière intervention20 avril 2010
-
19 mai 2009 à 11:52
Claiyah
Messages postés580Date d'inscriptionmercredi 20 août 2008StatutMembreDernière intervention20 avril 2010
-
15 juin 2009 à 19:58
bonjour
y a t-il un moyen de faire un code pour trier des donnée dans une listview en vb6 en commancant par:
"~" "&" "@" "%" "+" puis un tri alphabétique
exemple:
~text11 &text15 @text3 %text78 +text12 cbdf abcd
j'ai trouvé des codes de tri et j'ai essayer de les modifier mais sans résultat
merci d'avance
Les yeux montrent la force de l'âme
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 12 juin 2009 à 09:43
simple, comme je te disai:
Private Function maComparaisonPerso(ByRef vsItem1 As String, ByRef vsItem2 As String) As Long
Dim nVal1 As Long
Dim nVal2 As Long
Dim i As Long
i = 1
Do While i <= Len(vsItem1) And i <= Len(vsItem2)
Select Case Mid$(vsItem1, i, 1)
Case "~": nVal1 = -20
Case "&": nVal1 = -19
Case "@": nVal1 = -18
Case "%": nVal1 = -17
Case "+": nVal1 = -16
Case Else: nVal1 = Asc(Mid$(vsItem1, i, 1))
End Select
Select Case Mid$(vsItem2, i, 1)
Case "~": nVal2 = -20
Case "&": nVal2 = -19
Case "@": nVal2 = -18
Case "%": nVal2 = -17
Case "+": nVal2 = -16
Case Else: nVal2 = Asc(Mid$(vsItem2, i, 1))
End Select
'# idem pour sChar2 (et nVal2, donc)
maComparaisonPerso = Sgn(nVal1 - nVal2)
If maComparaisonPerso Then
Exit Function
End If
i = i + 1
Loop
End Function
je te files un zip par mail, si tu me files ton adresse (en Message Perso)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 19 mai 2009 à 16:55
en gros, quand tu actives la propriété Sorted de ton ListView, et en jouant avec SortOrder et SortKey, il est capable de trier tes colonnes.
normallement, on fait:
Private Sub ListView2_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
If ListView2.SortKey = ColumnHeader.Index - 1 Then
'# on inverse le tri
ListView2.SortOrder IIf(ListView2.SortOrder lvwAscending, lvwDescending, lvwAscending)
Else
'# tri croissant sur la colonne cliquée
ListView2.SortKey = ColumnHeader.Index - 1
ListView2.SortOrder = lvwAscending
End If
End Sub
et hop ! le tri est fait, en cliquant sur les colonnes, etc. ca roule.
enfin.... presque.
le tri joue bêtement avec la table ascii (tri alphabétique)
En faisant la même chose, mais en désactivant la propriété Sorted, il suffit d'ajouter cette ligne:
SortListView ListView2, eType
pour être en mesure de trier nous meme les elements.
eType nous permet d'aller au plus prêt: spécifier le type de colonne a laquelle on a affaire (date, numérique, string ...)
toi, tu cherche a effectuer un tri perso, tu peux mettre ici la valeur que tu souhaites (négative, par exemple...)
et modifier la function CompareFunc (dans le module1) pour personnaliser ton tri.
tu as juste a renvoyer -1, 0 ou 1 comme indiqué en description de ma source.
en gros, faire:
SortListView ListView2, -99 '# valeur indiquant qu'il faut trier "~" "&" "@" "%" "+" puis un tri alphabétique
et dans la CompareProc, donc:
Select Case meDataType
Case -99
CompareProc = maComparaisonPerso(sItem1, sItem2)
Case vbSingle.....
[...]
End Select
End Function
Private Function maComparaisonPerso(Byref vsItem1 As String, Byref vsItem2 As String) as Long
[...] '# Ici comparer les deux mots
End Function
le test est aisé...
tu boucle sur les caractères de chaque mot.
si sChar1 <> sChar2 Alors
Select case sChar1
Case "~": nVal1 = -20
Case "&": nVal1 = -19
Case "@": nVal1 = -18
Case "%": nVal1 = -17
Case "+": nVal1 = -16
Case Else: nVal1 = Asc(sChar1)
End Select
'# idem pour sChar2 (et nVal2, donc)
Compare = sgn(nVal1 - nVal2)
Exit Function
End If
Loop