Windows Error Boxes to the next level
MATLAB, 86 63 bytes
set(warndlg,'WindowButtonM',@(s,e)movegui(get(0,'Po')-[99,20]))
This solution takes advantage of MATLAB's (typically annoying) ability to use partial property names as long as the part that is provided is unique to only the property of interest.
This solution uses the builtin warndlg
to create a warning dialog with an "OK" button. This function returns a figure
handle which we can then use to set the WindowButtonMotionFcn
callback (using the short name 'WindowButtonM'
).
The callback that is evaluated any time the cursor is moved within the window gets the current position of the cursor (using the PointerLocation
property of the root graphics object, using it's short name 'Po'
). We then update the Position
of the figure using movegui
and specifying the new location of the figure after applying an offset of [99, 20]
so that the cursor is placed on the button.
When the button is finally clicked, the figure is deleted and all callbacks are automatically released.
C# (Windows Form Application), 200 114 bytes
void F(){var p=Cursor.Position;MouseMove+=(r,t)=>{Controls.Add(new Button());Location=new Point(p.X-30,p.Y-40);};}
Un-Golfed
void F()
{
Controls.Add(new Button());
MouseMove += (r, t) =>
{
var p = Cursor.Position;
Location = new Point(p.X - 30, p.Y - 40);
};
}
Old 200-byte solution:
public void F(){var t=this;var b=new Button();b.Click+=delegate{t.Close();};t.Controls.Add(b);t.Show();for(;;){Application.DoEvents();t.Location=new Point(Cursor.Position.X-30,Cursor.Position.Y-40);}}
Un-Golfed
public void F()
{
var t = this;
var b = new Button();
b.Click += delegate
{
t.Close();
};
t.Controls.Add(b);
t.Show();
for (;;)
{
Application.DoEvents();
t.Location = new Point(Cursor.Position.X - 30, Cursor.Position.Y - 40);
}
}