Автор Тема: Специальный секундомер  (Прочитано 10069 раз)

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

Оффлайн Alexander [?]

  • Новичок
  • *
  • Сообщений: 105
  • Репутация: 2
    • Награды
Специальный секундомер
« Создано: Февраль 27, 2011, 22:08:29 »
Версия AutoIt: 3.

Описание:  Нужно сделать секундомер, но не обычный. Таймер должен запускаться и останавливаться пробелом. При открытии программы внизу секундомера должен быть текст. Когда жмешь пробел и начинает считаться время, то этот текст изменяется (но не изменяется когда останавливаешь секундомер). И так 5 раз и для каждого раза свой текст (для каждой попытки я буду вводить текст в коде программы).
Каждая попытка должна записываться в колонку справа. И после каждой попытки чтоб можно было нажать кнопку "+2" (к попытке добавляется 2с) и "не засчитано" (на место попытки ставится не время, а NA). После того, как все 5 раз сделано, таймер убирается (и все что было) и выводится общий результат и 3 поля для ввода ФИО. Как подсчитать общий результат: лучшая и худшая (если есть NA - это и будет худшая) попытки убираются, а из оставшихся 3-х подсчитывается среднее арифметическое. Это и будет общим результатом.
После чего мне на мыло шлется общий результат, результат каждой попытки (их 5) и ФИО.

Примечания:  Если 2 попытки NA, то и общим результатом будет NA
« Последнее редактирование: Февраль 27, 2011, 22:30:12 от Alexander »

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

Специальный секундомер
« Отправлен: Февраль 27, 2011, 22:08:29 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Специальный секундомер
« Ответ #1, Отправлен: Февраль 27, 2011, 23:11:34 »
IMHO, это тебе в "Покупка/продажа, поиск услуг " нужно.


Думай, прежде чем говорить.

Оффлайн Alexander [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Re: Специальный секундомер
« Ответ #2, Отправлен: Февраль 28, 2011, 12:59:28 »
А что тут самое сложное?
А если так?
Цитировать
Секундомер должен запускаться и останавливаться пробелом. При открытии программы внизу секундомера должен быть текст. Когда жмешь пробел и начинает считаться время, то этот текст изменяется (но не изменяется когда останавливаешь секундомер). И так 5 раз и для каждого раза свой текст (для каждой попытки я буду вводить текст в коде программы).
Каждая попытка должна записываться в колонку справа. И после каждой попытки чтоб можно было нажать кнопку "+2" (к попытке добавляется 2с) и "не засчитано" (на место попытки ставится не время, а NA). После 5 раз таймер выключается, выводится окно ,что нужно ввести ФИО и записывается в текстовый файл результат каждой попытки и ФИО

Т.е. убрал подсчет общего результата и отправки на имейл  ;D

Оффлайн Alexander [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Re: Специальный секундомер
« Ответ #3, Отправлен: Март 02, 2011, 13:24:06 »
Все решилось! Оказалось, что мне этого всего не нужно  ;D
И чтоб не создавать новую тему, пишу тут.
Нужен просто секундомер в элементе Edit. Чтоб результат можно было скопировать, но не изменить! Т.е. $ES_Readonly. Чтоб запускался и останавливался пробелом. Чтоб я его смог вставить в любое место окна программы. И все! Почему я сам не могу сделать? Я не знаю как делаются секундомеры вообще. Напишите, пожалуйста, я разберусь! (Желательно с комментами)

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

Re: Специальный секундомер
« Ответ #3 Отправлен: Март 02, 2011, 13:24:06 »

Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
Re: Специальный секундомер
« Ответ #4, Отправлен: Март 02, 2011, 14:29:46 »
Вот пример таймера из офф. справки

Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <Date.au3>


Opt("TrayIconDebug", 1)
Opt("MustDeclareVars", 1)

Global $timer, $Secs, $Mins, $Hour, $Time

_Main()

Func _Main()
    ;Create GUI
    GUICreate("Timer", 120, 50)
    GUICtrlCreateLabel("00:00:00", 10, 10)
    GUISetState()
    ;Start timer
    $timer = TimerInit()
    AdlibRegister("Timer", 50)
    ;
    While 1
        ;FileWriteLine("debug.log",@min & ":" & @sec & " ==> before")
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
        ;FileWriteLine("debug.log",@min & ":" & @sec & " ==> after")
    WEnd
EndFunc   ;==>_Main
;
Func Timer()
    _TicksToTime(Int(TimerDiff($timer)), $Hour, $Mins, $Secs)
    Local $sTime = $Time  ; save current time to be able to test and avoid flicker..
    $Time = StringFormat("%02i:%02i:%02i", $Hour, $Mins, $Secs)
    If $sTime <> $Time Then ControlSetText("Timer", "", "Static1", $Time)
EndFunc   ;==>Timer


Делай что должен и  будь что будет

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Специальный секундомер
« Ответ #5, Отправлен: Март 02, 2011, 15:11:42 »
AZJIO  [?]
Цитировать
К сожалению скрипт Kaster найти не могу,
Ты  про этот?
Код: AutoIt [Выделить]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

Opt('GUIOnEventMode', 1)
Global $sIND = 'Stop'
Global $Pause
Global $sTitle = 'Main Title'
$hParent = GUICreate('Timer', 160, 40, -1, -1, $WS_POPUP, BitOR($GUI_WS_EX_PARENTDRAG, $WS_EX_TOPMOST))
GUISetState()

$hLabel = GUICtrlCreateLabel('', 2, 2, 156, 36)
GUICtrlSetFont(-1, 20, 1000)
GUICtrlSetColor(-1, 0xc03d3a)
GUICtrlSetBkColor(-1, 0xffffff)
WinSetTrans('Timer', '', 100)

GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit')
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_Move')
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_Move')
GUISetOnEvent($GUI_EVENT_MOUSEMOVE, '_Move')
HotKeySet('{Enter}', '_TogglePause')

While 1
    $sLabel = @HOUR & ':' & @MIN & ':' & @SEC & '.' & @MSEC
    GUICtrlSetData($hLabel, $sLabel)
    Sleep(90)
WEnd
Func _Exit()
    Exit
EndFunc

Func _Move()
    Switch @GUI_CtrlID
        Case $GUI_EVENT_PRIMARYDOWN
            Global $aWCoord_B = WinGetPos('Timer')
            Global $aMCoord_B = MouseGetPos()
            Global $ixWCoord_B = $aWCoord_B[0]
            Global $iyWCoord_B = $aWCoord_B[1]
            Global $ixMCoord_B = $aMCoord_B[0]
            Global $iyMCoord_B = $aMCoord_B[1]
            Global $ixDelta = $ixMCoord_B - $ixWCoord_B
            Global $iyDelta = $iyMCoord_B - $iyWCoord_B
            If ($ixDelta <= 170 AND $iyDelta <= 40) Then $sIND = 'Move'
        Case $GUI_EVENT_MOUSEMOVE
            If $sIND = 'Move' Then
                $aMCoord = MouseGetPos()
                $ixMCoord = $aMCoord[0]
                $iyMCoord = $aMCoord[1]
                $ixWCoord = $ixMCoord - $ixDelta
                $iyWCoord = $iyMCoord - $iyDelta
                WinMove('Timer', '', $ixWCoord, $iyWCoord)
            EndIf
        Case $GUI_EVENT_PRIMARYUP
            $sIND = 'Stop'
    EndSwitch
EndFunc

Func _TogglePause()
    If WinActive($sTitle) Then
        $Pause = NOT $Pause
        While $Pause
            Sleep(100)
        WEnd
    EndIf
EndFunc
 

я его писал в "младенчестве", поэтому ни за оптимизацию, ни за работоспособность (уже) не ручаюсь.
PS: я к сожалению, в отличие от тебя, не веду коллекцию своих скриптов, поэтому приходится выуживать свои же скрипты из форумов :(
Конференция посвященная AutoIt на jabber.ru - [email protected]
Как попасть на конференцию читаем тут


Оффлайн Alexander [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Re: Специальный секундомер
« Ответ #6, Отправлен: Март 02, 2011, 15:34:33 »
1. Мне нужно, чтоб в формате МИН:СЕК:(ДЕСЯТЫЕ И СОТЫЕ).
2. В Элементе GUICtrlCreateEdit. Чтоб результат можно было скопировать, но не изменить! Т.е. $ES_Readonly.
3. Запускалось пробелом или другой спец. кнопкой.
Кто может - сделайте, пожалуйста :)
PS. Чтоб я мог вставить в любое место окна программы  :)

Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
Re: Специальный секундомер
« Ответ #7, Отправлен: Март 03, 2011, 01:38:20 »
Если нужен просто отсчет времени, то вот
на основе с офф. форума
(нажмите для показа/скрытия)
Кнопка F1 - Запускает секундомер и обнуляет его (если нажать еще раз)
Кнопка F4 - Пауза
Кнопка F2 - Продолжает отсчет
Кнока ESC - Выход

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

Re: Специальный секундомер
« Ответ #7 Отправлен: Март 03, 2011, 01:38:20 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Специальный секундомер
« Ответ #8, Отправлен: Март 03, 2011, 05:45:17 »
Alexander, вот тебе специальная UDF библиотека для твоего специального секундомера + простецкий пример. Надеюсь, назначить горячую клавишу ты сам сможешь.

Код: AutoIt [Выделить]
#Include <GUIConstantsEx.au3>
#Include <Stopwatch.au3>

GUICreate('MyGUI', 400, 400)
_GUICtrlStopwatch_Create('', 20, 20, 49, 19)
$Button = GUICtrlCreateButton('Start', 165, 366, 70, 23)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button
            If _GUICtrlStopwatch_IsCount() Then
                _GUICtrlStopwatch_Stop()
                GUICtrlSetData($Button, 'Start')
            Else
                _GUICtrlStopwatch_Start()
                GUICtrlSetData($Button, 'Stop')
            EndIf
    EndSwitch
WEnd


Оффлайн Alexander [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Re: Специальный секундомер
« Ответ #9, Отправлен: Март 03, 2011, 11:17:56 »
VladUs
Yashied
Спасибо! Понравились оба, но последний жутко тормозит рывками. Даже не знаю почему  :-\

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Специальный секундомер
« Ответ #10, Отправлен: Март 03, 2011, 12:37:43 »
Это мой? Как тормозит? Там и тормозить-то нечему... Ты запускал мой скрипт или пытался приспособить его под свои задачи?

Оффлайн Alexander [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Re: Специальный секундомер
« Ответ #11, Отправлен: Март 03, 2011, 12:41:17 »
Yashied
Да, твой. Как ты мне дал, так и запустил, ничего не трогал... Оно рывками идет... "1.32 - тормоз - 3.46"...

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2695
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Специальный секундомер
« Ответ #12, Отправлен: Март 03, 2011, 13:05:32 »
:wacko:

Я даже не знаю, что и сказать... Только что попробывал во всех системах (XP, Vista, 7) на всех мыслимых компьютерах, включая жутко медленный ноутбук, и все везде отлично работает.

Ты точно запускал именно тот пример, который я дал? Какая система? И еще, пример из справки для функции _Timer_SetTimer() у тебя нормально работает?

Оффлайн VladUs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 621
  • Репутация: 180
  • Пол: Мужской
    • Награды
Re: Специальный секундомер
« Ответ #13, Отправлен: Март 03, 2011, 13:26:59 »
Alexander
Цитировать
последний жутко тормозит рывками
Хм... у меня пример от Yashiedа работает идеально.
Полезная UDF
Библиотечку желательно в http://autoit-script.ru/index.php?board=26.0...

Оффлайн Alexander [?]

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

  • Автор темы
  • Репутация: 2
    • Награды
Re: Специальный секундомер
« Ответ #14, Отправлен: Март 03, 2011, 13:28:31 »
Ты точно запускал именно тот пример, который я дал? Какая система? И еще, пример из справки для функции _Timer_SetTimer() у тебя нормально работает?
Точно.
XP Professional SP3.
Да нормально работает  ;)

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

Re: Специальный секундомер
« Ответ #14 Отправлен: Март 03, 2011, 13:28:31 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
9 Ответов
5977 Просмотров
Последний ответ Октябрь 24, 2010, 10:23:28
от SECTOR
1 Ответов
1491 Просмотров
Последний ответ Март 03, 2015, 15:15:51
от InnI