Texte au survol de l'item d'une listbox

Contenu du snippet

Ce petit code (que je qualifirais plus d'astuce) permet de faire apparaitre un texte au survol d'un item grace à l'évènement OnMouseMove et à une Stringlist.
Chaque item à son texte biensure... Ca peut être utile pour faire un ASV au survol pour un chat par exemple...

Source / Exemple :


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    ListBox1: TListBox;
    SpeedButton1: TSpeedButton;
    Panel2: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Panel3: TPanel;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  com:Tstringlist;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
com:=TStringlist.Create;// Création de la stringlist contenant les commentaires

end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
listbox1.Items.Add(Edit1.Text);//On ajoute le texte qui va apparaitre
com.Add(edit2.Text);//Et le commentaire qui lui correspond
end;

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var
  i:integer;
 begin
i:=Y div Listbox1.ItemHeight;// I:= La position du curseur en Hauteur divisé par la hauteur d'un item
//Donc i= le numéro de l'item survolé.

if i>listbox1.Count-1 then begin
Panel3.hide;
 exit         //Pour ne pas créer d'erreur si i ne correspond à aucun item
end else begin //Si c bon alors on positionne le panel
Panel3.Left:=x-20;
Panel3.Top:=y-10;
Panel3.Caption:=' '+com.Strings[i]+' ';// LE texte du panel sera le commentaire correspondant à l'item
Label1.Caption:=ListBox1.Items[i]+' : '+com.Strings[i];
Panel3.Show;
end end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
com.Free;
end;

end.

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.