Ce code permet d'alterner pour chaque ligne SOIT la couleur de la police, SOIT la couleur l'arrière-plan, SOIT les deux. Une ListView est bien plus claire avec des lignes présentant une alternance de couleurs.
POUR ALTERNER LA COULEUR DE LA POLICE:
Dans la plupart des cas, une ListView est remplie via une boucle (For i = 1 to ... next i). Il suffit de vérifier si "i" est pair ou impair pour attribuer, selon la cas, une couleur de police particulière.
POUR ALTERNER LA COULEUR DE FOND:
Il suffit de créer par programmation une image qui servira d'arrière-plan à la ListView. Cette image devra comporter une alternance de couleur. Chaque bande horizontale de couleur devra avoir exactement la hauteur d'une ligne de données de la ListView.
Conclusion :
Si ce code est une redite, désolé.
12 janv. 2006 à 08:44
12 janv. 2006 à 08:51
If Round(i / 2) <> i / 2 Then
c'est plus performant d'utiliser
If i mod 2 = 0 Then
12 janv. 2006 à 10:49
à noter que ce test pourrait être :
If i \ 2 <> i / 2 Then
qui est là plus efficace que Round.
le principe est interessant, je dois dire. le chargement dynamique d'un picturebox n'est pas du meilleur gout, mais a l'avantage d'etre efficace.
j'ai nettoyé un peu le code :
Private Sub AltLVBackground(Lv As ListView, ByVal BackColorOne As OLE_COLOR, ByVal BackColorTwo As OLE_COLOR)
Dim lH As Long
Dim picAlt As PictureBox
With Lv
If .View = lvwReport Then
Set picAlt = Me.Controls.Add("VB.PictureBox", "picAlt")
.PictureAlignment = lvwTile
If .ListItems.Count > 0 Then
lH = .ListItems(1).Height
Else
.ListItems.Add
lH = .ListItems(1).Height
.ListItems.Remove (1)
End If
With picAlt
.ScaleMode = Me.ScaleMode
.BackColor = BackColorOne
.AutoRedraw = True
.Height = lH * 2
.BorderStyle = 0
.Width = 1
picAlt.Line (0, lH)-(0, lH * 2), BackColorTwo
Set Lv.Picture = .Image
End With
Set picAlt = Nothing
Me.Controls.Remove "picAlt"
Else
Set .Picture = Nothing
End If
End With
End Sub
12 janv. 2006 à 12:06
Concernant la technique du chargement dynamique d'une PictureBox, ça ne ralentit guère l'affichage et ça me semble assez propre. Maintenant, s'il existe d'autres solutions, cela m'intéresserait de les connaître: je n'ai pas vu grand chose sur ce sujet qui soit valable. Mais je n'ai peut-être pas fait le tour des recherches possibles.
12 janv. 2006 à 13:11
picturebox de 1 de large (mode Tile activé)
background même pour une listview vide
suppression du background, si listview en vue <> lvwReport
non modification du ScaleMode du Parent
la pictureBox fonctionne, tu peux garder cela comme c'est.
une autre solution serait de créer (API) un DC, un HBITMAP, et de génerer un IPictureDisp avec tout ca... un peu complexe, pour pas grand chose... (coté mémoire, on y gagne, je pense).
reste que vu que cette opération n'est a effectuer qu'une seule et unique fois, on est tranquille, et pas trop regardant sur ce point.
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.