Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2012, 19:50   #1
gsl180
Пользователь
 
Регистрация: 24.06.2012
Сообщений: 36
По умолчанию Программа таймер

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

#include <vcl.h>
#pragma hdrstop
#include"Sysutils.hpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 int m,am,sa;
AnsiString st; int Day;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Timer1->Enabled=true;
Timer1->Interval=1000;
Edit1->Enabled=false;
Button1->Enabled=false;
int Day=DayOfWeek(Date());
switch(Day){
case 1:
st="Воскресенье";
break;
case 2:
st="Понедельник";
break;
case 3:
st="Вторник";
break;
case 4:
st="Среда";
break;
case 5:
st="Четверг";
break;
case 6:
st="Пятница";
break;
case 7:
st="Суббота";
break;}
Label2->Caption=st;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if(CheckBox1->Checked){
Edit1->Enabled=true;
Edit1->SetFocus();
Button1->Enabled=true;
}
else{
Edit1->Enabled=false;
Button1->Enabled=false;
if(MediaPlayer1->Mode==mpPlaying)
MediaPlayer1->Stop();
Edit1->Text = "";}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Label1->Caption=Now().CurrentTime();
m=StrToInt(FormatDateTime("nn",Time()));
if(CheckBox1->Checked){
if(sa==m)
MediaPlayer1->Play();

}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
Form1->Caption=Now().CurrentDate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GroupBox1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Form1->Caption="Таймер оповещения";        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GroupBox2MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Form1->Caption="Таймер оповещения";        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Form1->Caption="Таймер оповещения";        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
Form1->Caption="Таймер оповещения";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute()){
MediaPlayer1->FileName=OpenDialog1->FileName;}
if(MediaPlayer1->FileName==""){
Application->MessageBoxA("Нада выбрать мелодию оповещения","Таймер",MB_OK+MB_ICONWARNING); }
am=StrToInt(Edit1->Text);
sa=am+m;
MediaPlayer1->Open();

}
//---------------------------------------------------------------------------
Подскажите, что можно сделать.
Изображения
Тип файла: jpg Ashampoo_Snap_2012.07.27_18h44m53s_001_.jpg (25.8 Кб, 211 просмотров)

Последний раз редактировалось Stilet; 27.07.2012 в 19:55.
gsl180 вне форума Ответить с цитированием
Старый 27.07.2012, 19:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но как сделать цыкл не могу понять.
А разве твой таймер не срабатывает каждую секунду иммитируя цикл?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2012, 20:10   #3
gsl180
Пользователь
 
Регистрация: 24.06.2012
Сообщений: 36
По умолчанию

Срабатывает один раз. Если в поле Edit ввести 10, то через 10 минут подаст сигнал. Но как сделать, чтоб через следующие 10 снова подавал сигнал?
gsl180 вне форума Ответить с цитированием
Старый 27.07.2012, 21:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можеш прикрепить сюда весь проект в архиве?
Что-то я не могу понять почему твой таймер как ты говоришь останавливается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2012, 21:11   #5
gsl180
Пользователь
 
Регистрация: 24.06.2012
Сообщений: 36
По умолчанию

Как я не пытался в обработчике таймера установить цыкл ничего не получалось.
Вложения
Тип файла: rar Таймер оповещения.rar (365.3 Кб, 30 просмотров)
gsl180 вне форума Ответить с цитированием
Старый 27.07.2012, 21:54   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А вот скажи: Зачем тебе это условие?:
Цитата:
if(sa==m)
Твой таймер срабатывает в срок - поставь на него точку прерывания и убедись, но судя по всему это условие не дает проигрышу музни.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.07.2012, 23:06   #7
gsl180
Пользователь
 
Регистрация: 24.06.2012
Сообщений: 36
По умолчанию

Это у меня условие сравнения, того что ввел в поле Edit с минутами текущего времени. Музыку он играет, но так как переменная sa никак не изменяется, музыку проигрывает только один раз. А мне нужно, чтоб после того как сработал плеер, эта переменная увеличивалась на значение переменной am. Пытался делать цыкл в обработчике таймера типа
for(int x=sa; x<=59; x+=am)
if(x==m)
MediaPlayer1->Play(); Программа компилируется, но зависает.
gsl180 вне форума Ответить с цитированием
Старый 27.07.2012, 23:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Уверен что именно это условие тебе и мешает.
Зачем тебе изменять sa?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.07.2012, 00:07   #9
gsl180
Пользователь
 
Регистрация: 24.06.2012
Сообщений: 36
По умолчанию

Изменять sa хочу для того, чтоб сигнал подавался каждые 10 минут к примеру. Скажите какое условие там можно реализовать?
gsl180 вне форума Ответить с цитированием
Старый 28.07.2012, 04:06   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Хочу написать программу, которая через определенный период времени подавала сигнал. Пока смог сделать, чтоб она подавала сигнал один раз, но как сделать цыкл не могу понять.
зачем цикл. в момент срабатывания сигнала (if sa==m) надо определить(вычислить) время нового срабатывания (sa =....)

if(sa==m) {
sa = <когда сработать снова> ;
MediaPlayer1->Play(); }
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таймер shilovec5377 Общие вопросы Delphi 16 16.06.2012 11:28
программа таймер для выключения компьютера delphi RS219 Помощь студентам 6 08.07.2011 10:03
будильник-таймер!!!!программа почти доделана!!! Christin.T Помощь студентам 0 23.05.2011 18:57
Фоновая программа корректно работает только пол дня (использовал таймер) TwiX Общие вопросы Delphi 2 06.09.2010 17:57
Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается mnbvcxz11 Общие вопросы Delphi 3 22.08.2009 11:29