cs_Eric84
Messages postés25Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention17 janvier 2006
-
22 mars 2004 à 19:36
lol_brossier
Messages postés6Date d'inscriptionmercredi 25 février 2004StatutMembreDernière intervention14 janvier 2005
-
10 sept. 2005 à 15:36
Salut
J'aimerais savoir comment mettre une image en background sur ma listview (la listview est sur une image plus grande, et il faudrais que la section caché devienne le background en couleur plus pale)
J'ai vu sur le forum une question semblable qui parlais de TRect mais je sais pas trop comment m'y prendre.
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 24 mars 2004 à 17:47
Salut,
Tu peux essayer ça
procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
var
rect : TRect;
Image : TImage;
i,j : Integer;
col : TColor ;
procedure eclaire(var col : TColor);
var
r,v,b : byte;
begin
r:=col mod $100; // extraction du rouge
v:= ( col shr 8 ) mod $100; // ...du vert
b:= ( col shr 16 ) mod $100; // ... du bleu
r:= (r+$ff) div 2; // mélange avec du blanc
v:= (v+$ff) div 2;
b:= (b+$ff) div 2;
col := r + $100 * v + $10000 * b; // nouvelle couleur
end;
begin
Rect.Top := Listview1.Top+2;
Rect.Bottom := Rect.Top + Listview1.ClientHeight ;
Rect.Left := Listview1.Left+2;
Rect.Right := Rect.Left + Listview1.ClientWidth ;
Image := TImage.Create(self);
Image.Width := Arect.Right-Arect.Left+1;
Image.Height := Arect.Bottom-Arect.Top+1;
Image.Canvas.CopyRect(ARect,Image1.Canvas,Rect);
for j:=0 to Arect.Bottom-1 do
for i:=0 to Arect.right-1 do
begin
col := Image.Canvas.Pixels[i,j];
eclaire(col);
Image.Canvas.Pixels[i,j] := col;
end;
ListView1.Canvas.CopyRect(Arect,Image.Canvas,ARect);
Image.Free
end;
Explications :
-Rect est le rectangle de l'image de fond (Image1) derrière le Listview
-On copie cette zone dans Image (TImage temporaire)
-Pixel par Pixel on modifie les couleurs d'Image (fonction Eclaire)
-On recopie Image modifiée dans le canvas de ListView
cs_Eric84
Messages postés25Date d'inscriptionvendredi 21 février 2003StatutMembreDernière intervention17 janvier 2006 25 mars 2004 à 04:29
Ouais ca fonctionne, sauf, c'est normal qu'on puisse pas utiliser les jpg ? Il ne semble accepter que les bitmap.
Et c'est normal si ca semble lagger lorsqu'on clique sur un élément de la listview ? (licone cliquer disparais pendant 1-2 seconde et réapparais par la suite)
lol_brossier
Messages postés6Date d'inscriptionmercredi 25 février 2004StatutMembreDernière intervention14 janvier 2005 10 sept. 2005 à 15:36
Ca marche tres bien ce code mais avez vous une idée pour que l'mage de fond soit redessiné a chaque changement de dimension de la fenetre ? Parce que pour moi si je modifie la taille de la fenetre ca modife mon image et je voudrais donc qu'elle soit redessiné apres chaque mouvement.
Merci