none
Как установить фокус на гаджет RRS feed

  • Вопрос

  • Здравствуйте. Такая проблема.

    Хочу что-то сделать в гаджете по событию onmousewheel, но для того, чтобы это событие сработало, гаджет должен быть в фокусе. для установки фокуса по гаджету нужно кликнуть мышкой. Это не всешда очевидно для пользователей. Пробовал так <body onmouseover='document.focus()'> Фокус не устанавливается. Посоветуйте что-нибудь. Как установить фокус не кликая?

    Спасибо

    9 марта 2012 г. 6:38

Ответы

Все ответы

  • > Как установить фокус не кликая?
     
     
    надо найти поле ввода и вызвать метод focus()
    примерно так:
      

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <script type="text/javascript">
            function init()
            {
                document.getElementById("_txt2").focus();
            }
        </script>
    </head>
    <body onload="init()">
        <input type="text" id="_txt1" />
        <input type="text" id="_txt2" />
    </body>
    </html>
    

     
     

    9 марта 2012 г. 7:30
  • Спасибо, но это немного не то.

    Во первых, поля ввода там нет.

    Во вторых, мне это нужно не единоразово, а каждый раз, когда на гаджет наведут мышь. Т.е. по событию onmouseover

    В третьих, так фокус все-равно не устанавливается даже первый раз

    9 марта 2012 г. 16:12
  • > поля ввода там нет. [...] гаджет [...] фокус все-равно не устанавливается 


    какие теги используются? на какой тег надо установить фокус? можете показать html?
     

            

    10 марта 2012 г. 12:20
  • <html xmlns:v="urn:schemas-microsoft-com:vml">
     <head>
     <meta http-equiv="Content-Type" content="text/html; charset=Unicode">
     <title>System Monitor II</title>
     <link href="css/SystemMonitorII.css" rel="stylesheet" type="text/css">
     <script src="js/SystemMonitorII.js" type="text/javascript"></script>
     <script src="js/workwithlibrary.js" type="text/javascript"></script>
     <style>
      v\:* { behavior: url(#default#VML); }
     </style>
     </head>

     <body onload="doit()" ondblclick="runTaskManager()" onunload="if (alreadyregistered) UnregisterLibrary()" onmouseover="showwheel()">
      <g:background id="background">
       <div id="mainsquare" style="position:absolute"></div>

       <div id="wheelplase" style="position:absolute;width:100%;text-align:center;visibility:hidden;z-index:10"><img id="wheelimg" src="images/wheel.png" /></div>
       <div id="CPUnum" style="position:absolute;width:100%;text-align:center;visibility:hidden;font-weight:bold;z-index:100">
       <span id="CPUnummsg" style="background-color:#000000;color:#FFFFFF"></span></div>

    Фокус нужно или на body или на <g:background id="background"> В крайнем случае на <div id="mainsquare" style="position:absolute"></div>

    Повторяю фокус нужно устанавливать КАЖДІЙ РАЗ когда на гаджет наводится мышь, а не один раз.

    10 марта 2012 г. 19:50
  • добавьте текстовое поле или ссылку в скрытый блок и устанавливайте фокус на него, + у вас есть картинка она вроде тоже может иметь фокус, попробуйте на нее
    11 марта 2012 г. 7:06
  • Я все это пробовал, прежде чем написать сюда

    11 марта 2012 г. 16:26
  •  

     > Хочу что-то сделать в гаджете по событию onmousewheel, но для того, чтобы это событие сработало, гаджет должен быть в фокусе. для установки фокуса по гаджету нужно кликнуть мышкой. 

    фокус устанавливать не обязательно
    onmousewheel срабатывает когда мышь находится над тегом.

    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var html = @"
                    <!doctype html>
                    <html>
                        <head>
                            <script type='text/javascript'>
                            var c = 0;
                            function wheel() {
                                document.getElementById('res').innerHTML = c++;
                            }
                            function focusing(over) {
                                var el = document.getElementById('res');
                                el.innerHTML = over ? 'wheel now' : '';
                            }
                            </script>
                        </head>
                        <body>
                            <div onmouseout='focusing(false)' 
                                    onmouseover='focusing(true)' 
                                    onmousewheel='wheel()' id='mainsquare' 
                                    style='position:absolute; top: 100px; width:200px; height:50px; background-color:silver;'>
                                        <div style='margin:5px;width:100px; background-color:gray;height:30px;'></div>
                                    </div>
                            <div id='res'></div>
                        </body>
                    </html>";
                new WebBrowser { DocumentText = html, Parent = this, Dock = DockStyle.Fill };
            }
        }
    }
    
     

       
     

    12 марта 2012 г. 8:53
  • Этот пример перестает работать, если окно приложения не в фокусе (по крайней мере в win7).

    Если кликнуть по десктопу, потом провести поверx окна, то onmouseover срабатывает (wheel now), но onmousewheel - уже нет.

    UPD: но будет работать (по крайней мере в гаджете), если устанавливать фокус на гаджет через self.focus():

                            function focusing(over) {
                                var el = document.getElementById('res');
                                el.innerHTML = over ? 'wheel now' : '';
                                self.focus();
                            }
    сам гаджет:  http://dl.dropbox.com/u/3908408/Source.gadget


    • Изменено PashaPash 12 марта 2012 г. 11:36
    • Предложено в качестве ответа PashaPash 12 марта 2012 г. 11:37
    • Отменено предложение в качестве ответа Igogo 12 марта 2012 г. 16:24
    12 марта 2012 г. 11:22
  • Спасибо, сейчас буду пробовать.

    12 марта 2012 г. 16:16
  • Результат экспериментов. Если кликнуть где-нибудь на десктопе, то не работает. Если кликнуть на ЛЮБОМ другом гаджете, то работает. Типа если кликнули где-то на какой-нибудь гаджет, то фокус попал на сайдбар и через него на наш гаджет.

    Win 7 64 бит

    12 марта 2012 г. 16:24
  • Проверил, работает как-то через раз, в зависимости от текущего приложения в фокусе :( Похоже, 100% рабочего решения по приводу фокуса в гаджет вы не найдете :(
    13 марта 2012 г. 9:08
  • Думаю да. Насколько исследовал проблему, єто какая-то ошибка в сайдбаре

    14 марта 2012 г. 6:31
  • Если возможно, то напишите об этом баге в вашем кросс-посте на английском форуме, и в имени темы добавьте слово Bug - <имя треда>... Так как другого способа баг репорта пока нету, это единственная возможность донести его (на Microsoft Connect нету раздела для багов Windows 7, к сожалению).

    Для связи [mail]

    14 марта 2012 г. 9:20
    Модератор