procedure THintListBox.MouseMove(Shift: TShiftState;
X, Y: Integer);
var
w, h, ind: integer;
s: string;
r: TRect;
p: TPoint;
begin
inherited;
p:=Point(x, y);
ind:=ItemAtPos(p, true);
if ind>0 then begin
if FOldInd<>ind then begin
FOldInd:=ind;
s:=Items[ind];
w:=Canvas.TextWidth(s)+8;
h:=Canvas.TextHeight(s);
if w>Width then begin
r:=ItemRect(ind);
p:=ClientToScreen(Point(r.Left, r.Top));
r:=Rect(p.x, p.y, p.x+w, p.y+h);
FHintWindow.ActivateHint(r, s);
end else begin
FHintWindow.ReleaseHandle;
end;
end;
end else begin
FOldInd:=-1;
FHintWindow.ReleaseHandle;
end;
end;
További probléma az az eset, amikor a komponens megjelenített egy Hint ablakot, de a felhasználó elhagyja az egérrel a komponens területét és így az többé nem kap MouseMove eseményt. Ezt viszont figyelhetjük a CM_MOUSELEAVE eseménnyel. Ha ez bekövetkezik, akkor mindentől függetlenül a Hint ablakot el kell tüntetnünk.
procedure THintListBox.CMMouseLeave(var Message: TMessage);
begin
FOldInd:=-1;
FHintWindow.ReleaseHandle;
end;