Utiliser une image dans le canvas d'une listbox

Description

J'ai cherché longuement a plusieur endroit comment ajouter une image dans le canvas d'une ListBox. C'est simple lorsqu'il doive défiler une apres l'autre avec le simple Index de la ListBox utiliser, Mais lorsqu'il est question d'inséré une image aléatoire au canvas, si la méthode employer n'est pas Correct, tout les autres images de change pour la derniere Ajouter.

P.s. Ne pas faire attention a mon orthographe des commentaires suis sérieusement nul en francais.

Source / Exemple :


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, Buttons, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox3: TListBox;
    SpeedButton1: TSpeedButton;
    ImageNiveau: TImageList;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    procedure ListBox3MeasureItem(Control: TWinControl; Index: Integer;
      var Height: Integer);
    procedure ListBox3DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Déclarations privées }
  public
  PicNiveau : Integer;
  lstimage : array of 0..5-1;
  Texte:String;
  LongeurLst:integer;
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListBox3MeasureItem(Control: TWinControl; Index: Integer;
  var Height: Integer);
begin
//on ajuste la grosseur de l'item pour accueillir l'item
height := ImageNiveau.Height + 4; 
end;

procedure TForm1.ListBox3DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
CenterText : integer;
begin
With ListBox3.Canvas do
begin
ListBox3.Canvas.FillRect (rect);
CenterText := ( rect.Bottom - rect.Top - ListBox3.Canvas.TextHeight(text)) div 2 ;
ListBox3.Canvas.TextOut (rect.left + ImageNiveau.Width + 8 , rect.Top + CenterText,
ListBox3.Items.Strings[Index]);
// on donne la valeur a aller chercher dans liste d'image
LstImage[LongeurLst-1]:= strtoint(Edit1.text);
//on print l'image dans le canvas
ImageNiveau.Draw(ListBox3.Canvas,rect.Left + 4, rect.Top + 4,  LstImage[Index]);
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
//On stock la donner
inc(LongeurLst);
SetLength(LstImage,LongeurLst);
//on ajouter la donner
ListBox3.AddItem('Nouvel Item',nil);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//on donne une valeur a l'integer LongeurLst
LongeurLst :=0;
end;

end.

Conclusion :


Un ptit merci a ZeroCool qui a refiler un coup de main pour me donner l'idée d'utiliser un 2eme Index :)

Codes Sources

A voir également

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.