2009-07-04 4 views
8

Il existe un ListBox avec des éléments longs. Ces longs objets dépassent le bord droit de la ListBox et voici une idée pour montrer des indices pour de tels objets lorsque la souris les survole.ListBox éléments longs conseils

que j'ai trouvé un exemple: (de http://delphi.about.com/cs/adptips2001/a/bltip0201_4.htm)

procedure TForm1.ListBox1MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer) ; 
var lstIndex : Integer ; 
begin 
    with ListBox1 do 
    begin 
    lstIndex:=SendMessage(Handle, LB_ITEMFROMPOINT, 0, MakeLParam(x,y)) ; 
    if (lstIndex >= 0) and (lstIndex <= Items.Count) then 
    Hint := Items[lstIndex] 
    else 
    Hint := '' 
    end; 
    end; 

Il fonctionne, mais chaque fois que je veux voir un indice pour un autre article que je dois déplacer ma souris loin de la zone de liste et le point sur un autre élément pour voir son indice. Est-il possible d'afficher des conseils pour chaque élément sans déplacer la souris loin des frontières ListBox?

Répondre

11
var fOldIndex: integer = -1; 

procedure TForm1.ListBox1MouseMove (Sender: TObject; Shift: TShiftState; X, Y: Integer) ; 
var lstIndex : Integer ; 
begin 
    with ListBox1 do 
    begin 
    lstIndex:=SendMessage(Handle, LB_ITEMFROMPOINT, 0, MakeLParam(x,y)) ; 

    // this should do the trick.. 
    if fOldIndex <> lstIndex then 
    Application.CancelHint; 
    fOldIndex := lstIndex; 

    if (lstIndex >= 0) and (lstIndex <= Items.Count) then 
    Hint := Items[lstIndex] 
    else 
    Hint := '' 
    end; 
end; 
+0

Bingo! Merci beaucoup! – Vlad

+0

Ne devrait pas (lstIndex <= Items.Count) être réellement (lstIndex Tom