Тема: HTA: отображение анимированной заставки
Коллекция скриптов и идей — HTA: отображение анимированной заставки
1) Выводить заставку перед запуском приложения на заранее заданное время — дурной вкус, имеет смысл делать это на время необходимое для полной загрузки (инициализации) приложения. Как быть в таком случае при использовании отдельного hta-файла: как его прикрутить к выполняющему полезную работу скрипту? — вопрос не раскрыт (в случае HTA можно бы окно заставки создавать через window.showModelessDialog()).
2) Рассмотрим строки:
<meta charset="windows-1251">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
— первые две задают одно и то же, одну из них надо убрать (я бы убрал первую), а с учётом того, что не используются не-ASCII символы можно убрать обе; третья здесь бесполезна и, к тому же, ложна (весь немногочисленный текст — на английском).
3) Не стоит полагаться на .commandLine — это свойство может содержать путь к файлу отличному от загруженного в данный момент в окно HTA или вообще быть пустым (правильно использовать location или document.URL)!
Да и не надо его узнавать:
так как файл изображения находится в том же каталоге что и HTA, в атрибуте src можно указать относительный путь, но прочтя соответствующее атрибуту свойство .src уже можно будет узнать полный путь к файлу изображения и вывести его, если произойдёт ошибка при загрузке изображения (а ошибкой будет не только отсутствие файла, но и, например, его неправильный формат!).
4) Размеры же изображения можно узнать обратившись к его свойствам .width и .height, если явно не заданы соответствующие атрибуты, — а зачем их задавать, если размеры окна всё-равно подгоняются к размерам изображения?
5) Явный недочёт: после вывода сообщения об отсутствии файла изображения окно HTA остаётся открытым ещё какое то время.
В идеале же до этого момента его вообще не следовало бы делать видимым.
С учётом (2-5) можно сделать так:
<html>
<head>
<title>Splash</title>
<style type="text/css">
html {background-color: buttonface;}
body {margin: 0px; padding: 0px; border-width: 0px; overflow: hidden;}
</style>
<script language="VBScript">
Option Explicit
With window
.resizeTo 0, 0
.moveTo 0, -500
End With
Sub onImgLoad()
Set Img.onload = Nothing 'защита от повторных вызовов для анимированных GIF
Dim width, height
width = Img.width: height = Img.height
With window
.moveTo (.screen.availWidth - width) \ 2, (.screen.availHeight - height) \ 2
.resizeTo width, height
.setTimeout "window.close()", 5000
End With
End Sub
Sub onImgError()
Dim path: path = unescape(Img.src)
MsgBox "Can't open path """ & path & """.", vbOKOnly & vbExclamation, document.title
window.close
End Sub
</script>
<hta:application
applicationname="Splash"
singleinstance="yes"
showintaskbar="no"
border="none"
contextmenu="no"
selection="no"
></hta:application>
</head>
<body>
<div>
<img id="Img" src="160x160.gif"
onload="onImgLoad()" onerror="onImgError()"
ondragstart="window.event.returnValue = False"
></div>
</body></html>
Буду рад ответной критике. Примите искреннийшие заверения в совершеннейшем почтении.

