Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таймер 
V
    Опции темы
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.

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


 




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


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

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