1 (изменено: no-coder, 2011-11-16 06:50:00)

Тема: HTA/VBScript: Помогите справиться с функцией LoadPicture()

Я не силен в DHTML, и не исключаю ошибки в коде
Нужно загрузить n-ное количество рисунков в память(на пример в массив) а потом по надобности подставлять в тэге IMG нужное.
Картинка не появляется :-(
Помогите понять в чем моя ошибка

<HTML>
<HEAD>
<HTA:APPLICATION ID="oHTA">
</HEAD>

<script language="VBScript">
function load_image()
    dim pict
    pict=loadpicture("picture.jpg")
    img1.src=pict
end function
</script>

<body id="mybody" onload="load_image()">

<img id="img1" src="" style="width:300px; height:300px">

</body></html>

2

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

no-coder пишет:

Помогите понять в чем моя ошибка

Здесь Xameleon уже демонстрировал

3

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

no-coder пишет:

Помогите понять в чем моя ошибка

IHTMLImgElement::src Property

Sets or retrieves a URL to be loaded by the object.

а LoadPicture() возвращает IPicture.

4

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

2 no-coder: Если не секрет, для каких целей подгрузка в память ? Для определения размеров ? Если да, то вроде бы можно в скрытом режиме подгружать их в IMG [style="visibility:hidden" или style="display:none"], но сам IMG не показывать. Не уверен. Надо поэкспериментировать.

2 abasov:

abasov пишет:

Здесь Xameleon уже демонстрировал

OFF: Ух ты ! Прикольно А я уж и забыл, что такие функции есть.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

Буду признателен всем кто даст ссылку на пример динамической привязки загруженного в память (или в контрол, неважно) изображения к src свойству тэга IMG. Если это вообще возможно в DHTML...
То что нашел в инете (код ниже) не работает.
Юзать Form для меня не выход.

<HTML>
<HEAD><HTA></head>

<script language="VBScript">
function load_image()
    dim pictures
    set pictures = CreateObject("MSComctlLib.ImageListCtrl.2")
    pictures.ListImages.add  1, "Pict1", LoadPicture("ttt.jpg")
    img1.src=pictures.ListImages(1)
end function
</script>

<body id="mybody" onload="load_image()">

<img id="img1" src="" style="width:300px; height:300px">

</body></html>

6

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

no-coder, а почему именно так? Какова цель?

7 (изменено: no-coder, 2011-11-19 06:16:23)

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

alexii пишет:

no-coder, а почему именно так? Какова цель?

нашел... жаль что JavaScript но и это выход

var myimg=new Image;
myimg.src=”file.jpg”;
document.images[0].src=myimg.src;

8

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

Очевидно, я разучился задавать вопросы, коль их не понимают.

9

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

alexii пишет:

Очевидно, я разучился задавать вопросы, коль их не понимают.

По юности торопятся, патчится поверьте, но к сожалению не у всех.

10

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

alexii пишет:

Очевидно, я разучился задавать вопросы, коль их не понимают.

Если alexii обиделся, извиняюсь
Но и мне показался банальным "а почему именно так? Какова цель?".
Ну какова может быть цель загрузки изображения в память с последующей динамической привязкой к тэгу? Только динамическая привязка к тэгу!

Какова цель?
В чистом DHTML-е (без ничего стороннего и подгруженного) имитировать спрайтовую анимацию из векторных картинок с возможностью динамически масштабировать спрайты в зависимости от размера экрана. CSS-спрайты (методом style="background-image:url(); background-position:Xpx Ypx") работают, но не масштабируются. Пришлось каждую фазу спрайта в отдельный файл (благо вектор весит мало), все грузить в память и по алгоритму анимировать. Все заработало.

11

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

abasov пишет:
alexii пишет:

Очевидно, я разучился задавать вопросы, коль их не понимают.

По юности торопятся, патчится поверьте, но к сожалению не у всех.

abasov пишет:

По юности торопятся

Ошибка! Не по юности а по нехватке времени и работе не в родной стихии

abasov пишет:

патчится поверьте

Уверен на все сто что код от патча не существует. А если да, то только в голове у кибер-доктора и код никак не может принять конкретные формы!

abasov пишет:

но к сожалению не у всех

abasov я только просил совета по не знакомой мне стихии, не более...
а если перейти на личности, тогда сравни правильный совет других

var pict=new Image;
pict.src="file.jpg";
document.images[0].src=pict.src;

все просто! загрузка и динамическая привязка

с Вашим советом (не хочю обижать Xameleon-а)

<BODY leftmargin=0 topmargin=0 rightmargin=0 bottommargin=0>
    <OBJECT id="Form1" style="width:100%;height:100%;" classid="clsid:C62A69F0-16DC-11CE-9E98-00AA00574A4F"></OBJECT>
</BODY>
<SCRIPT language=vbscript>
    Dim TextBox1
    Set TextBox1 = Form1.Controls.Add("Forms.TextBox.1", "TextBox1", True)
    TextBox1.left = 10
    TextBox1.top = 20
    TextBox1.width = 100
    Dim Image1
    Set Image1 = Form1.Controls.Add("Forms.Image.1", "Image1", True)
    Image1.left = 50
    Image1.top = 50
    Image1.width = 320
    Image1.height = 240
    Set Image1.Picture = LoadPicture("C:\windows\Web\Wallpaper\Windows XP.jpg")
    Const fmPictureSizeModeClip = 0 'Crops any part of the picture that is larger than the form or page (default).
    Const fmPictureSizeModeStretch = 1 'Stretches the picture to fill the form or page. This setting distorts the picture in either the horizontal or vertical direction.
    Const fmPictureSizeModeZoom = 3 'Enlarges the picture, but does not distort the picture in either the horizontal or vertical direction. 
    Image1.PictureSizeMode = fmPictureSizeModeStretch
</SCRIPT>

что круче ?

всем пока!
модератор! можешь банить и удалять ветвь! разрешаю

12

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

no-coder пишет:

Ошибка! Не по юности а по нехватке времени и работе не в родной стихии

Именно потому что и Вы и мы ценим своё время, мы начали с конкретных вопросов. Ответы на которые решали дальнейшее развитие событий. Т.к телепатию я ещё не освоил, то приходится спрашивать перед тем как советовать.

no-coder пишет:

Уверен на все сто что код от патча не существует. А если да, то только в голове у кибер-доктора и код никак не может принять конкретные формы!

Уважаемый abasov говорил лишь о том, что в юности мы все торопимся делать ошибки и только со временем люди начинают задумываться перед тем как их делать. Не имея в виду конкретно Вас. )

no-coder пишет:

я только просил совета по не_знакомой мне стихии, не более...
а если перейти на личности, тогда сравни правильный совет других

Не смотря на банальность вопросов "а почему именно так? Какова цель?" именно ответы на них определяли выбор решения между тем что предложил abasov и я. В чём Вы сами и убедились. ) А если бы Вы начали с описания своей задачи, мы бы сэкономили на вопросах время и смогли бы сразу Вам помочь.

no-coder пишет:

всем пока!
модератор! можешь банить и удалять ветвь! разрешаю

Ну зачем же так грубо ? ) Удалять тему я смысла особого не вижу (говорю за себя). В итоге обсуждения решение было найдено. А значит у последующих "первооткрывателей" будет шанс не наступать на теже грабли. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

13

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

no-coder, Ваше решение решение абсолютно верное для DHTML: использование встроенного объекта JavaScript Image(). Вопрос сам по себе был элементарным. Возможно аудитория встала в тупик из-за требования к языку сценариев.

14

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

Такого объекта clsid:C62A69F0-16DC-11CE-9E98-00AA00574A4F у меня на вин7 нету. Видимо эта активиксина ставится вместе с VBA.

15

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

mikser, это объект из комплекта офиса. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

16 (изменено: mikser, 2011-11-20 17:53:02)

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

no-coder пишет:

Какова цель?
В чистом DHTML-е (без ничего стороннего и подгруженного) имитировать спрайтовую анимацию из векторных картинок с возможностью динамически масштабировать спрайты в зависимости от размера экрана. CSS-спрайты (методом style="background-image:url(); background-position:Xpx Ypx") работают, но не масштабируются. Пришлось каждую фазу спрайта в отдельный файл (благо вектор весит мало), все грузить в память и по алгоритму анимировать. Все заработало.

Ну так ваше решение требует мс офиса, у меня его нету и ваше решение не работает.

Вот рабочий пример на чистом DHTML, должен работать даже в IE4:


  <SCRIPT LANGUAGE="JavaScript">

  //C:\windows\Web\Wallpaper\Windows XP.jpg
  var pic="http://s1.ipicture.ru/uploads/20111120/C8r6NzUc.jpg"
  var XX=[0,10,33,77,155]
  var YY=[0,10,33,77,155]
  var DD=[1, 1.5, 2,3,6]
  var i=0;
  function ToPic()
  {
	putImg(pic,XX[i],YY[i],DD[i])

	if ( ++i < XX.length)
	{
		setTimeout(ToPic, 1400  )
	}
	

  }

  window.onload=function()
  {
	ToPic()
  }


 function putImg(src,x,y,d)//d - коэфицент - во сколько раз увеличить картинку
 {
	//загружаем картинку
	var IMG=new Image() //что бы узнать высоту и ширину
	IMG.src=src;
	var w=Math.round(d*IMG.width)
	var h=Math.round(d*IMG.height)
	document.body.innerHTML+= "<img border=0 src='"+src+"' style='position:absolute;"+
	"width:"+w+"px;height:"+h+"px;"+
	"top:"+y+"px;left:"+x+"px;' >";
 }
	

  </SCRIPT>

Cамое главное это функция putImg(src,x,y,d)  где d - коэфицент - во сколько раз увеличить картинку
а src адрес картинки.
Или если innerHTML использовать запрещено то можно на чистом DOMe (работает в IE5+):


 function putImg(src,x,y,d)//d - коэфицент - во сколько раз увеличить картинку
 {
	//загружаем картинку
	var IMG=new Image() //что бы узнать высоту и ширину
	IMG.src=src;
	var w=Math.round(d*IMG.width)
	var h=Math.round(d*IMG.height)
	/*
	document.body.innerHTML+= "<img src='"+src+"' style='position:absolute;"+
	"width:"+w+"px;height:"+h+"px;"+
	"top:"+y+"px;left:"+x+"px;' >";
	*/

	var pikcha=document.createElement("img")
	pikcha.setAttribute("src",src);
	pikcha.style.position="absolute";
	pikcha.style.width= w+"px";
	pikcha.style.height=h+"px";
	pikcha.style.top=y+"px";
	pikcha.style.left=x+"px";
	document.body.appendChild(pikcha)

 }

17

Re: HTA/VBScript: Помогите справиться с функцией LoadPicture()

mikser, о чём спор ? Решение уже давно было найдено. Достаточно было

document.createElement("img")

и ожидания события onload у картинки. Задачка на столько проста и тривиальна, что даже говорить особо не о чем было. Учитывая что на просторах интернета это было расписано уже миллионы раз. ) Всё упёрлось лишь в то, что автор не смог сразу объяснить, для каких целей ему нужна предзагрузка. Не думаю, что стоит дальше продолжать.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !