Windows त्रुटि बॉक्स अगले स्तर पर


15

आप उन विंडोज बॉक्स को जानते हैं जहां आप केवल एक ही काम कर सकते हैं?

विंडोज त्रुटि बॉक्स: आगे बढ़ने से आपकी हार्ड ड्राइव की सामग्री हट जाएगी।  आप क्या करना चाहते हैं?  <प्रोसीड> <डिलीट>

चलो इसे अगले स्तर तक ले जाएं!

चुनौती

एक बटन के साथ एक संवाद बॉक्स बनाएं जो आपके कर्सर का हर जगह अनुसरण करता है!

ऐनक

कोई इनपुट नहीं लिया जा सकता है। वहाँ या तो STDOUT या STDERR का उत्पादन हो सकता है। आपको एक बटन के साथ एक विंडो खोलनी होगी (कोई पाठ आवश्यक नहीं है, लेकिन पाठ विंडो शीर्षक, संवाद बॉक्स, या बटन में समाहित हो सकता है)। बटन को क्लिक करने योग्य होना चाहिए, और इसे हमेशा अपने कर्सर के नीचे चलना चाहिए ताकि आप केवल इसे क्लिक कर सकें। क्लिक करने पर, यह आपके इच्छित कुछ भी कर सकता है, लेकिन कृपया इसे कंप्यूटर को क्रैश न करें क्योंकि मैं इसका परीक्षण करूंगा ... जब तक बटन दबाया नहीं जाता तब तक संवाद बॉक्स खुला रहना चाहिए, लेकिन इसकी आवश्यकता नहीं है बटन बंद होने पर बंद करें।

मान्यताओं जो आप बना सकते हैं

  • आप मान सकते हैं कि कर्सर ड्राइंग कैनवास के भीतर रहेगा।
  • आप मान सकते हैं कि विंडो फ़ोकस में रहेगी, लेकिन आपको विंडो को फ़ोकस से तब तक बाहर नहीं रखना चाहिए, जब तक कि बटन दबाया न जाए।

उदाहरण Pseudocode

यहाँ कुछ उदाहरण pseudocode है:

Open Dialog Box
Add Button to Dialog Box at position X, Y
WHILE True:
    SET Dialog Box to CursorX - X, CursorY - Y

इस चुनौती के लिए टेस्ट केस उपलब्ध नहीं कराए जा सकते

यह एक कोड-गोल्फ चुनौती है, इसलिए 14 मार्च (पाई दिवस) तक सबसे कम वैध जमा की जीत होती है!

जवाबों:


9

MATLAB, 86 63 बाइट्स

set(warndlg,'WindowButtonM',@(s,e)movegui(get(0,'Po')-[99,20]))

यह समाधान MATLAB की (आमतौर पर परेशान करने वाली) आंशिक संपत्ति के नामों का उपयोग करने की क्षमता का लाभ उठाता है जब तक कि जो हिस्सा प्रदान किया जाता है वह केवल ब्याज की संपत्ति के लिए अद्वितीय होता है।

यह समाधान warndlg"ओके" बटन के साथ चेतावनी संवाद बनाने के लिए बिलिन का उपयोग करता है । यह फ़ंक्शन एक figureहैंडल देता है जिसे हम WindowButtonMotionFcnकॉलबैक सेट करने के लिए उपयोग कर सकते हैं (संक्षिप्त नाम का उपयोग करके 'WindowButtonM')।

किसी भी समय कर्सर को खिड़की के भीतर ले जाने पर मूल्यांकन किए जाने वाले कॉलबैक को कर्सर की वर्तमान स्थिति मिलती है ( रूट ग्राफिक्स ऑब्जेक्ट की PointerLocationसंपत्ति का उपयोग करके, यह संक्षिप्त नाम का उपयोग करके )। हम एक ऑफसेट को लागू करने के बाद आंकड़े के नए स्थान का उपयोग करके और निर्दिष्ट करने वाले आंकड़े को अपडेट करते हैं'Po'Positionmovegui[99, 20] ताकि कर्सर को बटन पर रखा जाए।

जब बटन को आखिरकार क्लिक किया जाता है, तो आंकड़ा हटा दिया जाता है और सभी कॉलबैक स्वचालित रूप से जारी हो जाते हैं।

यहां छवि विवरण दर्ज करें


क्या आप इस कोड का परीक्षण करने के लिए एक लिंक प्रदान कर सकते हैं? मेरे पास मतलाब सॉफ्टवेयर नहीं है, और यह कोड ओक्टेव के साथ काम नहीं करता है (क्योंकि यह केवल कुछ मटलब कोड के साथ संगत है)। धन्यवाद!
हाइपरएन्यूट्रीनो

3
@AlexL। दुर्भाग्य से यह दिखाने के लिए कोई मुफ्त ऑनलाइन उपयोगिता नहीं है कि यह कोड कैसे काम करता है। यहां तक ​​कि अगर वहाँ थे, यूआई नियंत्रण वेब इंटरफ़ेस में प्रदान नहीं होने जा रहे हैं। मैंने कोड काम करने के लिए GIF को शामिल किया है।
मुकदमा

ठीक है। मैं तो परीक्षण परेशान नहीं करेगा। अच्छी नौकरी, एक +1 है।
हाइपरएन्यूट्रीनो

Windows R2014a पर कुछ समस्याएं। आप डायलॉग बॉक्स को निम्नलिखित से रोक सकते हैं: 1. अपने माउस (डायलॉग के साथ) को टास्कबार पर ले जाएं (मेरा टास्कबार स्क्रीन के दाईं ओर है) और डायलॉग बॉक्स माउस का अनुसरण करना बंद कर देगा; 2. अपने माउस को इतनी तेजी से आगे बढ़ाएं कि माउस किसी भी फ्रेम में संवाद बॉक्स के बाहर हो, जिस बिंदु पर बॉक्स माउस का पीछा करना बंद कर देगा। संवाद बॉक्स की शैली भी स्पष्ट रूप से कुछ और पर निर्भर करती है ... वर्तमान कोड के साथ, मेरा माउस मुश्किल से ओके बटन को याद करता है, और मुझे काम करने के लिए 99 से 120 को बदलना होगा। वैसे भी, अच्छा काम!
उन्माद ली

यह मैं अपने दृष्टिकोण से देखता हूं। मेरा माउस उस लाल क्रॉसहेयर के पास कहीं है।
उन्माद ली

4

सी # (विंडोज फॉर्म एप्लीकेशन), 200 114 बाइट्स

void F(){var p=Cursor.Position;MouseMove+=(r,t)=>{Controls.Add(new Button());Location=new Point(p.X-30,p.Y-40);};}

संयुक्त राष्ट्र के golfed

void F()
{
     Controls.Add(new Button());

     MouseMove += (r, t) =>
     {
        var p = Cursor.Position;
        Location = new Point(p.X - 30, p.Y - 40);
     };
}

पुराने 200 बाइट समाधान:

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);}}

संयुक्त राष्ट्र के 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);
        }
    }

यहां छवि विवरण दर्ज करें


1
बहुत बढ़िया! +1 :)
हाइपरएनुट्रिनो

1
रुको .... तो C # में, आप एक ईवेंट श्रोता को जोड़कर कर सकते हैं Event += listener? यह कमाल है :-)
22

@ETHproductions संभवतः C ++ में भी ऐसा कर सकते हैं यदि आपने +ऑपरेटर को ओवरलोड किया है। फिर भी बहुत रसीली।
कार्कजेनिकेट


1

जावा 7, 294 289 286 264 220 बाइट्स

import java.awt.*;public class B extends java.applet.Applet{Button b;public B(){add(b=new Button());}public void paint(Graphics g){Point p=MouseInfo.getPointerInfo().getLocation();b.setLocation(p.x-9,p.y-65);repaint();}}

-22 MouseInfo (से चोरी करने के लिए धन्यवाद बाइट्स Zavada ) मैं AWT पुस्तकालयों> की तरह नहीं है।>

मैंने यहाँ मुख्य विधि को हटाकर 44 बाइट का मुंडन किया। यदि एप्लेट के रूप में इसे लॉन्च किया गया है तो मुख्य विधि की आवश्यकता नहीं है। यह ग्रहण के "रन ऐज जावा एप्लेट" के माध्यम से या सुरक्षा प्रबंधक को अक्षम करने और एप्लेटव्यूअर का उपयोग करके प्राप्त किया जा सकता है , जो जेडीके के साथ आता है (जब तक कि आप अभी भी वेब ब्राउज़र में एप्लेट्स देखने में सक्षम नहीं हैं। मुझे नहीं लगता कि क्रोम इसकी अनुमति नहीं देता है। ।

पॉप अप


अच्छा काम, +1! मैं सहमत हूँ, awt पुस्तकालयों थोड़ा बदसूरत हैं, लेकिन यह गोल्फ खिलाड़ी है।
हाइपरएनुट्रीनो

आप 24 बाइट्स को हटाकर बचा सकते हैंimport java.awt.event.*;
Zavada

@Zavada *वाइल्डकार्ड पुन: आयात नहीं करता है सबपैकेज। मैं जरूरत java.awt.eventके लिए MouseAdapterऔरMouseEvent
प्रहार

क्षमायाचना, मेरे पास कुल दिमाग था!
ज़वदा

1

जावा, 172 199 235 बाइट्स

golfed:

import java.awt.*;interface D{static void main(String[]z){new javax.swing.JDialog(){{setSize(9,99);setVisible(1>0);add(new Button());a();}void a(){for(Point p;;p=MouseInfo.getPointerInfo().getLocation(),setLocation(p.x-9,p.y-70));}};}}

Ungolfed:

import java.awt.*;
interface D{
    static void main(String[]z){
        new javax.swing.JDialog(){
            {
                setSize(9,99);
                setVisible(1>0);
                add(new Button());
                a();
            }
            void a(){

                for(;;) {
                    Point p = MouseInfo.getPointerInfo().getLocation();
                    setLocation(p.x-9,p.y-70);
                }
            }
        };

    }
}

स्पष्टीकरण: मैं एक नए JDialog की अपनी घोषणा पर डबल ब्रेस इनिशियलाइज़ेशन का उपयोग करता हूं। इस JDialog के विस्तार को छोड़कर बाइट्स को बचाया (मुझे छोड़कर बाइट्स को बचाने की अनुमति देता publicहै main)। JDialog के गुमनाम उपवर्ग के अंदर मैं इसे दिखाई देता हूं ( कॉल 1>0करने के बजाय true) और कॉल a()करता हूं, जो आवश्यक है क्योंकि Initalizer में एक संकलन-समय त्रुटि होती है यदि लूप सामान्य रूप से इसमें बैठे थे। मैंने माउस श्रोता को जोड़ने से जुड़े सभी अतिरिक्त कोड के बजाय माउसइन्फो का उपयोग करने का विकल्प चुना।

संपादित करें: जोड़ने के लिए 27 से गिनती बढ़ाने के लिए किया था add(new java.awt.Button());। मैंने सोचा कि JDialogs में तकनीकी रूप से निहित बटन था, लेकिन मुझे गलत लगता है।

संपादन 2: setSizeबटन को क्लिक करने योग्य बनाने के लिए माउस स्थान जोड़ना और ऑफसेट करना था।

संवाद


यह काफी काम नहीं करता है; मैं बटन नहीं दबा सकता क्योंकि कर्सर लगातार खिड़की के ऊपरी-बाएँ कोने पर है। कृपया इसे ठीक करें! :)
हाइपरनेट्रोइनो

माफी, अब तय होनी चाहिए!
ज़ावड़ा

हां। अब काम करता है! +1
हाइपरएन्यूट्रीनो

मैं नहीं जानता था / याद है MouseInfo एक बात थी। यह एक साफ जवाब है।
प्रहार करें

1
@ धन्यवाद धन्यवाद। मैंने एप्लेट्स का उपयोग करते हुए आपका उत्तर देखा, और मुझे ऐपलेट्स के लिए एक अनुचित नफरत है, इसलिए मुझे लगा कि स्विंग में ऐसा करना प्यारा होगा। आपका उत्तर हालांकि अच्छा है :)
Zavada

0

संशोधित प्रसंस्करण जेएस 102 108 बाइट्स

draw=function(){background(0);rect(mouseX,mouseY,9,9);rect(mouseX,mouseY,4,4);if(mouseIsPressed){fill(9);}};

इसे ऑनलाइन आज़माएं! बस मेरे लिंक को अपडेट किया!

यह सिर्फ एक आयत खींचता है जो आपके माउस और उसके अंदर एक छोटी आयत का अनुसरण करता है जिसे आप क्लिक करते हैं और यह लाल हो जाता है। यह काम करता है लेकिन आश्चर्यजनक नहीं है। यह संस्करण यदि ब्रेसिज़ पर बहुत सख्त है और उस पर :(


आप भरने के चारों ओर ब्रेसिज़ निकाल सकते हैं
क्रिस्ति लिथोस

@KritiiLithos I वास्तव में नहीं कर सकता :(
क्रिस्टोफर

यह एक सख्त प्रकार का भाषा संस्करण है
क्रिस्टोफर

बाइट्स को बचाने के लिए आप एक अन्य प्रकार के प्रसंस्करण का उपयोग कर सकते हैं
क्रिस्सी लिथोस

@KritiiLithos वास्तव में तब मुझे भी एक स्क्रीन साइज़ सेट करना होगा और इससे बाइट्स जुड़ेंगे। ?। (साइड नोट मैं सिर्फ "के लिए अनुचित सामग्री चैट से निकाल दिया गया किसी भी विचार क्यों यह एक बॉट भी था chat.stackexchange.com/messages/35631789/history क्यों था
क्रिस्टोफर

0

क्लोजर, 525 बाइट्स

(ns d(:require[quil.core :as q][quil.middleware :as m]))(def w 500)(def h 200)(def t 30)(def n 200)(def m 100)(q/defsketch d :size[999 999]:setup(fn[](q/stroke 0 0 0)(q/text-font(q/create-font""(* t 1.3))){:x 0 :y 0}):draw(fn[{x :x y :y}](let[r q/rect f q/fill o(- x(/ w 2))p(- y (/ h 2))](q/background 99 99 99)(f 0 0 255)(r o p w h)(f 200 200 200)(r o(+ p t)w(- h t))(f 255 0 0)(r(-(+ o w)t)p t t)(f 255 255 255)(q/text"X"(- (+ o w) t)(+ p t))(r(- x(/ n 2))(- y (/ m 2))n m))):mouse-moved(fn[_ e]e):middleware[m/fun-mode])

करता नहीं एक वास्तविक विंडोज संवाद पैदा करते हैं। इसके बजाय, यह एक नकली बनाता है, और बीच में एक डमी (गैर-कामकाज) बटन बनाता है।

यह ओपी द्वारा टिप्पणियों में अनुमति दी गई थी।

क्विल लाइब्रेरी का उपयोग करता है ।

(ns bits.golf.following-dialog
  (:require [quil.core :as q]
            [quil.middleware :as m]))

(def width 500)
(def height 200)

(def top-bar-height 30)

(def b-width 200)
(def b-height 100)

(defn -main []
  (q/defsketch d
    :size [999 999]
    :setup (fn []
             ; Set the border color
             (q/stroke 0 0 0)

             ; Set the font size
             (q/text-font (q/create-font "" (* top-bar-height 1.3)))

             ; The initial state
             {:x 0 :y 0})

    :draw (fn [{x :x y :y}]
            (let [r q/rect ; Shortcut functions for brevity
                  f q/fill

                  ; The top-left coordinates of the window
                  window-x  (- x (/ width 2))
                  window-y (- y (/ height 2))]

              ; Wipe the previous screen
              (q/background 99 99 99)

              ; Blue top bar
              (f 0 0 255)
              (r window-x
                 window-y
                 width height)

              ; Grey window background
              (f 200 200 200)
              (r window-x
                 (+ window-y top-bar-height)
                 width (- height top-bar-height))

              ; Red top right "button"
              (f 255 0 0)
              (r (- (+ window-x width)
                    top-bar-height)
                 window-y
                 top-bar-height top-bar-height)

              ; The X
              (f 255 255 255)
              (q/text "X" (- (+ window-x width) top-bar-height)
                          (+ window-y top-bar-height))

              ; The main "button"
              (r (- x (/ b-width 2))
                 (- y (/ b-height 2))
                 b-width
                 b-height)))

    ; When the mouse is moved, set the current state to the event object, which
    ;  conveniently has :x and :y properties
    :mouse-moved (fn [_ e] e)

    ; Needed for ease of state management. May try to factor out.
    :middleware [m/fun-mode]))

नकली संवाद


मुझे इस बात का लालच नहीं है क्योंकि आपका प्रतिनिधि 1000 है और यह बहुत अच्छा लग रहा है ... मैं इसे एक वैध समाधान के रूप में गिनने जा रहा हूं (केवल इसलिए कि मैंने पहले से ही एक समान समाधान को मान्य किया है जो "नहीं बनाता है" वास्तविक "विंडो), तो एक +1 है। : पी
हाइपरएनुट्रीनो

@HyperNeutrino धन्यवाद, भले ही यह कार्य के लिए सकल ओवरकिल है, और एक 1k प्रतिनिधि भी अच्छा है। मुझे इसमें मजा आया! शायद मैं सिर्फ तुलना के लिए एक AWT संस्करण भी बनाऊंगा। शायद आधी लंबाई की तरह होगा।
दोपहर

आप बस 2k तक इंतजार कर सकते हैं! : डी
हाइपरएनुट्रिनो 3

0

पग / स्लिम + सीएसएस / SCSS / LESS / स्टाइलस + ES6 जावास्क्रिप्ट (98 बाइट्स)

इसे ऑनलाइन आज़माएं!

पग (10 UTF-8 बाइट्स)

button#a X

स्टाइलस (18 UTF-8 बाइट्स)

#a{position:fixed}

JS (70 UTF-8 बाइट्स)

onmousemove=e=>{with(a.style){top=e.clientY+'px';left=e.clientX+'px'}}

विघटित, Ungolfed और समझाया स्निपेट:

document.addEventListener('mousemove', function(e) {
  // Get element with an id of "id"
  var el = document.getElementById("id");
  // Set the vertical position
  el.style.top = e.clientY + 'px';
  // Set the horizontal position
  el.style.left = e.clientX + 'px';
})
/* Get element with an id of "id" */

#id {
  /* Position it relative to the viewport*/
  position: fixed;
}
<!-- A basic HTML button with an ID of "id" -->
<button id='id'>
  X
</button>


0

गणितज्ञ 226 बाइट्स

स्क्रीन के सापेक्ष माउस की स्थिति को सामने के छोर से ट्रैक किया जाता है और जब भी माउस चलता है, तो संवाद नोटबुक की विंडो स्थिति को स्थानांतरित कर दिया जाता है। बहुत सरल, लेकिन अक्षर के संदर्भ में आदेश बहुत लंबा है, जैसा कि अक्सर गणितज्ञ के साथ होता है। OK पर क्लिक करने से डायलॉग बंद हो जाएगा।

{s,d,w}={SetOptions,Dynamic,WindowMargins->m};With[{p=d@MousePosition["ScreenAbsolute"]},
m=d@{{p[[1]]-50,0},{0,p[[2]]-35}}];s[$FrontEndSession,FrontEndEventActions->{"MouseMoved":>s[a,w]}];a=CreateDialog[{DefaultButton[]},w];

पुनश्च जब आप परीक्षण कर रहे हों, तो फ्रंट एंड विकल्प को हटाने के लिए इसे चलाएं।

SetOptions[$FrontEndSession,FrontEndEventActions->None]

स्क्रीन एनीमेशन


क्या आप कार्यक्षमता को सिद्ध करने के लिए gif जोड़ सकते हैं? मैं गणितज्ञ की परीक्षा नहीं दे सकता। धन्यवाद!
हाइपरन्यूट्रिनो

-1

जावास्क्रिप्ट (ES6) + HTML + CSS, 139 बाइट्स

HTML:

<d id=d><button>X

सीएसएस:

d{background:red;padding:9px;position:absolute

जावास्क्रिप्ट:

onmousemove=e=>{with(d.style){top=e.clientY-20+'px';left=e.clientX-20+'px'}}

चूँकि आप अलर्ट संवाद नहीं कर सकते, इसलिए मैंने HTML में अपने कस्टम सुपर फैंसी डायलॉग बनाए। जावास्क्रिप्ट विंडो ऑब्जेक्ट पर एक ईवेंट हैंडलर पंजीकृत करता है और ईवेंट के निर्देशांक में स्थिति सेट करता है।

इसे ऑनलाइन आज़माएं: https://jsfiddle.net/1yohswje/


मैं यह कहने जा रहा हूं कि यह अमान्य है, क्योंकि यह वैध "विंडो" के समान कुछ भी नहीं बनाता है, और साथ ही, आप यह नहीं बता सकते कि यह बटन के साथ एक विंडो होने का मतलब है। हालांकि, यह एक दिलचस्प समाधान है!
हाइपरएन्यूट्रीनो

@ हायपरनेट्रिनो मैंने अपना उत्तर अपडेट कर दिया है। आप इस बारे में क्या सोचते है?
corvus_192

ठीक है। यह अब मेरे मानकों का अनुपालन करता है।
बजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.