i was wondering about gui hover...

and is there solution to detect are we hovering the gui button for example. but not checking if mouse is inside buttons rect. more then detecting that guistyle changed its state into hover or something like that.

When you pass a GUI element a GUIContent with a tooltip, you can easily detect if that button is being hovered by checking if the global GUI.tooltip has content set, and checking what that content is. For instance:

function OnGUI(){
    GUI.Button (Rect (10,10,100,20), GUIContent ("MyButton", "MyButtonTooltip"));
    if(GUI.tooltip == "MyButtonTooltip"){
        //The button "MyButton" is currently being hovered
    }
}

Not directly, take a look at this Unity Forum article.

The tooltip idea seems to work, but i haven't tested it yet. But why don't you want to check the Rect? Even with GUILayout it is posible look at GUILayoutUtility.GetLastRect. The docs even gives you exact the "hover" example

I’ve been headbutting on this problem for a while today. It seems the tooltip is the best approach, but with a twist:

    function OnGUI(){
    	
            GUI.Box(Rect(0,0,220,500),GUIContent("", "noScroll"));
    	//inhibit events
    	if(Event.current.type == EventType.repaint) {
        	if (GUI.tooltip == "noScroll"){
        		camCtrl.Lock(true);
        	}else{
        		camCtrl.Lock(false);
        	}
        }
    	
    }

“if(Event.current.type == EventType.repaint)” is needed otherwise “if (GUI.tooltip == “noScroll”)” will evaluate to true AND false on every frame.