// Reply 11 Updated
// Compile for Windows
// The base class has changed from window to Cwindow
DECLARE IMPORT,_TrackMouseEvent(tme as TRACKMOUSEEVENT),INT;
struct TRACKMOUSEEVENT
{
    unsigned INT cbSize;
    unsigned INT dwFlags;
    unsigned INT hwndTrack;
    unsigned INT dwHoverTime;
}

CONST TME_HOVER = 1;
CONST TME_LEAVE = 2;
CONST WM_MOUSEHOVER = 0x2A1;
CONST WM_MOUSELEAVE = 0x2A3;

class HoverWindow:Cwindow
{
	declare HoverWindow();
	declare OnMouseMove(int x,int y,int flags),int;
	declare WndProc(unsigned int message, unsigned int wparam, unsigned int lparam),int;
	declare OnTimer(int nIDEvent),int;
	Cwindow *popup;
	int bHover;
}

class MainWindow:Cwindow
{
	declare OnClose(),int;
}

class PopupWindow:Cwindow
{
}

int run;

global sub main()
{
	MainWindow win;
	HoverWindow child;
	PopupWindow child2;
	win.Create(0,0,300,100,AWS_CAPTION | AWS_SYSMENU | AWS_AUTODRAW | AWS_VISIBLE | AWS_BORDER,0,"HoverDemo",0);
	child.Create(10,10,60,60,AWS_VISIBLE|AWS_BORDER|AWS_CHILD,0,"",win);
	//create the popup invisible
	child2.Create(100,10,120,60,AWS_CHILD|AWS_AUTODRAW|AWS_BORDER,0,"Popup Info",win);
	child2.SetWindowColor(RGB(255,255,0));
	child2.DrawMode(TRANSPARENT);
	child2.WriteText(5,5,"Just some info");
	child2.WriteText(5,20,"For your program");
	child.popup = &child2;

	win.CenterWindow();
	run = 1;
	do
	{
		wait();
	} until run = 0;
	return;
}

MainWindow::OnClose(),int
{
	run = 0;
	return true;
}

HoverWindow::HoverWindow()
{
popup = null;
bHover = false;
return;
}

HoverWindow::OnMouseMove(int x,int y,int flags),int
{
	if(bHover = false)
	{
		TRACKMOUSEEVENT tme;
		tme.cbSize = LEN(TRACKMOUSEEVENT);
		tme.dwFlags = TME_HOVER | TME_LEAVE;
		tme.hwndTrack = m_hwnd;
		tme.dwHoverTime = 25;
		_TrackMouseEvent(tme);
	}
	return true;
}

HoverWindow::OnTimer(int nIDEvent),int
{
	popup->ShowWindow(SWHIDE);
	StopTimer();
	return true;
}

HoverWindow::WndProc(unsigned int message, unsigned int wparam, unsigned int lparam),int
{
	select message
	{
		case WM_MOUSEHOVER:
			bHover = true;
			SetWindowColor(RGB(255,0,0));
			StartTimer(2500); //close the popup after a few seconds
			popup->ShowWindow(SWSHOW);
		case WM_MOUSELEAVE:
			bHover = false;
			SetWindowColor(RGB(255,255,255));
			StopTimer();
			popup->ShowWindow(SWHIDE);
	
	}
return CWindow!!WndProc(message,wParam,lParam);
}
 
 
