Цитата:
Вторая же ссылка http://javascript.ru/forum/dom-windo...a-vremeni.html в запросе... |
Да, я видел этот топик (и не только его). Долго смотрел на него... Много думал... Стыдно признаться, но я не смогу прикрутить даже готовый скрипт к html содержимому (кнопки, поля ввода чисел, всплывающее сообщение и пр.)... Увы!, чукча не писатель, чукча читатель. Я ищу добровольца-альтруиста, кто сделает это, пардон, за меня. Мне, правда, очень неудобно, но с моими познаниями у меня нет вариантов (хотя, нет, вру - есть вариант: погрузится в теорию и заняться изучением языка).
ЗЫ Я искал скрипт, который уже был бы привязан к нужным мне кнопкам на .html странице, а фейс-то я подрихтовать смогу... |
ОК, пойдём длинным путём... Будем допиливать до обтекаемости уже готовый скрипт.
Имеем начинку .hta файла: <html> <head> <title>Timer</title> <hta:application /> </head> <script type="text/javascript"> var h0=0; var m0=0; var s0=0; var timeId=null; function f2 (v) { return (v<10?'0'+v:v); } function changetime() { s0--; if (s0<0) { s0=59; m0--; if (m0<0) { m0=59; if (h0>0) h0--; else { h0=m0=s0=0; } } } } function showtime () { var t=h0*3600+m0*60+s0; if (t>0) { document.getElementById('clock1').innerHTML = f2(h0)+':'+f2(m0)+':'+f2(s0); changetime(); window.setTimeout("showtime();",1000); } else if (t<1) { document.getElementById('clock1').innerHTML = ''; window.clearTimeout (timeID); } } function inittime (hour,min,sec) { h0=Math.max(hour,0); m0=Math.max(min,0); s0=Math.max(sec,0); timeID=window.setTimeout("showtime();",1000); } </script> <body> <span id="clock1"></span> <br> <script type="text/javascript"> function generate_list (name,min,step,max,deft) { document.writeln ('<select name="'+name+'" size="1">'); for (var i=min; i<=max; i+=step) { document.write ('<option value="'+i+'"'); if (i==deft) { document.write (' selected'); } document.writeln ('>'+(i<10?'0'+i:i)+'</option>'); } document.writeln ('</select>'); } </script> <form name="f1"> <script type="text/javascript">generate_list ('h0',0,1,50,1);</script> час <script type="text/javascript">generate_list ('m0',0,1,59,0);</script> мин <script type="text/javascript">generate_list ('s0',0,1,59,3);</script> сек <input type="button" value="старт" onclick="inittime( document.f1.h0.options[document.f1.h0.selectedIndex].value, document.f1.m0.options[document.f1.m0.selectedIndex].value, document.f1.s0.options[document.f1.s0.selectedIndex].value);" /> </form> </body> </html> Если запустить этот таймер и в процессе обратного отсчёта несколько раз нажать кнопку "старт", то секунды начинают "прыгать". Как это победить? |
Ну вот, сделал то, что задумывал (начинка .hta файла):
<html> <head> <title>Timer</title> <hta:application applicationname=Timer innerborder=no scroll=no contextmenu=no /> <script language="javascript"> resizeTo(380,126); moveTo((screen.width/2-190),(screen.height/2-63)); </script> <script type="text/javascript"> var h=m=s=0; var timeId=null; function f2 (v) { return (v<10?'0'+v:v); } function inittime (hour,min,sec) { h=Math.max(hour,0); m=Math.max(min,0); s=Math.max(sec,0); timeID=setTimeout("showtime();",1000); } function changetime() { s--; if (s<0) { s=59; m--; if (m<0) { m=59; if (h>0) h--; else { h=m=s=0; } }}} function showtime () { var t=h*3600+m*60+s; if (t>0) { document.getElementById('clock').innerHTML=f2(h)+':'+f2(m)+':'+f2(s); changetime(); setTimeout("showtime();",1000); } else if (t<1) { document.getElementById('clock').innerHTML='00:00:00'; clearTimeout(timeID); alert('Время истекло!'); close(); }} </script> <style type="text/css"> body { background:buttonface; margin:3px; } table { border-collapse:collapse; text-align:center; } #a { width:100%; box-sizing:border-box; font:55px sans-serif; } #b { font:22px/.76 monospace; color:buttonshadow; } button { height:65px; border; font:48px monospace; color:buttonshadow; } input { background-color:buttonface; border:transparent; font:86px/.77 sans-serif; height:65px; width:96px; } #clock { font:94px/.85 sans-serif; } </style> </head> <body> <div id="clock"> <table> <tbody id="a"> <tr> <td><input type=text name="h" value="00" maxlength="2"></td> <td>:</td> <td><input type=text name="m" value="00" maxlength="2"></td> <td>:</td> <td><input type=text name="s" value="00" maxlength="2"></td> <td><button title="Старт" onclick="inittime( document.getElementById('h').value, document.getElementById('m').value, document.getElementById('s').value);">►</button></td> </tr> </tbody> <tbody id="b"> <tr> <td>час</td> <td></td> <td>мин</td> <td></td> <td>сек</td> <td></tr> </tbody> </table> </div> </body> </html> Посмотрите, пожалуйста, на предмет оптимизации/уменьшения размера (чем меньше, тем лучше!) - приветствую любые замечания. И вопросы: 1. можно ли сделать так, чтобы при запуске таймера окно программы сворачивалось в трей; 2. как сделать, чтобы окно alert по истечении времени всплывало поверх ВСЕХ окон? Спасибо. |
Вот, теперь окно alert по истечении времени всплывает поверх всех окон:
<html> <head> <title>Timer</title> <hta:application applicationname=Timer innerborder=no scroll=no contextmenu=no /> <script language="JavaScript"> resizeTo(380,126); moveTo((screen.width/2-190),(screen.height/2-63)); </script> <script language="JavaScript"> var h=m=s=0; var timeId=null; function f2 (v) { return (v<10?'0'+v:v); } function inittime (hour,min,sec) { h=Math.max(hour,0); m=Math.max(min,0); s=Math.max(sec,0); timeID=setTimeout("showtime();",1000); } function changetime() { s--; if (s<0) { s=59; m--; if (m<0) { m=59; if (h>0) h--; else { h=m=s=0; } }}} function showtime () { var t=h*3600+m*60+s; if (t>0) { document.getElementById('clock').innerHTML=f2(h)+':'+f2(m)+':'+f2(s); changetime(); setTimeout("showtime();",1000); } else if (t<1) { document.getElementById('clock').innerHTML='00:00:00'; callDWorld(fin()) }} </script> <script language="VBScript"> function fin() MsgBox "Время истекло!", vbSystemModal close end function </script> <style> body { background:buttonface; margin:3px; } table { border-collapse:collapse; text-align:center; } #a { width:100%; box-sizing:border-box; font:55px sans-serif; } #b { font:22px/.76 monospace; color:buttonshadow; } button { height:65px; border; font:48px monospace; color:buttonshadow; } input { background-color:buttonface; border:transparent; font:86px/.77 sans-serif; height:65px; width:96px; } #clock { font:94px/.85 sans-serif; } </style> </head> <body> <div id="clock"> <table> <tbody id="a"> <tr> <td><input type=text name="h" value="00" maxlength="2"></td> <td>:</td> <td><input type=text name="m" value="00" maxlength="2"></td> <td>:</td> <td><input type=text name="s" value="00" maxlength="2"></td> <td><button title="Старт" onclick="inittime( document.getElementById('h').value, document.getElementById('m').value, document.getElementById('s').value);">►</button></td> </tr> </tbody> <tbody id="b"> <tr> <td>час</td> <td></td> <td>мин</td> <td></td> <td>сек</td> <td></tr> </tbody> </table> </div> </body> </html> Наверняка сделано через задницу, но ... работает! Осталось сделать так, чтобы после запуска таймера окно программы сворачивалось в трей. Ужо помогайте... |
У HTA Application есть атрибут windowState который принимает значения normal(по умолчанию) | minimize | maximize. Но к сожалению этот аттрибут можно изменить только один раз, при инициализации приложения. В дальнейшем из него можно только читать. Тоесть можно узнать в каком из 3 (трех) состояний находится приложение (обычное, минимизированное, или развернутое на весь экран).
Но если внимательно присмотреться к минимизации, то можно заметить что приложение на самом деле никуда не минимизируется, а просто ему устанавливаются отрицательные координаты его положения на экране. А именно X: -32000, Y: -32000. Тоесть это можно сэмулировать - moveTo(-32000, -32000);. Но при этом при попытке вернуть приложение на прежнее место, чтоб его было видно на рабочем столе, путем нажатия иконки в таскбаре - ничего не происходит. Поэтому вооружившись полученными знаниями, проверяя|устанавливая координаты приложения и следя за свойством windowState, можно реализовать необходимый функционал. |
Цитата:
А можно ли сделать так: - нажимаю кнопку "Старт" и перехожу на vbs; - этот vbs сворачивает окно .hta и передаёт управление в js (собственно таймер); - ну а далее уже всё есть и работает. Единственный вопрос - как сделать, чтобы vbs свернул своё же окно (хотя бы не в трей, а на панель задач)? Ведь vbs вроде может сворачивать окна? |
Добрые люди помогли - теперь таймер при запуске сворачивается в панель задач:
<html> <head> <title>Timer</title> <hta:application applicationname=Timer innerborder=no scroll=no contextmenu=no /> <script language="JavaScript"> var h=m=s=0; var timeId=null; resizeTo(380,126); moveTo((screen.width/2-190),(screen.height/2-63)); function f2 (v) { return (v<10?'0'+v:v); } function inittime(hour,min,sec) { start() h=Math.max(hour,0); m=Math.max(min,0); s=Math.max(sec,0); timeID=setTimeout("showtime();",1000); } function changetime() { s--; if (s<0) { s=59; m--; if (m<0) { m=59; if (h>0) h--; else { h=m=s=0; } }}} function showtime() { var t=h*3600+m*60+s; if (t>0) { document.getElementById('clock').innerHTML=f2(h)+':'+f2(m)+':'+f2(s); changetime(); setTimeout("showtime();",1000); } else if (t<1) { document.getElementById('clock').innerHTML='00:00:00'; fin() }} </script> <script language="VBScript"> sub start() Set oShell = CreateObject("WScript.Shell") oShell.SendKeys "% n{down 3}{enter}" end sub sub fin() MsgBox "Время истекло!", vbSystemModal close end sub </script> <style> body { background:buttonface; margin:3px; } table { border-collapse:collapse; text-align:center; } #a { width:100%; box-sizing:border-box; font:55px sans-serif; } #b { font:22px/.76 monospace; color:buttonshadow; } button { height:65px; border; font:48px monospace; color:buttonshadow; } input { background-color:buttonface; border:transparent; font:86px/.77 sans-serif; height:65px; width:96px; } #clock { font:94px/.85 sans-serif; } </style> </head> <body> <div id="clock"> <table> <tbody id="a"> <tr> <td><input type=text name="h" value="00" maxlength="2"></td> <td>:</td> <td><input type=text name="m" value="00" maxlength="2"></td> <td>:</td> <td><input type=text name="s" value="00" maxlength="2"></td> <td><button title="Старт" onclick="inittime( document.getElementById('h').value, document.getElementById('m').value, document.getElementById('s').value);">►</button></td> </tr> </tbody> <tbody id="b"> <tr> <td>час</td> <td></td> <td>мин</td> <td></td> <td>сек</td> <td></tr> </tbody> </table> </div> </body> </html> Как бы сделать, чтобы он сворачивался не на панель задач, а в трей к часам? И ещё. Возможно ли перевести .hta в .ехе? И желательно онлайн конвертер... |
А какая строка за это отвечает? Я смотрел, смотрел, но так и не понял :) С hta дело иметь не приходилось, но, как мне кажется, зная дескриптор окна через Win API (VBScript) можно нарулить то, что Вам нужно. Хотя, может быть найдутся способы попроще.
|
стр. 53:
Код:
oShell.SendKeys "% n{down 3}{enter}" |
Цитата:
Цитата:
<html> <head> <title></title> <hta:application applicationname=test /> <script language="VBScript"> sub start() Set oShell = CreateObject("WScript.Shell") oShell.SendKeys "% n{DOWN 3}{ENTER}" end sub </script> </head> <body> <button onclick="start">Свернуть</button></td> </body> </html> |
Ну вот, сделал, что хотел:
![]() При запуске Таймер сворачивается на панель задач, а по истечении времени пикает системным динамиком и выбрасывает окно с предупреждением. Можно ли сделать так, чтобы главное окно Таймера нельзя было масштабировать (растягивать) потянув за уголок или за рамку окна? Спасибо. |
<hta:application id="MyApp" applicationname="MyApp" border="dialog" borderstyle="normal" innerborder="no" icon="myapp.ico" maximizeButton="no" minimizeButton="yes" scroll="no" selection="no" showintaskbar="yes" singleinstance="yes" version="1.0"> </hta:application> |
Цитата:
Спасибо! |
Теперь такой вопрос. Сделал, чтобы время отображалось не только в главном окне программы, но и в названии окна. Т.е. было так:
document.getElementById('c').innerHTML=f2(h)+':'+f2(m)+':'+f2(s); а стало так: document.title=document.getElementById('c').innerHTML=f2(h)+':'+f2(m)+':'+f2(s); Но, почему-то, время, отображаемое в названии окна, немного отстаёт от времени, отображаемом в самой программе. Чуть-чуть, буквально на долю секунды, но отстаёт! В чём может быть причина? Как это поправить? Xочу, чтобы время там и там тикало синхронно. Спасибо. <title>Timer</title> <hta:application border=thin innerborder=no scroll=no contextmenu=no maximizeButton=no /> <script language="JavaScript"> var h=m=s=0; var timeId=null; resizeTo(380,126); moveTo((screen.width/2-190),(screen.height/2-63)); function f2 (v) {return (v<10?'0'+v:v)} function inittime(hour,min,sec) { h=Math.max(hour,0); m=Math.max(min,0); s=Math.max(sec,0); timeID=setTimeout("showtime()",1000)} function showtime() { var t=h*3600+m*60+s; setTimeout("showtime()",1000); document.title=document.getElementById('c').innerHTML=f2(h)+':'+f2(m)+':'+f2(s); if (t>0) {changetime()} else {fin()}} function changetime() { s--; if (s<0) { s=59; m--; if (m<0) { m=59; if (h>0) h--; else {h=m=s=0}}}} </script> <script language="VBScript"> sub fin() Set S = CreateObject("WScript.Shell") S.Run "%comspec% /c" & Chr(7),0 MsgBox "Time is over!", vbSystemModal close end sub </script> <style> body {background:buttonface; margin:2} table {border-collapse:collapse; text-align:center} button {height:55; border; font:50 monospace; color:buttonshadow} input {background-color:buttonface; border:transparent; height:66; width:97; font:86/.77 sans-serif} #a {font:55 sans-serif} #b {font:22/.76 monospace; color:buttonshadow} #c {font:95/.95 sans-serif} </style> <div id="c"> <table> <tr id="a"> <td><input id="h" value="00" maxlength="2"></td> <td>: <td><input id="m" value="00" maxlength="2"></td> <td>: <td><input id="s" value="00" maxlength="2"></td> <td><button title="Start" onclick="inittime( getElementById('h').value, getElementById('m').value, getElementById('s').value)">►</button></td> <tr id="b"> <td>hour <td> <td>min <td> <td>sec <td> </table> </div> |
Прошу помощи в таком вопросе.
Сейчас таймер запускается по нажатии на кнопку "Start". Как сделать, чтобы таймер запускался при нажатии Enter. Т.е. вводим в поля input часы, минуты и секунды, нажимаем Enter, и таймер запускается. Спасибо. |
Делаем форму, кнопку Start делаем submit, запуск таймера делаем на событии onsubmit формы, не забывая остановить обработку события, чтобы форма не отправилась, profit.
|
Kolyaj, спасибо за ответ!
Честно говоря, имею наглость надеяться на то, что _НекийДобрыйЧеловек_ Мне правда очень неудобно! Прошу прощения! |
Цитата:
type="submit"и всё заработало! т.е. стало так: <button type="submit" title="Start" onclick="inittime(getElementById('h').value,getElementById('m').value,getElementById('s').value)"> А как теперь сделать, чтобы кнопка button исчезла? Если поставить style="display:none;", то кнопка становится невидна, но и таймер по Enter не запускается. Спасибо. |
style.opacity=0
|
Цитата:
|
<div style='opacity:0'>1</div> <div id='div2'>2</div> <script> document.getElementById('div2').style.opacity = 0 </script> Первый див скрываем через самого него. Второй через js. |
9xakep,
Спасибо, браза, попробую. Получится - отпишусь, не получится - тем более отпишусь... |
bk99,
<style> form { position:absolute; z-index:-120; } </style>меняй z-index: от 0 до - |
Часовой пояс GMT +3, время: 18:36. |