I was using Kaiochao's Screen Arrows library which has a proc that makes an on screen arrow pointing to any target you want:
//This is from the library Screen Arrows by Kaiochao, but I have modified it
proc/PointArrow(obj/Arrow, atom/Target, MinDistance, ArrowDistance)

if(!MinDistance) MinDistance = client.bound_height * 0.4
if(!ArrowDistance) ArrowDistance = client.bound_height * 0.24

var dx = Target.Cx() - Cx()
var dy = Target.Cy() - Cy()
var dot = dx*dx + dy*dy

if(dot < MinDistance * MinDistance)
Arrow.screen_loc = null
Arrow.screen_loc = "CENTER"

var matrix/m = new
m.Translate(0, ArrowDistance)
m.Turn(dx > 0 ? arccos(dy / sqrt(dot)) : -arccos(dy / sqrt(dot)))

Arrow.transform = initial(Arrow.transform) * m

But the problem is, I can't click the arrow. If I leave it with its default transform I can click it just fine. Soon as this proc modifies the transform to make it point at something, clicking the arrow's icon doesn't result in a Click() anymore.

I want to be able to click the icon after it is transformed because that is how players open a window containing detailed information about whatever object the arrow is pointing at. How can I?
What BYOND version are you using?
Also I just noticed your MBGA avatar, nice.
So if I alter the transform position and rotation am I supposed to not be able to click it anymore by clicking its new apparent visual position? Or is this a BYOND issue.
Lummox recently has been chasing down this issue. When graphics are scaled or roated, their graphical area isn't calculating properly for some reason for clicking on the client.

This might just be a case that got flubbed up somewhere in the process. Probably best to pop on over to the bug report forum.

Though, you might want to make sure that mouse_opacity on that atom is 1 before you do that.
mouse_opacity is definitely 1
Yes okay I'll try filing a bug report. Thanks.
Ter13 I made the bug report if you have any comments you want to leave there.