Автор Тема: Do Until обновление картинки  (Прочитано 564 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Пытаюсь разобраться в функциях и наткнулся на непонятное для меня. Программа должна выдавать рандомно картинку каждые 5секунд. При запуске оно выдаёт правильную картинку, а через 5секунд оно выдает мне всегда картинку которая должна была быть до этого. Random при открытие передал 5, оно открыло 5тую картинку. Дальше оно оставляет 5тую картинку, а рандом выдал 7 дальше рандом выдал 9 оно показало 7 картинку 10 показало 9ю 2 показала 10 и так далее. Как исправить и почему так?  :thanks:
Код: AutoIt [Выделить]
Func NEWIMG()
    Do
        $sText = Random(1, 10, 1);
        _WinAPI_SetWindowText($hLabel, getimg($sText))
        _WinAPI_SetWindowText($hLabel2, $sText)
        Sleep(5000)
        NEWIMG()
    Until GUIGetMsg() = -3
EndFunc


Русское сообщество AutoIt

Do Until обновление картинки
« Отправлен: Май 15, 2017, 14:43:51 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2124
  • Репутация: 458
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Do Until обновление картинки
« Ответ #1, Отправлен: Май 15, 2017, 14:59:54 »
Вы точно ту функцию привели? Картинка и  _WinAPI_SetWindowText не подходят друг для друга  8)

Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #2, Отправлен: Май 15, 2017, 15:10:04 »
Вы точно ту функцию привели? Картинка и  _WinAPI_SetWindowText не подходят друг для друга  8)
Работает )) getimg возвращает переменную в которой GUICtrlCreatePic, правда сверху на ней еще и рандомное число..
А как по человечески сделать?..
« Последнее редактирование: Май 15, 2017, 15:17:57 от VladislavM »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2124
  • Репутация: 458
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Do Until обновление картинки
« Ответ #3, Отправлен: Май 15, 2017, 15:18:48 »
VladislavM  [?]
Цитировать
А как по человечески сделать?
Ну раз вы новичок, то пока не нужно лазить в winapi, все что вам нужно - есть в autoit из коробки. Работа с картинками там тоже имеется. Смотрите примеры к функциям
Код: AutoIt [Выделить]
Так функция GUICtrlCreatePic  - создает элемент картинка, картинку можно не указывать - эта функция - одна из построителей gui, который вы можете спроектировать в программе koda, она идет в комплекте.
Функция GUICtrlSetImage - уже применяется когда нужно изменить изображение, так сказать runtime  и используется во всяких циклах итп.. Поэтому в процессе работы она предпочтительнее.
И обратите внимание, что вы сперва создаете контрол первой функцией, и задаете изображение второй.
« Последнее редактирование: Май 15, 2017, 15:23:55 от inververs »

Русское сообщество AutoIt

Re: Do Until обновление картинки
« Ответ #3 Отправлен: Май 15, 2017, 15:18:48 »

Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #4, Отправлен: Май 15, 2017, 16:37:28 »
VladislavM  [?]
Цитировать
А как по человечески сделать?
Ну раз вы новичок, то пока не нужно лазить в winapi, все что вам нужно - есть в autoit из коробки. Работа с картинками там тоже имеется. Смотрите примеры к функциям
Код: AutoIt [Выделить]
Так функция GUICtrlCreatePic  - создает элемент картинка, картинку можно не указывать - эта функция - одна из построителей gui, который вы можете спроектировать в программе koda, она идет в комплекте.
Функция GUICtrlSetImage - уже применяется когда нужно изменить изображение, так сказать runtime  и используется во всяких циклах итп.. Поэтому в процессе работы она предпочтительнее.
И обратите внимание, что вы сперва создаете контрол первой функцией, и задаете изображение второй.
:thanks: Можете разъяснить "И обратите внимание, что вы сперва создаете контрол первой функцией, и задаете изображение второй" ? не пойму..

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2124
  • Репутация: 458
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Do Until обновление картинки
« Ответ #5, Отправлен: Май 15, 2017, 16:48:18 »
А что именно объяснить? Зачем 2 функции?

Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #6, Отправлен: Май 15, 2017, 18:12:10 »
А что именно объяснить? Зачем 2 функции?
Первая функция принимает число и оператором switch выбирает картинку возвращая результат.
return $result = GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386);
Вторую вы видели. Сейчас попробую без WinAPI и повторно вызов функции наверное правильнее за Do Until вывести.
switch можно было поместить и в туже функцию, но я подумал что лучше отдельно что бы мне легче было править когда функции будет больше. А стоп, до меня дошло что её не нужно снова вызывать..)
« Последнее редактирование: Май 15, 2017, 18:20:40 от VladislavM »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2124
  • Репутация: 458
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Do Until обновление картинки
« Ответ #7, Отправлен: Май 15, 2017, 18:20:33 »
Я уточнял, что именно вам не понятно, а не спрашивал у вас зачем вам две функции.  8)

Русское сообщество AutoIt

Re: Do Until обновление картинки
« Ответ #7 Отправлен: Май 15, 2017, 18:20:33 »

Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #8, Отправлен: Май 15, 2017, 18:24:53 »
Я уточнял, что именно вам не понятно, а не спрашивал у вас зачем вам две функции.  8)
"И обратите внимание, что вы сперва создаете контрол первой функцией, и задаете изображение второй." Что такое контрол. Кстати то что числа совпадали это мне так просто складывалось, всегда изображение опаздывает.
Код: AutoIt [Выделить]
Func NEWIMG()
    Do
        $sText = Random(1, 10, 1);
        GUICtrlSetData($hLabel, getimg($sText))
        _WinAPI_SetWindowText($hLabel2, $sText)
        Sleep(5000)
    Until GUIGetMsg() = -3
EndFunc


Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2124
  • Репутация: 458
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Do Until обновление картинки
« Ответ #9, Отправлен: Май 15, 2017, 18:31:54 »
VladislavM  [?]
Цитировать
Что такое контрол
Это всякие кнопочки, переключатели, иконки, слайдеры, выпадающие списки. - все то, с чем взаимодействует пользователь. Это все контролы (controls)
Элемент картинка - это тоже контрол.
Функции которые начинаются на GUICtrlCreate как раз предназначены для этого.
Почитайте тут https://autoit-script.ru/autoit3_docs/guiref/GUIRef.htm - база, а то без понимания этого вам дальше не сдвинуться в обучении.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3295
  • Репутация: 865
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #10, Отправлен: Май 15, 2017, 18:35:54 »
VladislavM
С Delphi переходим, да? ;)
Цитировать
return $result = GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386);
Подобная конструкция вернёт boolean, т.е. результат сравнения $result с идентификатором созданного элемента (контрола). Если вы хотите получить ID созданного элемента, то нужно делать так
Код: AutoIt [Выделить]
$result = GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386)
return $result

Или ещё проще
Код: AutoIt [Выделить]
return GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386)


Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #11, Отправлен: Май 15, 2017, 18:43:03 »
VladislavM
С Delphi переходим, да? ;)
Цитировать
return $result = GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386);
Подобная конструкция вернёт boolean, т.е. результат сравнения $result с идентификатором созданного элемента (контрола). Если вы хотите получить ID созданного элемента, то нужно делать так
Код: AutoIt [Выделить]
$result = GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386)
return $result

Или ещё проще
Код: AutoIt [Выделить]
return GUICtrlCreatePic(@ScriptDir & "/img/1.jpg", 0, 0, 410, 386)

Делаю как в первом варианте, просто для ясноты картины решил дописать return. С языками незнаком, просто решил для саморазвития позаниматься.

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3295
  • Репутация: 865
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #12, Отправлен: Май 15, 2017, 18:53:04 »
OffTopicVladislavM
Цитировать
С языками незнаком, просто решил для саморазвития позаниматься.
(шёпотом, дружески похлопывая по плечу)
- Ну, занимайтесь. Не буду вас отвлекать.
(уходит)

Оффлайн VladislavM [?]

  • Новичок
  • *
  • Сообщений: 9

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Do Until обновление картинки
« Ответ #13, Отправлен: Май 15, 2017, 18:56:20 »
VladislavM  [?]
Цитировать
Что такое контрол
Это всякие кнопочки, переключатели, иконки, слайдеры, выпадающие списки. - все то, с чем взаимодействует пользователь. Это все контролы (controls)
Элемент картинка - это тоже контрол.
Функции которые начинаются на GUICtrlCreate как раз предназначены для этого.
Почитайте тут  - база, а то без понимания этого вам дальше не сдвинуться в обучении.
Я понял, я передаю контрол внутри контрола получается.. или контрол поверх контрола что бессмысленно :-\
Вот так уже лучше, но проблема не решена..
Код: AutoIt [Выделить]
Func NEWIMG()
    Do
        $sText = Random(1, 10, 1);
        getimg($sText)
        GUICtrlCreateLabel($sText, 10, 420)
        Sleep(5000)
    Until GUIGetMsg() = -3
EndFunc


Онлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3791
  • Репутация: 948
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Do Until обновление картинки
« Ответ #14, Отправлен: Май 15, 2017, 19:24:56 »
VladislavM

ПредупреждениеЗа нарушение общих правил (пункт В.2):
Цитировать
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.

Скорблю и помню.




Русское сообщество AutoIt

Re: Do Until обновление картинки
« Ответ #14 Отправлен: Май 15, 2017, 19:24:56 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3995 Просмотров
Последний ответ Октябрь 24, 2011, 01:08:59
от agikon
1 Ответов
2495 Просмотров
Последний ответ Февраль 14, 2012, 09:29:58
от Redline
1 Ответов
2562 Просмотров
Последний ответ Май 12, 2012, 02:10:40
от running-frag
8 Ответов
2511 Просмотров
Последний ответ Август 09, 2012, 08:56:35
от Кайгородов В. Ю.
4 Ответов
1936 Просмотров
Последний ответ Март 09, 2013, 05:42:03
от Rimm
0 Ответов
1057 Просмотров
Последний ответ Март 08, 2013, 20:02:49
от madmasles
7 Ответов
2981 Просмотров
Последний ответ Сентябрь 20, 2013, 19:29:39
от AZJIO
3 Ответов
624 Просмотров
Последний ответ Ноябрь 09, 2015, 23:18:42
от Medic84
3 Ответов
1797 Просмотров
Последний ответ Декабрь 11, 2015, 14:40:42
от alex33
0 Ответов
524 Просмотров
Последний ответ Февраль 11, 2016, 16:37:08
от mmsgeorge