Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер 
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   Вверх
maxim1000
Дата 24.1.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

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

ну если потом пойти, например, в сторону нескольких событий, напоминалки, и вообще органайзера, то кто его знает smile


--------------------
qqq
PM WWW   Вверх
mr.Anderson
Дата 24.1.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Тогда лучше сделать наоборот - довести этот таймер до ума, а уж потом встроить его в мой проект "Ежедневник" (тут где-то темка с ним еще есть, я потом туда воткну ссыль на него). Вот так можно сделать. smile А пока моей целью будет каким-то Макаром вставить в мой таймер доли секунды...


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

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


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



а какие проблемы smile
помоему в стандартном компоненте vcl у TTimer минимальное значение свойства interval == 30 ms


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
mr.Anderson
Дата 25.1.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Ну! А я говорю, что он отстает по времени. Неправильно работает, короче. Не "ритмично". Вот и мучаюсь.


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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 26.1.2005
Где: На границе Европы и Азии

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



sim7,вот тебе ещё повод подумать!

1. При установке времени отсчёта сделать переход по полям ввода с помощью стрелок! Причём, при переходе содержимое поля должно выделяться! Сделать это того, что бы, если вдруг решил подкорректировать, то не надо было бы беспокоить мышонка или гнать фокус через все компоненты!

2. Начинать отсчёт после ввода времени по нажатию Enter. Т.е если в поле “секунды” нажали Enter – начинаем отсчёт! Опять же для удобства!

3. Можно добавить к твоему таймеру возможность выключать комп! Будет очень полезно для тех, кто засыпает в обнимку с клавой! Ну, чего-то типа выбора, разбудить хозяина, крикнув из динамика что-нибудь ласковое, или же спокойненько выключить компьютер, не нарушая его сна.

4. Ну, и хотя бы десятые доли секунды в секундомере сделать просто необходимо!

Удачи! smile

PM MAIL   Вверх
mr.Anderson
Дата 25.1.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Бегемот, пунктики 1-2 подумаю. 3 - понятия не имею, как это сделать. 4 - тоже самое. smile Но буду думать. Спасибо за предложения.


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

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


iOS Lead Developer
****


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

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



Так. С Энтером сделал. Таперича при нажатии Энтера в третьем поле (ввод секунд) - запускается таймер.
С пунктом 1 мучаюсь.


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

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


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


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

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



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

Так. С Энтером сделал. Таперича при нажатии Энтера в третьем поле (ввод секунд) - запускается таймер.

Можно это прикрутить и к другим полям...
Если после ввода секунд ты захотел подредактировать минуты или часы и отуда нажал Enter, то также всё должно запуститься.

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

4 - тоже самое.

Положи на форму Label1 и Timer1

Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Timer1->Interval = 1;
Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Word Year, Month, Day, Hour, Min, Sec, MSec;
TDateTime dtPresent = Time();
DecodeTime(dtPresent, Hour, Min, Sec, MSec);
Label1->Caption = IntToStr(Hour) + AnsiString(":") + IntToStr(Min) + AnsiString(":") + IntToStr(Sec) + AnsiString(", ") + IntToStr(MSec);
}
//---------------------------------------------------------------------------

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

3 - понятия не имею, как это сделать.

Можешь пока не спешить...
Впринципе, Windows98 выключается простой API функцией ExitWindows, а вот с XP дело хуже, там чтобы выключить, нужны привелегии... а с токенами работать сдохнешь 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
Дата 26.1.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Так-с. Сделал некоторые изменения. Что нового:

1. Обеспечен переход стрелочками из любого Edit'а в соседний.
2. По нажатию Enter'а на любом Edit'е запускается таймер.
3. При ошибке (ошибок две: пустые поля или нулевые значения во всех трех Edit'ах) выводится сообщение (это уже было) + устанавливается фокус в Edit1 (где устанавливаются часы).

Вот это все нововведения пока. С секундомером пока не получается. Работаю.

Ссыль: http://my-projects.narod.ru/timer1.5.rar


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

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


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


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

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



Цитата(sim7 @ 26.1.2006, 21:58 Найти цитируемый пост)

Вот это все нововведения пока. С секундомером пока не получается. Работаю.

можно глянуть пост прямо над твоим smile

Цитата(sim7 @ 26.1.2006, 21:58 Найти цитируемый пост)

пустые поля или нулевые значения во всех трех Edit'ах

Я бы сделал проверку в событии Change: Если какое-либо поле пустует, то кнопка запуска не работает...


--------------------
ОС: 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
Дата 27.1.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



УРРРАААААААААА!!!!!!! Я прямо весь в эмоциях! Секундомер работает, чтоб его! smile smile smile smile
Здорово! Spawn™Production®, ваш код только подал мне идею. smile Я, например, и не знал о функции DecodeTime. Я его малец переделал, и все стало полный чпок! smile
Но одна проблема осталась. Подскажите, почему при работе секундомера, связанного с системным временем, сама метка (которая и показывает числовое значение часов/минут/секунд/миллисекунд) подергивается? И как это убрать, а то очень раздражает!
Вот код собственно события OnTimer секундомера:
Код

 Word h,m,s,ms;
 AnsiString nh,nm,ns,nms;
 TDateTime system_time=Time();
 static TDateTime launch_time=Time();
 TDateTime real=system_time-launch_time;
 DecodeTime(real,h,m,s,ms);
 if(h<=9) nh="0"+IntToStr(h); else nh=h;
 if(m<=9) nm="0"+IntToStr(m); else nm=m;
 if(s<=9) ns="0"+IntToStr(s); else ns=s;
 if(ms<=9) nms="00"+IntToStr(ms);
  else if(ms<=99 && ms>9) nms="0"+IntToStr(ms);
   else nms=IntToStr(ms);

 Label8->Caption=nh+":"+nm+":"+ns+":"+nms;

Вот. Прошу пока не обращать внимания на не совсем корректную работу этого кода. Помогите плиз с вышезаданным вопросом про моргание.


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

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


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


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

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



Думаю придётся в раздел Boland'а лезть...
Проблема с миганием во всех языках, и, как мне кажется, от неё нет панацеи.
Мигает потому, что каждую миллисекунду идёт перерисовка контрола. Перерисовывается он несколько дольше, так что сам понимаешь.


--------------------
ОС: 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
Дата 27.1.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Ладно, тогда эту проблему отставили. Сейчас малец доделаю и выложу предварительную версию с "наполовину" работающим секундомером и списком нововведений.


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

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 26.1.2005
Где: На границе Европы и Азии

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



sim7!
Цитата

Помогите плиз с вышезаданным вопросом про моргание.

Можно ли избавиться от мерцания Label’а я не знаю, а вот отучить от этой дурной привычки компонент имеющий Canvas можно! У той же формы есть канва, поэтому отображать работу секундомера без мерцания можно прямо на ней! Для этого тебе придётся кое-что добавить, и кое-что изменить.
Если в вкратце, то смысл такой: выводим текст на невидимой области, после чего копируем его на форму методом CopyRect! И всё!
В header-файле (Unit1.h) в секции private объяви глобальные переменные!
Код

   Graphics::TBitmap *TempCanvas;
   TRect FormRect;
   TRect TempRect;

В Unit1.cpp на FormCreate добавь следующий код:
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
..............
// определяем ширину и высоту области на которую будем предварительно..
// ..выводить показания секундомера
   const TempCanvasWidth = 300;
   const TempCanvasHeight = 100;
// создание объекта
   TempCanvas = new Graphics::TBitmap();
// устанавливаем значения различных свойств объекта
   TempCanvas->Width = TempCanvasWidth;
   TempCanvas->Height = TempCanvasHeight;
   TempCanvas->Canvas->Font->Size = 36;
   TempCanvas->Canvas->Font->Name = "Times New Roman";
// прямоугольная область в которорую будем копировать время
   FormRect = Rect(100,100,TempCanvasWidth+100,TempCanvasHeight+100);
// прямоугольная область из которой будем копировать время
   TempRect = Rect(0,0,TempCanvasWidth,TempCanvasHeight);
// заливаем канву созданного объекта цветом формы
   TempCanvas->Canvas->Brush->Color = Form1->Color;
   TempCanvas->Canvas->FillRect(TempRect);
}

В обработчике события OnTimer вместо строки, в которой ты выводишь в Label, вставь следующий код:
Код

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
..............
// выводим на канву TempCanvas время
   TempCanvas->Canvas->TextOutA(0,0,nh + ":" + nm + ":" + ns + ":" + nms);
// копируем с канвы TempCanvas прямоугольную область TempRect на канву формы..
// ..в прямоугольную область FormRect!
   Canvas->CopyRect(FormRect, TempCanvas->Canvas, TempRect);
}

Ну, и при закрытии формы...
Код

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
// освобождаем выделенную память
   delete TempCanvas;
}


PM MAIL   Вверх
mr.Anderson
Дата 28.1.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



Ох, друзья, да подождите вы меня незнакомым кодом заваливать... smile Мне еще надо все прошлое доделать, а уж потом и с мелочами разбираться....


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

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


iOS Lead Developer
****


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

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



Так. Готова новая версия, 1.7. Что нового:

1. Полноценный секундомер. Точность до тысячных долей секунды. Думаю, этого хватит. smile
2. Добавлена возможность выключения компа по окончании отсчета только для систем Windows 98. Для ХР я почитал хелп - там столько кода писать надо, что я сразу отказался от этой затеи. Так что пользователям не-Windows 98 систем придется обойтись без этой фичи. smile Но код открыт, так что вполне можете сами дополнить или дописать что, если хотите. smile Код я выложу тут пониже.
3. Секундомер можно запустить, если у вас выделен радиобатон "Секундомер". Просто когда фокусировка на этом радиобатоне, жмите Энтер, и секундомер запустится.
Ох, уж и не помню, чего ж еще там новенького... Столько работы на секундомер ушло, что и забыл уже, чего же я там делал нового...
4. Исправлены разные мелкие баги, типа некорректной работы свойства Enabled и прочих у разных объектов.

Ну, вот, вроде, и все, что есть нового. Основным новшеством, конечно, является секундомер. У него реализованы возможности остановить/сброс и + возможность пауза/продолжить. Полезная фича, правда? smile За почти полную помощь по доработке и реализации этих двух возможностей отдельное спасибо BreakPointMan, он мне очень много помогал в кодировании.

Вот, пожалуй, и все. Вот ссыль: http://my-projects.narod.ru/timer1.7.zip .
Добавлено @ 17:16
Код, к сожалению, выложить не получилось - у вас на форуме длина сообщения ограничена. А код в эту длину не влезает.
Добавлено @ 17:17
Попробую разбить код на части:
Код

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

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//----------------------- Ïðîòîòèïû ôóíêöèé ---------------------------------
bool TimerCheck(void);
void BACK_SecNorm(void);
void BACK_MinNorm(void);
void BACK_HourNorm(void);
void ClearTime(void);
//------------------- Ñîáñòâåííî êîä ïðîãðàììû ------------------------------

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_timer=true;
 bool begin_secund=true;
 Button1->SetFocus();
 //ÅÑËÈ ÂÊËÞ×ÅÍ ÒÀÉÌÅÐ
 if(RadioButton1->Checked)
 {
  if(Button1->Caption=="Ñáðîñèòü âðåìÿ" && Timer2->Enabled==false)
  {
   ClearTime();
   begin_timer=false;
  }

  if(Button1->Caption=="Ñòîï" && Timer2->Enabled==true)
  {
   Timer2->Enabled=false;
   Button1->Caption="Ñáðîñèòü âðåìÿ";
  }

  if(Button1->Caption=="Íà÷àòü îòñ÷åò" && begin_timer)
  {
   if(!TimerCheck()) return;
   Button1->Caption="Ñòîï";
   Edit1->Enabled=false;
   Edit2->Enabled=false;
   Edit3->Enabled=false;
   RadioButton1->Enabled=false;
   RadioButton2->Enabled=false;
   Timer2->Enabled=true;
  }
 }
 //ÅÑËÈ ÂÊËÞ×ÅÍ ÑÅÊÓÍÄÎÌÅÐ
 if(RadioButton2->Checked)
 {
  if(Button1->Caption=="Ñáðîñèòü âðåìÿ")
  {
   ClearTime();
   begin_secund=false;
  }
  if(Button1->Caption=="Ñòîï")
  {
   SecTimer->Enabled=false;
   Button1->Caption="Ñáðîñèòü âðåìÿ";
   if(Button2->Caption=="Ïðîäîëæèòü") Button2->Caption="Ïàóçà";
   Button2->Enabled=false;
  }
  if(Button1->Caption=="Íà÷àòü îòñ÷åò" && begin_secund)
  {
   launch_time=Time();
   Edit1->Text="00";
   Edit2->Text="00";
   Edit3->Text="00";
   Edit1->Enabled=false;
   Edit2->Enabled=false;
   Edit3->Enabled=false;
   Button2->Enabled=true;
   Button1->Caption="Ñòîï";
   RadioButton1->Enabled=false;
   RadioButton2->Enabled=false;
   SecTimer->Enabled=true;
  }
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
 BACK_SecNorm();
 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;
    RadioButton1->Enabled=true;
    RadioButton2->Enabled=true;
    if(TrayIcon1->Visible==true)
     TrayIcon1Restore(Sender);
    if(CheckBox1->Checked==true)
     if(!ExitWindowsEx(EWX_SHUTDOWN,0))
      MessageBox(NULL,"Íå óäàëîñü âûêëþ÷èòü êîìïüþòåð! Îäíîé èç ïðè÷èí ìîæåò áûòü òî, ÷òî ó âàñ OS îòëè÷íàÿ îò Windows 98. Âîçìîæíîñòü âûêëþ÷åíèÿ êîìïüþòåðà ïðåäóñìîòðåíà òîëüêî äëÿ ñèñòåì Windows 98.","Íå ïîëó÷èëîñü!",MB_ICONSTOP);
    else
    {
     ShellExecute(NULL,NULL,"\endtimer.mp3",NULL,NULL,SW_SHOWNORMAL);
     MessageBox(NULL,"Îòñ÷åò çàêîí÷åí!","Èíôîðìàöèÿ",MB_ICONINFORMATION);
    }
   }
  }
 }
 if(Label7->Caption=="-1")
 {
  Label7->Caption="59";
  BACK_MinNorm();
 }
 if(Label6->Caption=="-1")
 {
   BACK_HourNorm();
   Label6->Caption="59";
 } 
}
//---------------------------------------------------------------------------

Добавлено @ 17:17
Код

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 if(Key==13) Button1Click(Sender);
 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;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
 if(RadioButton2->Checked==false) return;
 Edit1->Enabled=false;
 Edit2->Enabled=false;
 Edit3->Enabled=false;
 Label8->Visible=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
 if(RadioButton1->Checked==true)
 {
  Edit1->Enabled=true;
  Edit2->Enabled=true;
  Edit3->Enabled=true;
  Button2->Enabled=false;
  Label8->Visible=false;
 }
}
//---------------------------------------------------------------------------

bool TimerCheck(void)
{
 //Ïðîâåðÿåì íà ïóñòîòó ïîëåé
 if(Form1->Edit1->Text=="" || Form1->Edit2->Text=="" || Form1->Edit3->Text=="")
  {
   MessageBox(NULL,"Âû íå ââåëè îäèí èç ïàðàìåòðîâ (÷àñû/ìèíóòû/ñåêóíäû).","Îøèáêà",MB_ICONSTOP);
   Form1->Edit1->SetFocus();
   return false;
  }
  //Ïåðåâîä î÷åíü áîëüøèõ çíà÷åíèé â ìèíóòû/÷àñû
 if(StrToInt(Form1->Edit3->Text)>=60)
 {
  int errortext=StrToInt(Form1->Edit3->Text);
  int addsec=errortext-60;
  int addmin=errortext/60;
  int newtext=StrToInt(Form1->Edit2->Text)+addmin;
  Form1->Edit3->Text=IntToStr(addsec);
  Form1->Edit2->Text=IntToStr(newtext);
 }
 if(StrToInt(Form1->Edit2->Text)>=60)
 {
  int errortext2=StrToInt(Form1->Edit2->Text);
  int addmin=errortext2-60;
  int addhour=errortext2/60;
  int newtext2=StrToInt(Form1->Edit1->Text)+addhour;
  Form1->Edit2->Text=IntToStr(addmin);
  Form1->Edit1->Text=IntToStr(newtext2);
 }
 //Äîïèñûâàåì íóëèê â íà÷àëå ÷èñëà, åñëè îíî ìåíüøå 9 è áîëüøå èëè ðàâåí 0
 if(StrToInt(Form1->Edit1->Text)<=9 && StrToInt(Form1->Edit1->Text)>=0 && Form1->Edit1->Text.Length()<2)
  Form1->Edit1->Text="0"+Form1->Edit1->Text;
 if(StrToInt(Form1->Edit2->Text)<=9 && StrToInt(Form1->Edit2->Text)>=0 && Form1->Edit2->Text.Length()<2)
  Form1->Edit2->Text="0"+Form1->Edit2->Text;
 if(StrToInt(Form1->Edit3->Text)<=9 && StrToInt(Form1->Edit3->Text)>=0 && Form1->Edit3->Text.Length()<2)
  Form1->Edit3->Text="0"+Form1->Edit3->Text;
 //Åñëè âñå çíà÷åíèÿ íóëåâûå, òî êàêîé íàôèã ñìûñë çàïóñêàòü òàéìåð? Âîò è ïèøåì:
 if(StrToInt(Form1->Edit3->Text)==0 && StrToInt(Form1->Edit2->Text)==0 && StrToInt(Form1->Edit1->Text)==0)
 {
  MessageBox(NULL,"Ïðè óñòàíîâëåííîì âðåìåíè îòñ÷åòà çàïóñêàòü òàéìåð áåññìûñëåííî.","Èíôîðìàöèÿ",MB_ICONINFORMATION);
  Form1->Edit1->SetFocus();
  return false;
 }
 return true;
}
//---------------------------------------------------------------------------

void BACK_SecNorm(void)
{
 int sec=StrToInt(Form1->Label7->Caption);
 sec-=1;
 if(sec<=9 && sec>=0)
  Form1->Label7->Caption="0"+IntToStr(sec);
 else Form1->Label7->Caption=IntToStr(sec);
}
//---------------------------------------------------------------------------

void BACK_MinNorm(void)
{
 int min=StrToInt(Form1->Label6->Caption);
 min-=1;
 if(min<=9 && min>=0)
  Form1->Label6->Caption="0"+IntToStr(min);
 else Form1->Label6->Caption=IntToStr(min);
}
//---------------------------------------------------------------------------

void BACK_HourNorm(void)
{
 int hour=StrToInt(Form1->Label5->Caption);
 hour-=1;
 if(hour<=9 && hour>=0)
  Form1->Label5->Caption="0"+IntToStr(hour);
 else Form1->Label5->Caption=IntToStr(hour);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SecTimerTimer(TObject *Sender)
{
 //Îñòàëîñü ïîñëåäíåå - íóæíî â ýòîì ìåñòå íàïèñàòü óäàëåíèå ïåðåìåííîé launch_time. È âñå ÎÊ!
 Word h,m,s,ms;
 AnsiString nh,nm,ns,nms;
 TDateTime system_time=Time();
// static TDateTime launch_time=Time();
 TDateTime real=system_time-launch_time;
 DecodeTime(real,h,m,s,ms);
 if(h<=9) nh="0"+IntToStr(h); else nh=h;
 if(m<=9) nm="0"+IntToStr(m); else nm=m;
 if(s<=9) ns="0"+IntToStr(s); else ns=s;
 if(ms<=9) nms="00"+IntToStr(ms);
  else if(ms<=99 && ms>9) nms="0"+IntToStr(ms);
   else nms=IntToStr(ms);

 Label8->Caption=nh+":"+nm+":"+ns+":"+nms;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 if(Button2->Caption=="Ïðîäîëæèòü")
 {
  launch_time+=(Time()-beg_pause);
  Button2->Caption="Ïàóçà";
  SecTimer->Enabled=true;
 }
 else
 {
  beg_pause=Time();
  Button2->Caption="Ïðîäîëæèòü";
  SecTimer->Enabled=false;
 }
}
//---------------------------------------------------------------------------

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

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

void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==39) Edit2->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit2KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==37) Edit1->SetFocus();
if(Key==39) Edit3->SetFocus();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit3KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==37) Edit2->SetFocus();
}
//---------------------------------------------------------------------------

void ClearTime(void)
{
 Form1->Edit1->Text="00";
 Form1->Edit2->Text="00";
 Form1->Edit3->Text="00";
 Form1->Label5->Caption="00";
 Form1->Label6->Caption="00";
 Form1->Label7->Caption="00";
 Form1->Button1->Caption="Íà÷àòü îòñ÷åò";
 Form1->Edit1->Enabled=true;
 Form1->Edit2->Enabled=true;
 Form1->Edit3->Enabled=true;
 Form1->RadioButton1->Enabled=true;
 Form1->RadioButton2->Enabled=true;
 Form1->Label8->Caption="00:00:00:000";
 if(Form1->RadioButton2->Checked==true)
 {
  Form1->Edit1->Enabled=false;
  Form1->Edit2->Enabled=false;
  Form1->Edit3->Enabled=false;
 }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2KeyPress(TObject *Sender, char &Key)
{
 if(Key==13) Button1Click(Sender);
}
//---------------------------------------------------------------------------

Добавлено @ 17:18
Получилось! smile Можете смотреть, списывать, добавлять и т.д. Только обо всех существенных добавлениях плиз пишите тут с комментами, чтобы я тож мог разобраться.
Добавлено @ 17:19
Да, и еще: я не стал исправлять неверную кодировку (у Билдера кодировка не та, что на форуме), посему плиз не ругайтесь за белеберду вместо русских надписей в коде.
Добавлено @ 17:20
И еще вот код немного измененного заголовочного файла:
Код

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Buttons.hpp>
#include "trayicon.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TTimer *Timer2;
        TEdit *Edit1;
        TEdit *Edit2;
        TEdit *Edit3;
        TLabel *Label1;
        TLabel *Label2;
        TLabel *Label3;
        TLabel *Label4;
        TLabel *Label5;
        TLabel *Label6;
        TLabel *Label7;
        TLabel *Label9;
        TLabel *Label10;
        TButton *Button1;
        TSpeedButton *SpeedButton1;
        TTrayIcon *TrayIcon1;
        TButton *Button2;
        TRadioGroup *RadioGroup1;
        TRadioButton *RadioButton1;
        TRadioButton *RadioButton2;
        TTimer *SecTimer;
        TLabel *Label8;
        TGroupBox *GroupBox1;
        TCheckBox *CheckBox1;
        void __fastcall Edit1Change(TObject *Sender);
        void __fastcall Edit2Change(TObject *Sender);
        void __fastcall Edit3Change(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Timer2Timer(TObject *Sender);
        void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
        void __fastcall SpeedButton1Click(TObject *Sender);
        void __fastcall TrayIcon1Restore(TObject *Sender);
        void __fastcall RadioButton2Click(TObject *Sender);
        void __fastcall RadioButton1Click(TObject *Sender);
        void __fastcall SecTimerTimer(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Edit2KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit3KeyPress(TObject *Sender, char &Key);
        void __fastcall Edit1KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
        void __fastcall Edit2KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
        void __fastcall Edit3KeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift);
        void __fastcall RadioButton2KeyPress(TObject *Sender, char &Key);
private:    // User declarations

   TDateTime launch_time, beg_pause;
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif



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

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


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


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

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



sim7, лучше не код пиши, а сами исходники запакуй в архив и выкладывай


--------------------
ОС: 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
Дата 30.1.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



ОК, сейчас сделаю.
Таймер-то протестировали? smile
Добавлено @ 20:43
Вот ссыль на исходники (приблизительно 800 килобайт, почему так много, не знаю): http://my-projects.narod.ru/timer_basecode.zip


--------------------
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.1973 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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