Тема: HTA, Javascript,LangMF: координаты окна. Прикрепление сторонней формы.
Кто нибудь, подскажите пожалуйста, как узнать координаты окна(х и у). Я просто не знаю где искать.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → Windows Script Host, HTA (VBScript, JScript) → HTA, Javascript,LangMF: координаты окна. Прикрепление сторонней формы.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Кто нибудь, подскажите пожалуйста, как узнать координаты окна(х и у). Я просто не знаю где искать.
Если я правильно понял, Вам нужны window.screenLeft и window.screenTop
Да,Xameleon, спасибо, это оно.
А вы случайно не подскажете обработчик события перетаскивания окна?
Т.к JS-ом владею плохо, сваял пример на VBS. Как такового события не нашёл, поэтому сделал по таймеру.
<html>
<body>
<script language=vbscript>
Dim x,y
setInterval "CheckWindowPos",10
x = window.screenLeft
y = window.screenTop
Sub CheckWindowPos()
if x <> window.screenLeft or y <> window.screenTop Then
x = window.screenLeft
y = window.screenTop
window_onmove()
End if
End Sub
Sub window_onmove()
document.body.innerText = x & " / " & y
End Sub
</script>
</body>
</html>... обработчик события перетаскивания окна?
Такого не существует в клиентских (подчеркиваю это) JScript/VBScript. Идея коллеги Xameleon - периодически проверять текущее положение окна и сравнивать с предыдущим - прекрасно справляется с Вашей проблемой. Ниже - вариант на JScript. Если не обращать внимание на разную интерпретацию используемых параметров, то можно считать этот скрипт применимым для большинства популярных браузеров.
<html>
<head>
<script type="text/javascript">
window.onload = function()
{
var x;
var y;
setInterval(function()
{
var i = window.screenX || window.screenLeft;
var j = window.screenY || window.screenTop;
if ( x == i && y == j ) {
return;
}
x = i;
y = j;
document.title = document.body.innerHTML = x + ' / ' + y;
}, 10);
};
</script>
</head>
<body style="margin: 50px; text-align: center;">
</body>
</html>Спасибо.
Но проблема вот в чём: мне нужно "прилепить" к верхнему левому краю окна HTA LangMF-форму. На этой форме кнопка особой формы, представленная в виде gif-изображения.
... нужно "прилепить" к верхнему левому краю окна HTA LangMF-форму. На этой форме кнопка особой формы, представленная в виде gif-изображения.
Ничего не понятно. Что значит "прилепить" и что это такое - "LangMF-форма"? Переформулируйте свои вопросы яснее.
Если я правильно понял термин "прилепливание к краю", то это задается стилевыми правилами - например, позиционирование (position), отбивка (margin, padding). "Особый" вид кнопки и любого другого htnl-элемента определяется опять же стилевыми правилами - background-image.
Извините за путаницу.
LangMF - это скриптовый язык программирования. Похож на Visual Basic (соответственно на VBScript).
LangMf-форма - это отдельное окно. В моём случае - это окно без заголовка и всего лишь с одной кнопкой, похожей на кнопку главного меню MS Office 2007. "Прилепить" мне эту кнопку нужно к верхнему левому краю окна HTA, как это показано на рисунке.
А вот сама LangMF-форма.
Кстати про обработчик события.
Теперь он есть
.
<html>
<head>
<script type="text/javascript">
var x;
var y;
setInterval(function()
{
var i = window.screenX || window.screenLeft;
var j = window.screenY || window.screenTop;
if ( x == i && y == j ) {
return;
}
else{if(window.onMove){window.onMove()}}
x = i;
y = j;
document.title = document.body.innerHTML = x + ' / ' + y;
}, 10);
</script>
</head>
<body style="margin: 50px; text-align: center;">
</body>
</html>Понятно. Стандартными средствами этого добиться нельзя. Можно эмулировать, но только внутри документа - средствами html, css, jscript (vbscript). Элементы оконного интерфейса - системные, они не доступны.
Кстати про обработчик события.
Теперь он есть
Ну тогда гораздо проще:
window.onmove = function()
{
var x = window.screenX || window.screenLeft;
var y = window.screenY || window.screenTop;
document.title = document.body.innerHTML = x + ' / ' + y;
};Ну тогда гораздо проще:
window.onmove = function() { var x = window.screenX || window.screenLeft; var y = window.screenY || window.screenTop; document.title = document.body.innerHTML = x + ' / ' + y; };
Такой метод не подходит, потому что onmove - не сам обработчик события, а только функция, вызываемая обработчиком!
onmove - не сам обработчик события, а только функция, вызываемая обработчиком!
Ну что же Вы морочите голову людям. Я обнадежился, подумал, что я что-то упустил, и поверил в существование такого обработчика. Это не обработчик - а просто обычная функция.
else{if(window.onMove){window.onMove()}}
Лишено смысла, так как там уже стоит return - выход из функции. Просто замените код после проверки и до конца функции чем-то своим, да хоть вызовом внешней функции:
...
setInterval(function()
{
var i = window.screenX || window.screenLeft;
var j = window.screenY || window.screenTop;
if ( x == i && y == j ) {
return;
}
// Здесь должен быть код, написанный Вами
}, 10);Ottiwell_Wood, а зачем лепить LangMF-форму к HTA?
Rumata, вы не так поняли. Именно эта простая функция и есть обработчиком события и именно она вызывает window.onmove.
JSMan, прочитайте пожалуйста посты #6 и #8
Ottiwell_Wood, то что некоторая функция называется onXXX еще не значит, что она является обработчиком события XXX. То что Вы называете обработчиком события является простой функцией, которая вызывается из таймера через определенные интервалы времени.
Грубо говоря, обработчик события - это функция, которая выполняет определенные действия в момент возникновения события. Чтобы обработчик начал выполнять заданные действия, его необходимо создать или зарегистрировать. Событие XXX создается с помощью следующей команды:
объект.onXXX = function()
...Объявление функции window.onmove не приведет к созданию обработчика события move - перемещение окна браузера. Также Вы не сможете зарегистрировать обработчик события move и с помощью следующей конструкции:
window.attachEvent('onmove', function()
...Пример - и мой и Xameleon - обходное решение. В данном случае для эмуляции несуществующего события.
Вариант из поста #11 не подходит из-за того, что эта функция ни чем не будет вызываться. Мой вариант подходит из-за того, что он выполняет функцию, описанную в window.onmove.
Вариант из поста #12 корректнее.
Да, но тогда приходится дописывать код в конце "обработчика". Кстати про второй пример из поста #15: его можно реализовать с помощью функции типа window.FireEvent('move');?
Нет. Проверьте.
alert(document.fireEvent);приходится дописывать код в конце "обработчика"
Ну так допишите )))
...
setInterval(function()
{
var i = window.screenX || window.screenLeft;
var j = window.screenY || window.screenTop;
if ( x == i && y == j ) {
return;
}
onmove();
}, 10);Нет.
A если через WSC?
2 Ottiwell_Wood: ИМХО, Rumata и я уже дали Вам понятный ответ на Ваш вопрос. Rumata так и вообще "разжевал" Вам всё до мелочей. Если что то в коде не устраивает, изложите пожалуйста подробнее. Желательно одним постом.
Хотелось бы зарегистрировать обработчик события.
Предполагаю, что не получится, т.к самого события нет.
Понятно. Спасибо большое.
Ottiwell_Wood, я понимаю, что вы хотите прилепить. Но я спрашиваю: зачем? Так как можно прилепить круглую кнопку путем использования HTML. Что касается перемещения окна, то тут можно использовать два способа: первый - встроенный (как описали выше), второй - использовать другие языки программирования для клика возвращать HT_CAPTION.
А можно поподробней?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться