Sie kennen die Windows-Boxen, in denen Sie nur eines können?
Lassen Sie uns dies auf die nächste Stufe bringen!
Herausforderung
Erstellen Sie ein Dialogfeld mit einer Schaltfläche, die Ihrem Cursor überall folgt!
Technische Daten
Es dürfen keine Eingaben gemacht werden. Es kann entweder STDOUT oder STDERR ausgegeben werden. Sie müssen ein Fenster mit einer Schaltfläche öffnen (es ist kein Text erforderlich, der Text kann jedoch entweder im Fenstertitel, im Dialogfeld oder in der Schaltfläche enthalten sein). Die Schaltfläche muss anklickbar sein und muss immer unter Ihrem Cursor stehen, damit Sie nur darauf klicken können. Wenn Sie auf klicken, kann es alles tun, was Sie wollen, aber machen Sie es bitte nicht zum Absturz eines Computers, da ich dies testen werde ... Das Dialogfeld muss so lange geöffnet bleiben, wie die Schaltfläche nicht gedrückt wird, muss es aber nicht Schließen, wenn die Schaltfläche geschlossen ist.
Annahmen, die Sie treffen können
- Sie können davon ausgehen, dass der Cursor im Zeichenbereich bleibt.
- Sie können davon ausgehen, dass das Fenster im Fokus bleibt, aber Sie dürfen das Fenster nicht unscharf stellen, solange die Taste nicht gedrückt wird.
Beispiel Pseudocode
Hier ist ein Beispiel für einen Pseudocode:
Open Dialog Box
Add Button to Dialog Box at position X, Y
WHILE True:
SET Dialog Box to CursorX - X, CursorY - Y
Testfälle können für diese Herausforderung nicht bereitgestellt werden
Dies ist eine Code-Golf-Herausforderung, daher gewinnt die kürzeste gültige Einsendung bis zum 14. März (Pi-Tag)!
C # (Windows Form Application),
200 bis114 ByteUngolfen
Alte 200-Byte-Lösung:
Ungolfen
quelle
Event += listener
? Das ist großartig :-)+
Operator überladen . Immer noch sehr prägnant.AutoHotkey,
122115 Bytesquelle
Java 7,
294289286264220 Bytes-22 Bytes dank MouseInfo (von Zavada gestohlen ) Ich mag die awt-Bibliotheken nicht>.>
Ich habe 44 Bytes gespart, indem ich die Hauptmethode hier entfernt habe. Die Hauptmethode wird nicht benötigt, wenn diese als Applet gestartet wird. Dies kann über das "Run As Java Applet" von eclipse oder durch Deaktivieren des Sicherheitsmanagers und Verwenden des Appletviewer , der mit dem JDK geliefert wird , erreicht werden (es sei denn, Sie können Applets noch in Webbrowsern anzeigen. Ich glaube, Chrome lässt dies nicht zu). .
quelle
import java.awt.event.*;
*
Platzhalter importiert keine Unterpakete rekursiv. Ich brauchejava.awt.event
für dieMouseAdapter
undMouseEvent
Java,
172199235 BytesGolf gespielt:
Ungolfed:
Erläuterung: Bei der Deklaration eines neuen JDialogs verwende ich die doppelte geschweifte Klammer. Dies sparte Bytes, indem die Erweiterung von JDialog ausgeschlossen wurde (so dass ich Bytes ohne
public
from speichern kannmain
). In der anonymen Unterklasse von JDialog mache ich es sichtbar (mithilfe von1>0
anstelle vontrue
) und rufe aufa()
, was notwendig ist, da der Initalizer einen Fehler bei der Kompilierung aufweist, wenn die Schleife normal darin platziert war. Ich entschied mich für die Verwendung von MouseInfo anstelle des gesamten überschüssigen Codes für das Hinzufügen eines Maus-Listeners.Bearbeiten: Musste die Anzahl um 27 erhöhen, um hinzuzufügen
add(new java.awt.Button());
. Ich dachte, JDialogs hätte aus technischen Gründen einen implizierten Knopf, aber ich scheine mich zu irren.Bearbeiten 2: Die Mausposition musste hinzugefügt
setSize
und verschoben werden, damit die Schaltfläche angeklickt werden kann.quelle
Modified Processing Js
102108 BytesProbieren Sie es online! Habe gerade meinen Link aktualisiert!
Es wird nur ein Rechteck gezeichnet, das Ihrer Maus folgt, und ein kleineres Rechteck, auf das Sie klicken, wird rot. Es funktioniert, ist aber nicht erstaunlich. Diese Version ist sehr streng auf Klammern und das alles :(
quelle
Clojure, 525 Bytes
Erstellt keinen echten Windows-Dialog. Stattdessen wird eine gefälschte Schaltfläche erstellt und in der Mitte eine Dummy-Schaltfläche (nicht funktionsfähig) erstellt.
Dies wurde vom OP in den Kommentaren erlaubt.
Verwendet die Quil- Bibliothek.
quelle
Mops / Slim + CSS / SCSS / WENIGER / Stylus + ES6 Javascript (98 Bytes)
Probieren Sie es online!
Mops (10 UTF-8 Bytes)
Eingabestift (18 UTF-8 Bytes)
JS (70 UTF-8 Bytes)
Decompiled, Ungolfed und erklärtes Snippet:
quelle
Mathematica 226 Bytes
Die Mausposition relativ zum Bildschirm wird vom Frontend nachverfolgt, und die Fensterposition des Dialognotizbuchs wird bei jeder Mausbewegung verschoben. Ziemlich einfach, aber die Befehle sind in Bezug auf Buchstaben sehr lang, wie es bei Mathematica häufig der Fall ist. Klicken Sie auf OK, um den Dialog zu schließen.
PS Wenn Sie mit dem Testen fertig sind, führen Sie dies aus, um die Front-End-Option zu entfernen.
quelle
Javascript (ES6) + HTML + CSS, 139 Byte
HTML:
CSS:
Javascript:
Da Sie Alert-Dialoge nicht positionieren können, habe ich meinen benutzerdefinierten, extravaganten Dialog in HTML erstellt. Das Javascript registriert eine Ereignisbehandlungsroutine für das Fensterobjekt und setzt die Position auf die Koordinaten des Ereignisses.
Versuchen Sie es online: https://jsfiddle.net/1yohswje/
quelle