To move the object with the mouse, you just need to keep tracing (tracing like in the code sample in my post above). Here's an example (not tested):

Code:
ENTITY* ghostObject;	// Global entity pointer
var isPlacingObject = 0;	// Global variable
...

function PlaceObject(var _objectNum)
{
	wait(1);
	proc_kill(4);
	
	isPlacingObject = _objectNum;
	
	while(isPlacingObject != 0)
	{
		normal.x = crosshair_x;
		normal.y = crosshair_y;
		normal.z = 0;
		
		vec_set(target,normal);
		target.z = 10000;
		
		vec_for_screen(normal,view_build);
		vec_for_screen(target,view_build);
		
		if(c_trace(normal,target,IGNORE_ME + IGNORE_PASSABLE) > 0)
		{
			if(mouse_left)
			{
				ent_create("crate.mdl",target,NULL);
				
				if(ghostObject != NULL) {ptr_remove(ghostObject);}
				isPlacingObject = 0;
				
				break;
			}
			
			if(ghostObject == NULL)
			{
				ghostObject = ent_create("crate.mdl",target,NULL);
				ghostObject.flags |= TRANSLUCENT;
				ghostObject.flags |= PASSABLE;
				ghostObject.alpha = 30;
			}
			else
			{
				vec_Set(ghostObject.x,target);
			}
		}
		
		wait(1);
	}
}