[DELPHI] Image dans une listbox...

Image dans une listbox... [DELPHI] - Delphi/Pascal - Programmation

Marsh Posté le 10-11-2012 à 14:07:37    

Bonjour,
 
j'ai un "soucis" que je n'arrive pas à résoudre.
Voilà ce que j'ai pour l'instant :  
Je récupère des images en jpg (affiches de films)  que je stocke dans un répertoire (admettons c:\tempimages). Ces images n'ont pas forcément les mêmes dimensions.
 
Je voudrais mettre ces images dans un listbox (à côté de chaque image, je mettrais un peu de texte).
Seulement je ne sais pas comment faire.  
 
J'ai un programme dans lequel je fais à peu près la même chose MAIS j'ai une imagelist remplie au préalable. (je passe par mesureitem ondrawitem ou quelque chose comme cela.) Donc làpas de pb.
 
Le pb c'est qu'ici : je ne sais pas à l'avance combien d'images je vais avoir (de 1 à 100 suivant les requêtes) ni même les dimensions de ces images.
 
Voilà, si quelqu'un sait comment s'y prendre je l'en serait grandement reconnaissant.
 
Merci pour votre aide.

Reply

Marsh Posté le 10-11-2012 à 14:07:37   

Reply

Marsh Posté le 17-11-2012 à 16:47:31    

davidmarli a écrit :

Bonjour,
 
j'ai un "soucis" que je n'arrive pas à résoudre.
Voilà ce que j'ai pour l'instant :  
Je récupère des images en jpg (affiches de films)  que je stocke dans un répertoire (admettons c:\tempimages). Ces images n'ont pas forcément les mêmes dimensions.
 
Je voudrais mettre ces images dans un listbox (à côté de chaque image, je mettrais un peu de texte).
Seulement je ne sais pas comment faire.  
 
J'ai un programme dans lequel je fais à peu près la même chose MAIS j'ai une imagelist remplie au préalable. (je passe par mesureitem ondrawitem ou quelque chose comme cela.) Donc làpas de pb.
 
Le pb c'est qu'ici : je ne sais pas à l'avance combien d'images je vais avoir (de 1 à 100 suivant les requêtes) ni même les dimensions de ces images.
 
Voilà, si quelqu'un sait comment s'y prendre je l'en serait grandement reconnaissant.
 
Merci pour votre aide.


 
Peut-être en listant les noms des fichiers images dans un Memo ou  ListBox, et répondre à un clic en affichant l'image dans une Form ? Laquelle disparaît qd on appui sur une bouton : 'OK'. Et tu reviens à ta liste.  
 
Mais une liste d'images, visualisables si j'ai bien compris, là, ça me dépasse :heink:

Reply

Marsh Posté le 17-11-2012 à 18:10:54    

Merci, entre temps j'avais la solution sur un forum.  
J'arrive bien à afficher les images dans ma listbox.

Reply

Marsh Posté le 17-11-2012 à 20:15:21    

davidmarli a écrit :

Merci, entre temps j'avais la solution sur un forum.  
J'arrive bien à afficher les images dans ma listbox.


Si tu peux donner le lien,  sans indiscrétion ? Ca m'intéresse ;)

Reply

Marsh Posté le 21-12-2012 à 23:04:50    

Bonjour,
 
avec bp de retard, voici ce que j'ai mis dans le listboxdrawitem :  
 

Citation :

procedure TFormSearch.CheckListBox1DrawItem(Control: TWinControl;
  Index: Integer; Rect: TRect; State: TOwnerDrawState);
var monimage:Tbitmap;
jpeg: TJpegImage;
 R: TRect;
 tabs:array [1..10] of string;
 ste,ste2,cas:string;
 nblignes,i,nbcaract,maxcast:integer;
begin
with (Control as TCheckListBox).Canvas do
  begin
    monimage:=tbitmap.Create;
    jpeg := TJpegImage.Create;
    if form1.mov[index].tmdb.image='Non disponible' then
    begin
     //form1.mov[index].image:=extractfilepath(application.exename)+'photo_non_disponible.jpg';
     jpeg.LoadFromFile(extractfilepath(application.exename)+'photo_non_disponible.jpg');
    end
    else
    if fileexists(extractfilepath(application.ExeName)+'tmpimages\'+form1.mov[index].tmdb.code_id+'.jpg') then
    begin
     jpeg.LoadFromFile(extractfilepath(application.ExeName)+'tmpimages\'+form1.mov[index].tmdb.code_id+'.jpg');
    end;
 
  //  if form1.mov[index+1].poster=extractfilepath(application.exename)+'photo_non_disponible.jpg' then  jpeg.LoadFromFile(extractfilepath(application.exename)+'photo_non_disponible.jpg');
 
     monimage.Assign(jpeg);
     FillRect(Rect);
     //monimage.LoadFromFile();
     if monimage<>nil then
     begin
        R:=Bounds(
        Rect.Left+2,
        Rect.Top+2,
        Rect.Bottom-Rect.Top-2,
        Rect.Bottom-Rect.top-2);
        StretchDraw(R,monimage);
    end;
 
   Checklistbox1.canvas.Font.Size:=14;
   Checklistbox1.Canvas.Font.Style := Checklistbox1.Canvas.Font.Style + [fsBold];
   TextOut(Rect.left+200,Rect.Top+5,form1.mov[index].tmdb.nom);
   Checklistbox1.canvas.Font.Size:=11;
 
   Checklistbox1.Canvas.Font.Style := checklistbox1.Canvas.Font.Style - [fsBold];
 
   Textout(Rect.left+200,Rect.TOP+5+25,'Année : '+form1.mov[index].tmdb.release_date);
    Checklistbox1.canvas.Font.Size:=8;
 
   Checklistbox1.Canvas.Font.Style := checklistbox1.Canvas.Font.Style - [fsBold];
   cas:='';
   maxcast:=0;
   if form1.mov[index].tmdb.nbcast=0 then cas:='Pas trouvé'
   else if form1.mov[index].tmdb.nbcast>4 then maxcast:=5
        else maxcast:=form1.mov[index].tmdb.nbcast;
 
 
   if maxcast=1 then cas:=form1.mov[index].tmdb.casts[1].nom
   else
   if maxcast>1 then
 
   begin
    for i:=1 to maxcast-1 do cas:=cas+form1.mov[index].tmdb.casts[i].nom+' - ';
    cas:=cas+form1.mov[index].tmdb.casts[i+1].nom;
   end
   else cas:='';
   Textout(Rect.left+200,Rect.TOP+5+45,'Avec : '+cas);
   Checklistbox1.canvas.Font.Size:=8;
   ste:=form1.mov[index].tmdb.resume+form1.mov[index].tmdb.code_id;
   nbcaract:=100;
   nblignes:=length(ste) div nbcaract;
   for i:=1 to nblignes do
   begin
    ste2:=copy(ste,nbcaract*(i-1)+1,nbcaract);
    Textout(Rect.left+200,Rect.TOP+15*i+55,ste2);
   end;
   if  length(ste) mod nbcaract>0 then
   begin
    ste2:=copy(ste,nbcaract*nblignes+1,length(ste) mod nbcaract);
    Textout(Rect.left+200,Rect.TOP+15*(nblignes+1)+55,ste2);
   end;
 
   //Textout(Rect.Left+140,Rect.TOP+5+50,);
   //Textout(Rect.Left+140,Rect.TOP+5+50,form1.mov[index+1].liste_acteurs);
 
   monimage.Free;
   jpeg.Free;
  end;// monimage.free;
 
end;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed