Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер 
V
    Опции темы
mr.Anderson
Дата 22.1.2006, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Ну, потрясающе простая программочка. Просто я подумал, вдруг кому-нить надо будет засечь определенное время, сидя за компом. Вот и пригодится такая программочка. Она довольно проста, правда, объем кода сильно возрос из-за разных проверок...
В общем, что программа делает. Все предельно просто. Вы вводите количество часов, минут, секунд и давите "Начать". Когда время закончится, программа скажет об этом.

Особенности:

1. Учтена проверка на введение только цифр
2. Учтены проверки на пустоту, на нулевые значения, на отрицательные значения
3 (!) Если вводится количество секунд/минут больше 60, то это значение автоматически преобразуется в минуты (если секунд >60) или в часы (это если минут >60). Это, пожалуй, самое интересное в программе.

Вот и все! Качайте, и плиз скажите, понравилось аль нет.
Вот ссыль: http://my-projects.narod.ru/timer.rar


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Spawn™Production®
Дата 22.1.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 6
Всего: 12



Цитата(sim7 @ 22.1.2006, 15:37 Найти цитируемый пост)

1. Учтена проверка на введение только цифр

Молодец... это первое, что я проверяю, дабы запороть всё smile

Цитата(sim7 @ 22.1.2006, 15:37 Найти цитируемый пост)

Если вводится количество секунд/минут больше 60, то это значение автоматически преобразуется в минуты (если секунд >60) или в часы (это если минут >60). Это, пожалуй, самое интересное в программе.

Хм, оригинально...

Так, насчёт самой програмы...
Как мне кажется, от забрасывания юзера ошибками лучше уйти... т.е. если оставили какое-то поле пустым, то автоматом туда ставить 0 и запускать таймер.
Для начала изучения BCB оригинально (Мне кажется что это именно так...) smile Хотя у меня замашки сейчас побольше... я тоже BCB мучаю.


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
mr.Anderson
Дата 22.1.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Цитата
Как мне кажется, от забрасывания юзера ошибками лучше уйти

ОК, сейчас сделаю.

Плюс добавлю возможность свернуть в трей, чтобы глаза не мозолил.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 22.1.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Так. Возможность трея добавил (не пропустите маленькую кнопочку в правом нижнем углу окна программы smile ).

Убирание сообщения об ошибке делать не стал, чтобы не утяжелять программу лишними 20 строчками кода.

Вот ссыль на следующую версию: smile http://my-projects.narod.ru/timer1.2.rar


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Spawn™Production®
Дата 22.1.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 6
Всего: 12



Хм, работает, однако размер exe и так, мягко говоря, не маленький. Как мне кажется, что-то ты не так пишешь, либо пишешь много не нужного, так как я уверен, что в разы меньше могу размер сделать.


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
mr.Anderson
Дата 23.1.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



У меня все вышло примерно в 120 строчек. Нет, я не сомневаюсь, что ВЫ можете сделать намного проще. smile

А там очень много кода на разные проверки. Вот смотрите, что я включил в код, и оцените, сколько на это надо строк кода:

1. Запрет ввода всех символов кроме цифр (0-9).
2. События при нажатии на кнопку "Сброс времени".
3. События при нажатии на "Стоп" - в 2 и 3 пунктах идет отключение/включение кнопок/полей, что несет 12 строк кода.
4. Проверка на пустоту полей.
5. Перевод слишком больших значений секунд/минут в соответственно минуты/часы.
6. Дописывание "нулика" в метку.
7. Проверка на отрицательные значения.
8. Проверка на нулевые значения.
9. События на запуск таймера.
10. Собственно работа таймера, состоящая из 45 строчек кода, включающих в себя проверку на нулики перед числами из 1 цифры, остановку вовремя, исключение возможности пойти "в минус".

Вот это примерно все. Вот и посчитайте, сколько на это все надо угрохать. smile
Добавлено @ 17:20
Вообще, если хотите, я выложу тут код программы, мне не жалко. Можно ее заодно и разобрать, если вы позволите...

Я, в общем, код выложу, если нельзя, то удалите его плиз.

Код

#include <vcl.h>
#pragma hdrstop
#define MIN 47
#define MAX 59
#define BACKSPACE 8

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "trayicon"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
 Label5->Caption=Edit1->Text;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2Change(TObject *Sender)
{
 Label6->Caption=Edit2->Text;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit3Change(TObject *Sender)
{
 Label7->Caption=Edit3->Text;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 bool begin=true;
 if(Button1->Caption=="Сбросить время" && Timer2->Enabled==false)
 {
  Edit1->Text="00";
  Edit2->Text="00";
  Edit3->Text="00";
  Label5->Caption="00";
  Label6->Caption="00";
  Label7->Caption="00";
  Button1->Caption="Начать отсчет";
  Edit1->Enabled=true;
  Edit2->Enabled=true;
  Edit3->Enabled=true;
  begin=false;
 }

 if(Button1->Caption=="Стоп" && Timer2->Enabled==true)
 {
  Timer2->Enabled=false;
  Button1->Caption="Сбросить время";
 }

 if(Button1->Caption=="Начать отсчет" && begin)
 {
   if(Edit1->Text=="" || Edit2->Text=="" || Edit3->Text=="")
   {
    MessageBox(NULL,"Некоторые поля пусты.","Ошибка",MB_ICONSTOP);
    return;
   }
   if(StrToInt(Edit3->Text)>=60)
   {
    int errortext=StrToInt(Edit3->Text);
    int addsec=errortext-60;
    int addmin=errortext/60;
    int newtext=StrToInt(Edit2->Text)+addmin;
    Edit3->Text=IntToStr(addsec);
    Edit2->Text=IntToStr(newtext);
   }
   if(StrToInt(Edit2->Text)>=60)
   {
    int errortext2=StrToInt(Edit2->Text);
    int addmin=errortext2-60;
    int addhour=errortext2/60;
    int newtext2=StrToInt(Edit1->Text)+addhour;
    Edit2->Text=IntToStr(addmin);
    Edit1->Text=IntToStr(newtext2);
   }
   if(StrToInt(Edit1->Text)<=9 && StrToInt(Edit1->Text)>=0 && Edit1->Text.Length()<2)
    Edit1->Text="0"+Edit1->Text;
   if(StrToInt(Edit2->Text)<=9 && StrToInt(Edit2->Text)>=0 && Edit2->Text.Length()<2)
    Edit2->Text="0"+Edit2->Text;
   if(StrToInt(Edit3->Text)<=9 && StrToInt(Edit3->Text)>=0 && Edit3->Text.Length()<2)
    Edit3->Text="0"+Edit3->Text;
   if(StrToInt(Edit1->Text)<0) Edit1->Text="00";
   if(StrToInt(Edit2->Text)<0) Edit2->Text="00";
   if(StrToInt(Edit3->Text)<0) Edit3->Text="00";
   if(StrToInt(Edit3->Text)==0 && StrToInt(Edit2->Text)==0 && StrToInt(Edit1->Text)==0)
    MessageBox(NULL,"Все значения нулевые.","Инфо",MB_ICONINFORMATION);
   else
   {
    Button1->Caption="Стоп";
    Edit1->Enabled=false;
    Edit2->Enabled=false;
    Edit3->Enabled=false;
    Timer2->Enabled=true;
   }
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
 int sec=StrToInt(Label7->Caption);
 sec-=1;
 if(sec<=9 && sec>=0)
  Label7->Caption="0"+IntToStr(sec);
 else Label7->Caption=IntToStr(sec);
 if(Label5->Caption=="00")
 {
  if(Label6->Caption=="00")
  {
   if(Label7->Caption=="00")
   {
    Timer2->Enabled=false;
    Button1->Caption="Начать отсчет";
    Label5->Caption="00";
    Label6->Caption="00";
    Label7->Caption="00";
    Edit1->Text="00";
    Edit2->Text="00";
    Edit3->Text="00";
    Edit1->Enabled=true;
    Edit2->Enabled=true;
    Edit3->Enabled=true;
    MessageBox(NULL,"Время закончилось!","Инфо",MB_ICONINFORMATION);
   }
  }
 }
 if(Label7->Caption=="-1")
 {
  Label7->Caption="59";
  int min=StrToInt(Label6->Caption);
  min-=1;
  if(min<=9 && min>=0)
   Label6->Caption="0"+IntToStr(min);
  else Label6->Caption=IntToStr(min);
 }
 if(Label6->Caption=="-1")
 {
  int hour=StrToInt(Label5->Caption);
  hour-=1;
  if(hour<=9 && hour>=0)
   Label5->Caption="0"+IntToStr(hour);
  else Label5->Caption=IntToStr(hour);
   Label6->Caption="59";
 } 
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 if(Key==BACKSPACE) return;
 if(Key<MIN || Key>MAX) Key=0;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
 Form1->Visible=false;
 TrayIcon1->Visible=true;        
}
//---------------------------------------------------------------------------

void __fastcall TForm1::TrayIcon1Restore(TObject *Sender)
{
 Form1->Visible=true;
 TrayIcon1->Visible=false;        
}


Это сообщение отредактировал(а) sim7 - 23.1.2006, 19:11


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 23.1.2006, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Так-с, люди. Выпустил версию 1.3. Что нового:

1. Немножко подправлен код (сокращен на 5-6 строчек).
2. Добавлена фича: если програ была в трее, то когда отсчет времени заканчивается, то окно программы из трея вылезает, вызывает сообщение + запускает звуковое оповещение. smile

Для успешной работы программы нужно просто распаковать архив в ОДНУ папку. В архиве сам таймер + звуковой файл. Его не переименовывать и не перемещать! Иначе оповещения звуком вы не получите. smile

Вот ссыль: http://my-projects.narod.ru/timer1.3.rar


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Spawn™Production®
Дата 23.1.2006, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 6
Всего: 12



Цитата(sim7 @ 23.1.2006, 18:15 Найти цитируемый пост)

6. Дописывание "нулика" в метку.

Да уж, сам миллион раз сталкивался... геморная штука...
Цитата(sim7 @ 23.1.2006, 18:15 Найти цитируемый пост)

7. Проверка на отрицательные значения.

Нанде ? (Зачем по-японски)

Цитата(sim7 @ 23.1.2006, 18:15 Найти цитируемый пост)

ВЫ можете сделать намного проще.

Можно и не с большой буквы smile Я сам ещё в BCB начинающий, хотя есть довольно много практики в VB...
Цитата(sim7 @ 23.1.2006, 18:15 Найти цитируемый пост)

Я, в общем, код выложу, если нельзя, то удалите его плиз.

Конечно, можно... открытый исходный код это здорово smile

Часто повторяющиеся действия можно объединить в процедуры...


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
mr.Anderson
Дата 23.1.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Цитата

Часто повторяющиеся действия можно объединить в процедуры

Только в функции. smile Процедуры в Паскале. smile Я и сам об этом подумал. А сейчас я разрабатываю следующую версию, в которой у меня будет Таймер + Секундомер (можно будет и то, и то пользовать). Правда, удобно? smile Вот пока сижу работаю. Там как раз надо будет все проверки в функции запихать... Завтра или послезавтра выложу, если проблем не будет и деньги в инете не кончатся. smile

Это сообщение отредактировал(а) sim7 - 23.1.2006, 21:05


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Spawn™Production®
Дата 23.1.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 6
Всего: 12



Цитата(sim7 @ 23.1.2006, 22:03 Найти цитируемый пост)

Только в функции.  Процедуры в Паскале.

Не выпендривайся smile знаем мы это... но если есть возможность сделать так, чтобы функция не порождала значение, которое можно прикрутить к чему-нить, то это уже процедурой надо называть smile

Это сообщение отредактировал(а) Spawn™Production® - 23.1.2006, 21:56


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
Guedda
Дата 23.1.2006, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: нет
Всего: 78



Начал работать с временем?
Ну, вот задание, если хошь:
Пользователь вводит дату, время:
Программа берет и считает, сколько секунд осталось до этой даты.

За сколько времени справишься?


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Spawn™Production®
Дата 24.1.2006, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 6
Всего: 12



Цитата(Guedda @ 23.1.2006, 23:34 Найти цитируемый пост)

За сколько времени справишься?

минут за 20 smile
Функции CompareTime, CompareDateTime и CompareDate.


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
mr.Anderson
Дата 24.1.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Хм. Я не начал работать со временем. smile И у меня пока хватает головной боли с этим таймером. smile А так - спасибо за задание, может, потом за него примусь. Хотя это будет только для тренировки - не думаю, что такая программа может иметь практическое значение...
Spawn™Production®, впервые слышу про такие функции. smile

Сейчас выложу следующую версию таймера. Теперь в нем таймер + секундомер. smile Правда, есть минус - секундомер с точностью до секунд. Я бился 2 часа, но с десятыми и сотыми долями секунды не получилось сделать. smile

Вот линк: http://my-projects.narod.ru/timer1.4.rar


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Spawn™Production®
Дата 24.1.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Тестер ПО, VB.NET Developer
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 12.4.2005
Где: Зеленоград

Репутация: 6
Всего: 12



Цитата(sim7 @ 24.1.2006, 19:04 Найти цитируемый пост)

Spawn™Production®, впервые слышу про такие функции.

Читаем документацию и радуемся жизни.

Цитата(sim7 @ 24.1.2006, 19:04 Найти цитируемый пост)

не думаю, что такая программа может иметь практическое значение...

правильно думаешь.

Цитата(sim7 @ 24.1.2006, 19:04 Найти цитируемый пост)

Я бился 2 часа, но с десятыми и сотыми долями секунды не получилось сделать.

Системным таймером придётся пользоваться...
Добавлено @ 19:08
И действительно, нужно делать с долями секунд, так как иначе смысла от такого секундомера ноль...


--------------------
ОС: WinXP SP2 Rus
Frameworks: v1.0.3705, v1.1.4322, v2.0.50215, v2.0.50727
Сам кодю на VB (6.0 (почти забросил), 7.1, 8.0)
PM WWW   Вверх
mr.Anderson
Дата 24.1.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 6
Всего: 128



Цитата

Системным таймером придётся пользоваться

Это, наверное, сложно? Тогда пока я ограничусь точностью до секунд. Так что пока ничего нового в качестве улучшения не придумаю, новых версий не будет. smile Если будут какие-то предложения, то обязательно напишите, я постараюсь сделать.
Добавлено @ 19:11
Цитата

И действительно, нужно делать с долями секунд, так как иначе смысла от такого секундомера ноль...

Оно понятно. smile Но пока мой уровень знаний ниже требуемого.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Тестирование программ"
mr.Anderson

Правила должны соблюдаться всеми без исключения.

  • Темы, в которых будут обнаружены нарушения, будут закрыты или удалены.
  • К пользователям, многократно нарушившим правила, будут применены отдельные санкции.

Для тех, кто создаёт темы:

В данном разделе запрещается размещать программы, которые в той или иной степени могут принести вред потенциальному тестеру программы (например, трояны, вирусы и т.д.)

  • Публикуя ссылку на программу, обязательно проверьте её работоспособность.
  • ОБЯЗАТЕЛЬНО: напишите название программы, а главное - её описание и приведите хотя бы один скриншот. Скриншот по размерам не более 500х500 пикселов, для скриншотов большего размера приводите ссылки на них.
  • Программа, которую Вы даёте на тестирование, должна быть откомпилирована, так как не каждый является программистом, да и мало кто будет ради тестирования устанавливать соответствующий софт.

Для тех, кто тестирует:

Описывая результаты тестирования программы, указывайте тип и версию ОС, а также характеристики компьютера и прочую информацию, которая может повлиять на работоспособность.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.Anderson.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разное тестирование | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.