2009-07-04 11 views
8

長いアイテムのあるリストボックスがあります。これらの長い項目はListBoxの右端を超えています。マウスが上に来ると、そのような項目のヒントを表示するアイデアが表示されます。リストボックスの長いアイテムのヒント

私は例を見つけた

:(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; 

それは動作しますが、私は別の項目のためのヒントを表示するたびに、私は離れて、リストボックスから私のマウスを移動する必要があり、その後のポイントそのヒントを見るために別の項目にリストボックスの枠線からマウスを離さずに、すべての項目のヒントを表示する方法はありますか?

答えて

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

ビンゴ!どうもありがとうございました! – Vlad

+0

(lstIndex <= Items.Count)は実際には(lstIndex Tom

関連する問題