WM_CREATE:
begin
// create fonts
LinkFontHover := 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 handle as a window property
SetProp(hLinkStc, '
LinkFontHover', LinkFontHover);
LinkFontNonHover := 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 the handle as a window property
SetProp(hLinkStc, '
LinkFontNonHover', LinkFontNonHover);
end;
WM_MOUSELEAVE:
begin
if WindowHover
then
begin
// reset state
WindowHover := False;
// set font
SendMessage(hLinkStc, WM_SETFONT, GetProp(hLinkStc, '
LinkFontNonHover'), Integer(true));
end;
end;
WM_MOUSEMOVE:
if not WindowHover
then
begin
// save state
WindowHover := True;
// set font
SendMessage(hLinkStc, WM_SETFONT, GetProp(hLinkStc, '
LinkFontHover'), Integer(true));
// track WM_MOUSELEAVE
EventTrack.cbSize := SizeOf(EventTrack);
EventTrack.dwFlags := TME_LEAVE;
EventTrack.hwndTrack := hLinkStc;
EventTrack.dwHoverTime := HOVER_DEFAULT;
TrackMouseEvent(EventTrack);
end;
WM_DESTROY:
begin
// delete objects and remove properties from the window property list
DeleteObject(GetProp(hLinkStc, '
LinkFontNonHover'));
RemoveProp(hLinkStc, '
LinkFontNonHover');
DeleteObject(GetProp(hLinkStc, '
LinkFontHover'));
RemoveProp(hLinkStc, '
LinkFontHover');
end;