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

  • Май 22, 2012, 13:24:56 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Создана конференция в Jabber'е для обсуждения мелких вопросов касающихся AutoIt.

Всем у кого есть джаббер-клиент, могут присоединиться к конференции по адресу xmpp:autoit@conference.jabber.ru

Комната/Конференция/Чат не призвана заменить этот форум, а лишь для ускорения получения ответов на элементарные и короткие вопросы, которые возможно не требуют создания специальной темы на данном форуме. Для всех остальных, сколь-нибудь сложных и комплексных проблем - исключительно на форум. Комната является постоянной, но при заходе у пользователя будет отсутствовать право писать в общий чат.

Тема на форуме.

Реклама

Автор Тема: [Элементы GUI] Как написать "Индикатор задержки"? - не "бар заполнения"! (+)  (Прочитано 3821 раз)

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

akoulev [?]

  • Новичок
  • *
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Дано: есть давным-давно написанный -и даже неплохо работающий  :whistle:- скрипт, частью коего является 5-минутная задержка:
Код: AutoIt [Выделить]
Sleep(5*60*1000)
, но непонятно, - при случайном взгляде на экран: то ли первая минута "задержки" только что пошла; то ли последняя минута уже заканчивается... Что есть весьма неудобно.
И вот, 'душа просит' ;D такого графического индикатора 5-минутной задержки, de facto - графического таймера  (даю описание желанного индикатора по порядку.):
1) Жёлтенький круг a'ля  "Солнышко" в центре экрана. Радиус (диаметр) 'солнышка' (в сантиметрах/миллиметрах/пикселях) - имхо, можно брать из ini-шника.
2) 12 рисок по кругу - типа делений циферблата часов. Вместо риски может быть и точка.
3) В центре - секундная (и только секундная!) стрелка, раз в секунду совершающая доворот на одну шестидесятую от трёхсот шестидесяти градусов. (т.е., на 6 градусов. :) ); впрочем, может двигаться и непрерывно; - лишь бы оборот совершался за 60 секунд. Ну, или около того. ;)
4) ГЛАВНОЕ!!! Чтобы на жёлтом солнышке постоянно находилась, скажем, синяя цифра, очень крупная, - практически во весь круг; показывающая, сколько минут осталось до 5-и (можно и до 9 включительно - для 10-минутной задержки; значение можно брать из ini-шника.)
5) Отсчёт минут - обратный; но можно сделать и опцию (прямой/обратный, и значение можно брать из того же ini-шника.) Смена минут - в 00 секунд.
6) При клике на "солнышке", пусть оно (солнышко) исчезает на 5 секунд. (или же - на "сколько-то секунд"; тот же ini-шник). Может, также, и не исчезать, а становиться крепко прозрачнее, на "сколько-то процентов"; "сколько-то " - ini-шник).
7) По окончанию отмеренного срока задержки (цифра "0" без кавычек + полный оборот нашей секундной стрелки) - пусть исчезает (вариант - исчезает вкупе со взрывом мультяшной "бомбочки"; наличие "бомбочки" - ini-шник; звук "взрыва" - ini-шник.)
8) Напомню, что отсчёт 5-и минут начинается с цифры 4; если же с 5-и, то это будет уже 6 минут. ;) Впрочем, цифра 5 имеет моральное право появиться при старте задержки, на одну секунду.

Ай нид хелп, плиз - сам я этого точно не напишу... ;( !
« Последнее редактирование: Ноябрь 26, 2009, 15:00:15 от akoulev »



  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Гм-гм... Судя по обилию ответов  :D - тяжко я 'задвинул'. Ok. А если - так?

«Индикатор» на Яндекс.Фотках




  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Народ, ау!
Черкните хоть словечко-то!
Уже 80 человек прочло - и ти-ши-на: что, конечно, тоже -в своём роде- ответ, - и всё-таки, всё-таки... Во, идея! Мини-опрос, на тему "я не отвечаю на этот вопрос, поскольку":
1) Слишком наглая просьба      [ ]  ;)
2) Это слишком просто              [ ]
3) Это слишком очевидно          [ ]
4) Это слишком сложно             [ ]
5) Я б с душой, да времени нет [ ]
6) Что-то своё, сокровенно-затаённое.

Hint: Я прекрасно понимаю, что мне никто ничего не должен. :) И я очень благодарен за помощь, которую мне здесь всегда оказывали. Понимаю, что что-то не так в моём вопросе-запросе, поэтому хочу прояснить для себя (И для всех (с) Деконт, к/ф "Кин-дза-дза"), что я делаю не так.
« Последнее редактирование: Декабрь 09, 2009, 13:58:15 от akoulev »



  Записан

Kaster [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 502
  • Online Online
  • Пол: Мужской
  • Сообщений: 3286
  • Версия AutoIt: 3.3.8.1
  • Мой Аватар, он лучший самый
    • Награды
В качестве рекомендации
1. писать как можно коротко и четко. Не все могут позволить себе читать столько лирических отступлений.
2. Данная тема скорее уместна тут Стол заказов
Т.к. ты не приводишь свой код, где не можешь разобраться в каких-либо особенностях или тонкостях или просто-напросто не знаешь синтаксиса того или иного действия, а просишь написать с нуля готовый скрипт.

По поводу сложности, сложного ничего нет. Но муторно. Легче делать исправления в готовом скрипте или вносить модификации. В принципе весь алгоритм ты сам написал. а это как минимум 50% всего дела. Я сам так делаю. сначала расписываю порядок действий а потом реализую его с помощью команд AutoIt. Хелп всегда под рукой. Советую делать так же ;)
Но сначала, все же прислушайся к совету 2 и создай тему в разделе "Стол заказов"




  Записан
Конференция посвященная AutoIt на jabber.ru - autoit@conference.jabber.ru
Как попасть на конференцию читаем тут
Файлы можете качать сюда - Файловая область
Продолжать дискуссию в теме отмеченной как "Решенная" - моветон.
Банхамером не обладаю, так что расслабьтесь ;)
Банхамером обладаю, так что не расслабляться :Ban:

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Спасибо; код, кстати, я приводил:
Код: AutoIt [Выделить]
Sleep(5*60*1000)
;D
Общую мысль я понял; но надо с чего-то начать. Скажем, код
Код: AutoIt [Выделить]
MsgBox(0, "MsgBox", "Message", 11)
даёт нам левое окошко [см. картинку ниже]; а вот как получить правое окошко?

Я-то его получил, благодаря mspaint-у... :whistle:
« Последнее редактирование: Декабрь 09, 2009, 14:26:55 от akoulev »



  Записан

Kaster [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 502
  • Online Online
  • Пол: Мужской
  • Сообщений: 3286
  • Версия AutoIt: 3.3.8.1
  • Мой Аватар, он лучший самый
    • Награды
Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
$path = 'путь до картинки в формате jpg, bmp, gif'
;$path = @ScriptDir & '\smile.jpg'
$hGUI = GUICreate('MsgBox', 150, 150, -1, -1)
$hOK = GUICtrlCreateButton('OK', 15, 120, 120, 20)
$pic = GUICtrlCreatePic($path, 10, 10, 130, 100)
GUISetState()
$start = TimerInit()
While TimerDiff($start) / 1000 < 3; Задержк в 3 секунды
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE, $hOK
            GUIDelete($hGUI)
            ExitLoop
    EndSwitch
WEnd
 




  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Спасибо; изучаю/вникаю.




  Записан

Kaster [?]

  • Глобальный модератор
  • *
  • *****
  • Репутация: 502
  • Online Online
  • Пол: Мужской
  • Сообщений: 3286
  • Версия AutoIt: 3.3.8.1
  • Мой Аватар, он лучший самый
    • Награды
Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
$start = TimerInit()
$pos = WinGetPos('[CLASS:Shell_TrayWnd]')
$delta = $pos[3]
Global $diameter = 200
Global $title = 'Это желтый круг'
$xC = @DesktopWidth / 2 - $diameter / 2
$yC = @DesktopHeight / 2 - $diameter / 2 - $delta
$hGUI = GUICreate($title, $diameter, $diameter, $xC, $yC, $WS_POPUP)
GUISetBkColor(0xFFFF00)
_GuiRoundCorners($hGUI, 0, 0, $diameter, $diameter)
$pic = GUICtrlCreatePic('', 0, 0, $diameter, $diameter, -1, $GUI_WS_EX_PARENTDRAG)

$hGr = GUICtrlCreateGraphic(0, 0, $diameter, $diameter)
GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 2)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000, 0xff0000)
$Pi = 3.14159265358979
For $i = 1 to 12
    GUICtrlSetGraphic(-1, $GUI_GR_DOT, $diameter / 2 + (($diameter - 10) / 2) * Cos($i*2*$Pi / 12), $diameter / 2 + (($diameter - 10) / 2) * Sin($i*2*$Pi / 12))
Next
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FF00, $GUI_GR_NOBKCOLOR)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, $diameter / 2 - 60, $diameter / 2 - 60, 120, 120)
GUISetState(@SW_SHOW)
$sec_old = -1
$tick = ''
$time = ''
$press = 0
While TimerDiff($start) / 1000 < 300
    $msg = GuiGetMsg()
    $sec_new = Int(TimerDiff($start) / 1000)
    $min = 4 - Int($sec_new / 60)
    If $sec_old <> $sec_new Then
        GUICtrlDelete($tick)
        GUICtrlDelete($time)
        $sec_old = $sec_new
        $tick = GUICtrlCreateGraphic(0, 0, 1, 1)
        GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 2)
        GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x0000ff, 0x0000ff)
        GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $diameter / 2 + 62*Cos($sec_new*6*$Pi/180 - $Pi/2), $diameter / 2 + 62*Sin($sec_new*6*$Pi/180 - $Pi/2))
        GUICtrlSetGraphic(-1, $GUI_GR_LINE, $diameter / 2 + (($diameter-25)/2)*Cos($sec_new*6*$Pi/180 - $Pi/2), $diameter / 2 + (($diameter-25)/2)*Sin($sec_new*6*$Pi/180 - $Pi/2))
        $time = GUICtrlCreateLabel($min, 10, 25, 180, 180, $SS_CENTER)
        GUICtrlSetColor(-1, 0x0000FF)
        GUICtrlSetFont(-1, 100)
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        GUICtrlSetGraphic($tick, $GUI_GR_REFRESH)
    EndIf
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_SECONDARYUP
            Switch $press
                Case 0
                    WinSetTrans($title, '', 100)
                    $press = 1
                Case 1
                    WinSetTrans($title, '', 255)
                    $press = 0
                EndSwitch
    EndSwitch
WEnd
Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3)
   Dim $pos, $ret, $ret2
   $pos = WinGetPos($h_win)
    $ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long",  $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3,  "long", $i_y3)
   If $ret[0] Then
      $ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1)
      If $ret2[0] Then
         Return 1
      Else
         Return 0
      EndIf
   Else
      Return 0
   EndIf
EndFunc;==>_GuiRoundCorners
 
После запуска скрипта идет отсчет времени. Секундная стрелка перемещается на 6 градусов за 1 с, тем самым делая один полный оборот за 1 мин. В центре время в мин. оставшееся до конца работы скрипта.
При ПКМ выставляется прозрачность 100, при втором ПКМ прозрачность убирается. Окно двигается Drag'ом ЛКМ
По истечению времени скрипт закроется. Все параметры регулируются в скрипте. Чтение из ini, дума/надеюсь доработаешь сам.
« Последнее редактирование: Декабрь 09, 2009, 18:21:36 от Kaster »



  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Вау; Kaster, Ты - гений!!!   :beer:
Вот теперь я буду ДОЛГО осознавать, чё-как в этом коде работает!
Код: AutoIt [Выделить]
$i=0
While $i<1000000000
$i=$i+1
MsgBox ( "" , "" , "Спасибо № " & $i & "!!!" , 1)
Wend
Exit
:laugh:
« Последнее редактирование: Декабрь 15, 2009, 17:16:45 от akoulev »



  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Уважаемый Kaster, у меня пара проблем с этим кодом:
1) Иногда отображается не большая и синяя цифра минут, а совсем маленькая и чёрная (где-то ~на секунду), типа - 10-м кеглем, похоже на какой-то системный шрифт; - не то чтобы это очень уж сильно мешало, но "куда копать" - непонятно вообще; кстати, круг вместе с синей цифрой иногда -при смене текущей секунды- сильно "вздрагивает" - обновляясь целиком; а иногда - нет. Видеокарта - более чем стабильна (сын-"игрун", 'Team Fortress' у него идёт нормально).
2) Захотел в одним из скриптов сделать задержку 1 мин. (а не дефолтные  5); сказано - сделано;
Код: AutoIt [Выделить]
   $min = 0 - Int($sec_new / 60); ЗАДАЁМ КОЛИЧЕСТВО МИНУТ
 
Запускаем  - стартует, понятно, нормально; но когда доходит до 0 минут 0 секунд, то из программы не выходит, а продолжает работать; минута при этом становится -1 (минус один). Тот же эффект - если делаем 2 минуты (1мин+60сек). К моему великому стыду, я так и не понял, где искать жёстко заданные изначальные 5 минут.
3) Для самостоятельной отладки, хотел бы добавить режим "торопыжка", чтобы стрелка обходила круг не за 60 сек, а, скажем, за 2-3-5 секунд - и тоже, не совсем понятно, как это сделать.

Основной вопрос - конечно, пункт 2. Pls.
« Последнее редактирование: Февраль 13, 2010, 21:16:39 от akoulev »



  Записан

snoitaleR [?]

  • AutoIt Гуру
  • *****
  • Репутация: 172
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 729
  • Версия AutoIt: 3.3.8.0
    • Награды
akoulev
Я думаю, общее время работы скрипта скрыто под цифрой 300 в строке с While...




  Записан
Главное в жизни человека - это отношение...

Guezt Gutsy [?]

  • Продвинутый
  • ***
  • Репутация: 75
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 333
  • Версия AutoIt: 3.3.6.1
    • Награды
akoulev
Замени
в коде это:
Код: AutoIt [Выделить]
While TimerDiff($start) / 1000 < 300
    $msg = GuiGetMsg()
    $sec_new = Int(TimerDiff($start) / 1000)
на это:
Код: AutoIt [Выделить]
$speed = 100 ; чем меньше параметр, тем больше скорость
While TimerDiff($start) / $speed < 300
    $msg = GuiGetMsg()
    $sec_new = Int(TimerDiff($start) / $speed)
:)




  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
akoulev
Замени
в коде это:
Код: AutoIt [Выделить]
While TimerDiff($start) / 1000 < 300
    $msg = GuiGetMsg()
    $sec_new = Int(TimerDiff($start) / 1000)
на это:
Код: AutoIt [Выделить]
$speed = 100 ; чем меньше параметр, тем больше скорость
While TimerDiff($start) / $speed < 300
    $msg = GuiGetMsg()
    $sec_new = Int(TimerDiff($start) / $speed)
:)
Нет, Ты неправ: заменив 1000 на 100, я получил, что прога вырубается через 12 секунд, стрелка при этом не прошла даже одного оборота.


Добавлено: Февраль 13, 2010, 22:13:44
akoulev
Я думаю, общее время работы скрипта скрыто под цифрой 300 в строке с While...
Спасибо: это помогло. Теперь код:
Код: AutoIt [Выделить]
Zaderj();

Func Zaderj();
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
$start = TimerInit()
$minut = 1; ЗАДАЁМ КОЛИЧЕСТВО МИНУТ, к которым добавляется 60 сек.; щас - 1 мин; => таймер на 2 мин.
$minut = $minut*60 + 60
$pos = WinGetPos('[CLASS:Shell_TrayWnd]')
$delta = $pos[3]
Global $diameter = 200
Global $title = 'Это желтый круг'
$xC = @DesktopWidth / 2 - $diameter / 2
$yC = @DesktopHeight / 2 - $diameter / 2 - $delta
$hGUI = GUICreate($title, $diameter, $diameter, $xC, $yC, $WS_POPUP)
GUISetBkColor(0xFFFF00)
_GuiRoundCorners($hGUI, 0, 0, $diameter, $diameter)
$pic = GUICtrlCreatePic('', 0, 0, $diameter, $diameter, -1, $GUI_WS_EX_PARENTDRAG)

$hGr = GUICtrlCreateGraphic(0, 0, $diameter, $diameter)
GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 2)
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0xff0000, 0xff0000)
$Pi = 3.14159265358979
For $i = 1 to 12
    GUICtrlSetGraphic(-1, $GUI_GR_DOT, $diameter / 2 + (($diameter - 10) / 2) * Cos($i*2*$Pi / 12), $diameter / 2 + (($diameter - 10) / 2) * Sin($i*2*$Pi / 12))
Next
GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x00FF00, $GUI_GR_NOBKCOLOR)
GUICtrlSetGraphic(-1, $GUI_GR_ELLIPSE, $diameter / 2 - 60, $diameter / 2 - 60, 120, 120)
GUISetState(@SW_SHOW)
$sec_old = -1
$tick = ''
$time = ''
$press = 0
$speed = 1000 ; чем меньше параметр, тем больше скорость;default=1000 - неверно!!!!
While TimerDiff($start) / $speed < $minut
    $msg = GuiGetMsg()
    $sec_new = Int(TimerDiff($start) / 1000)
    $min = (($minut-60)/60) - Int($sec_new / 60); ЗАДАЁМ КОЛИЧЕСТВО МИНУТ; щас - 0
    If $sec_old <> $sec_new Then
        GUICtrlDelete($tick)
        GUICtrlDelete($time)
        $sec_old = $sec_new
        $tick = GUICtrlCreateGraphic(0, 0, 1, 1)
        GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 2)
        GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x0000ff, 0x0000ff)
        GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $diameter / 2 + 62*Cos($sec_new*6*$Pi/180 - $Pi/2), $diameter / 2 + 62*Sin($sec_new*6*$Pi/180 - $Pi/2))
        GUICtrlSetGraphic(-1, $GUI_GR_LINE, $diameter / 2 + (($diameter-25)/2)*Cos($sec_new*6*$Pi/180 - $Pi/2), $diameter / 2 + (($diameter-25)/2)*Sin($sec_new*6*$Pi/180 - $Pi/2))
        $time = GUICtrlCreateLabel($min, 10, 25, 180, 180, $SS_CENTER)
        GUICtrlSetColor(-1, 0x0000FF)
        GUICtrlSetFont(-1, 100)
        GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
        GUICtrlSetGraphic($tick, $GUI_GR_REFRESH)
    EndIf
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $GUI_EVENT_SECONDARYUP
            Switch $press
                Case 0
                    WinSetTrans($title, '', 100)
                    $press = 1
                Case 1
                    WinSetTrans($title, '', 255)
                    $press = 0
                EndSwitch
    EndSwitch
WEnd
EndFunc

Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3)
   Dim $pos, $ret, $ret2
   $pos = WinGetPos($h_win)
    $ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long",  $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3,  "long", $i_y3)
   If $ret[0] Then
      $ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1)
      If $ret2[0] Then
         Return 1
      Else
         Return 0
      EndIf
   Else
      Return 0
   EndIf
EndFunc;==>_GuiRoundCorners




  Записан

Guezt Gutsy [?]

  • Продвинутый
  • ***
  • Репутация: 75
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 333
  • Версия AutoIt: 3.3.6.1
    • Награды
akoulev
Замени
в коде это:
Код: AutoIt [Выделить]
While  TimerDiff($start) / 1000 < 300
    $msg = GuiGetMsg()
     $sec_new = Int(TimerDiff($start) / 1000)
на это:
Код: AutoIt [Выделить]
$speed  = 100 ; чем меньше параметр, тем больше скорость
While  TimerDiff($start) / $speed < 300
    $msg = GuiGetMsg()
     $sec_new = Int(TimerDiff($start) / $speed)
:)
 
 проверка на минус:
 заменить это:
 
Код: AutoIt [Выделить]
$time = GUICtrlCreateLabel($min, 10, 25, 180, 180, $SS_CENTER)
         
на это:
 
Код: AutoIt [Выделить]
if $min >= 0 Then
         $time = GUICtrlCreateLabel($min, 10, 25, 180, 180, $SS_CENTER)
         Else
         EndIf
в общем вот кусок полностью:
 
Код: AutoIt [Выделить]
$speed = 10 ; по умолчанию 1000 ( секунда )
 $sMin = 15 ; количество минут
 While TimerDiff($start) / $speed < 60*$sMin ; тут было 300 тоесть 5  минут по 60 секунд
     $msg = GuiGetMsg()
     $sec_new = Int(TimerDiff($start) / $speed)
     $min = $sMin - Int($sec_new / 60) ; и тут минуты
     If $sec_old <> $sec_new Then
         GUICtrlDelete($tick)
         GUICtrlDelete($time)
         $sec_old = $sec_new
         $tick = GUICtrlCreateGraphic(0, 0, 1, 1)
         GUICtrlSetGraphic(-1, $GUI_GR_PENSIZE, 2)
         GUICtrlSetGraphic(-1, $GUI_GR_COLOR, 0x0000ff, 0x0000ff)
         GUICtrlSetGraphic(-1, $GUI_GR_MOVE, $diameter / 2 +  62*Cos($sec_new*6*$Pi/180 - $Pi/2), $diameter / 2 +  62*Sin($sec_new*6*$Pi/180 - $Pi/2))
         GUICtrlSetGraphic(-1, $GUI_GR_LINE, $diameter / 2 +  (($diameter-25)/2)*Cos($sec_new*6*$Pi/180 - $Pi/2), $diameter / 2 +  (($diameter-25)/2)*Sin($sec_new*6*$Pi/180 - $Pi/2))
         if $min >= 0 Then ; тут проверка на отрицательность минуты
         $time = GUICtrlCreateLabel($min, 10, 25, 180, 180, $SS_CENTER)
         Else
         EndIf
         GUICtrlSetColor(-1, 0x0000FF)
         GUICtrlSetFont(-1, 100)
         GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
         GUICtrlSetGraphic($tick, $GUI_GR_REFRESH)
     EndIf
     Switch $msg
         Case $GUI_EVENT_CLOSE
             ExitLoop
         Case $GUI_EVENT_SECONDARYUP
             Switch $press
                 Case 0
                     WinSetTrans($title, '', 100)
                     $press = 1
                 Case 1
                     WinSetTrans($title, '', 255)
                     $press = 0
                 EndSwitch
     EndSwitch
 WEnd

 и да простит меня Kaster

где я параметр $speed поменял это лишь для того что бы быстро прогнать скрипт :)


Добавлено: Февраль 13, 2010, 22:23:37
akoulev  [?]
Цитата
Нет, Ты неправ: заменив 1000 на 100, я получил, что прога вырубается через 12 секунд, стрелка при этом не прошла даже одного оборота.
ну я смотрю к твой код ты в одном месте только скорость поменял а я в двух в том числе и на новую стрелку ;)
Код: AutoIt [Выделить]
  $sec_new = Int(TimerDiff($start) / $speed)
тут :)


Добавлено: Февраль 13, 2010, 22:25:54
Вот полностью код, проверь ;)
« Последнее редактирование: Февраль 13, 2010, 22:25:55 от Guezt, Причина: Объединение сообщений »



  Записан

akoulev [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 2
  • Offline Offline
  • Сообщений: 140
  • Версия AutoIt: 3.3.6.1
    • Награды
Да, точно, спасибо!!! Торопыжка реализован! Но как же теперь экран рябит (там, где размещено "солнышко"), - боже ж мой! :)
Репутацию 'подкручу' через сутки - лимит-с; ещё раз спасибо!!!




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[Время / дата] Как вычесть из "1 октября" "30-е сентября" и получить "1"? разн
AutoIt для новичков
akoulev 6 3469 Последний ответ Октябрь 07, 2009, 09:36:42
от akoulev
[Данные, строки] Как "вытащить" данные от "return"при использовании "call"?
AutoIt для новичков
akoulev 9 3095 Последний ответ Октябрь 28, 2009, 01:23:30
от Yashied
Использование "If", "Then", "Else"
AutoIt для новичков
Mark 14 3076 Последний ответ Февраль 15, 2010, 11:29:38
от akoulev
Как послать "Tab" и ""Enter" в скрытое окно интернет эксплорера?
AutoIt для новичков
forfrends 8 1847 Последний ответ Апрель 10, 2011, 11:50:11
от madmasles
как привязать клавиши "-" и "+" на цифр. клавиатуре для умень. и увел. звука?
AutoIt для новичков
agikon 6 927 Последний ответ Август 05, 2011, 23:10:44
от Yashied
как правильно Run("C:\r\no.bat","",@SW_HIDE) ;отсылаем сообщение
AutoIt для новичков
gagarin74 5 732 Последний ответ Август 17, 2011, 14:16:28
от Kaster
Как в слове "пример" букву "м" сделать красной?
AutoIt для новичков
agikon 8 771 Последний ответ Август 23, 2011, 17:48:01
от Kaster
Как "привязать" массив определённых чисел к условию "if" ?
AutoIt для новичков
agikon 19 583 Последний ответ Март 12, 2012, 16:53:08
от agikon
Почему _GUIColorPicker_Create сохраняет цвет в виде "15070215" а не в "0x00FFFF"
AutoIt для новичков
agikon 2 135 Последний ответ Март 31, 2012, 16:45:37
от agikon
"Ты" или "Вы" ?
Общение
Александр 12 532 Последний ответ Май 15, 2012, 15:54:26
от Garrett


Реклама

* Последние сообщения на форуме
post Re: Смена IP адресса
[AutoIt для новичков] Zaramot Сегодня в 13:04:33
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Александр Сегодня в 12:59:21
post Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] madmasles Сегодня в 12:23:31
post [Мышь, клавиатура] Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] Nurgazy Сегодня в 12:09:36
post Re: Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] madmasles Сегодня в 12:08:03
post Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] webmonster Сегодня в 12:03:38
post Re: Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] ---Zak--- Сегодня в 11:39:56
post Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] eropov Сегодня в 11:26:37
post Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] madmasles Сегодня в 11:13:16
post [Мышь, клавиатура] Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] Nurgazy Сегодня в 10:56:29

* Пользователи онлайн
  • Dot Гостей: 131
  • Dot Скрыт: 2
  • Dot Пользователей: 31
  • Dot Пользователи Online: