case uMsg
of
WM_MOUSELEAVE:
if WindowHover
then
begin
// reset state
WindowHover := False;
LinkFontHover := GetProp(hLinkStc, '
LinkFontHover');
if LinkFontHover = 0
then
begin
// create and set font
LinkFontHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0, 400,
0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, LINKFONTNAME);
// save handle as a window property
SetProp(hLinkStc, '
LinkFontHover', LinkFontHover);
end;
SendMessage(hLinkStc, WM_SETFONT, Integer(LinkFontHover), Integer(true));
end;
WM_MOUSEMOVE:
if not WindowHover
then
begin
// save state
WindowHover := True;
LinkFontNonHover := GetProp(hLinkStc, '
LinkFontNonHover');
if LinkFontNonHover = 0
then
begin
// create and set font
LinkFontNonHover := CreateFont(-MulDiv(LINKFONTSIZE, GetDeviceCaps(GetDC(hLinkStc), LOGPIXELSY), 72), 0, 0, 0,
400, 0, 1, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH,
LINKFONTNAME);
// save the handle as a window property
SetProp(hLinkStc, '
LinkFontNonHover', LinkFontNonHover);
end;
SendMessage(hLinkStc, WM_SETFONT, Integer(LinkFontNonHover), Integer(true));
// track WM_MOUSELEAVE
EventTrack.cbSize := SizeOf(EventTrack);
EventTrack.dwFlags := TME_LEAVE;
EventTrack.hwndTrack := hLinkStc;
EventTrack.dwHoverTime := HOVER_DEFAULT;
TrackMouseEvent(EventTrack);
end;