Une image en background

cs_Eric84 Messages postés 25 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 17 janvier 2006 - 22 mars 2004 à 19:36
lol_brossier Messages postés 6 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 14 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.

Quelqu'un peut m'aider ?

Merci

6 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
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

J'ai pas mieux !

Kenavo

Code, Code, Codec !
0
cs_Eric84 Messages postés 25 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 17 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)

Merci
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
25 mars 2004 à 12:03
Ben oui,

La fonction CopyRect ne fonctionne pas avec les Jpeg.

Le temps doit provenir des appels à la fonction Pixels qui est très lente. tu peux essayer en virant les boucles for

Si quelqu'un connait un truc !

Kenavo

Code, Code, Codec !
0
cs_Eric84 Messages postés 25 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 17 janvier 2006
26 mars 2004 à 04:11
Ok merci bcp :P
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_raybane Messages postés 2 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 9 avril 2005
9 avril 2005 à 09:21
Salut tout le monde, c'est mon premier post, en espérant que ca serve!





procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;

const ARect: TRect; var DefaultDraw: Boolean);

var jpg :TJpegImage;

Bmp :TBitMap;



begin

//création des images

Jpg := TJpegImage.Create;

Bmp := TBitMap.Create;



Try

// on indique le chemin du jpg

Jpg.LoadFromFile('D:\day.jpg');

//on adapte la taille du bmp a celui du listview

Bmp.Width := Listview1.Width;

Bmp.Height := Listview1.Height;

//on étire l'image du bmp

Bmp.Canvas.StretchDraw(Bmp.Canvas.ClipRect,Jpg);

Jpg.Assign(Bmp);

//on assigne l'image au listview

ListView1.Canvas.CopyRect(Arect,Bmp.Canvas,ARect);

Finally

//on libere les ressources

Jpg .Free;

Bmp .Free;

end;
0
lol_brossier Messages postés 6 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 14 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
0
Rejoignez-nous