プロが教えるわが家の防犯対策術!

初めて投稿します。
現在BCBを使用してますがタイマー機能を使用して(使用無しでも^^)
作りたい機能があるんですけど、どうしたらいいのか息詰まってしまって誰か教えて下さい。

とりあえずフォームにボタンを用意してボタンを押したら
時間が流れまたボタンを押したら5秒止まって勝手に動きだす
プログラムを作りたいんです。色々本やネットを検索したんですけど
駄目でした。誰かご教授下さい。
ちなみに最初の時間が流れるのは時計でも何でも動いてるのが
分かればどんなものでも大丈夫です。文字が横に流れるとかでもとりあえず動いていて止まってまた動きだす感じです。

ボタンを押したら時間が流れて0秒になったら最後ShowMessageが
出るプログラムは出来たのですが。上記のがなかなか出来ません。
どうぞ宜しくお願いします(ノ_-、)

A 回答 (3件)

サンプルです。


bool bFirst;
を、privateに追加して、フォームにタイマーとボタンを配置して、
以下ですね。
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
bFirst = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(bFirst){
bFirst = false;
Timer1->Enabled = true;
}else{
Timer1->Enabled = false;
bFirst = true;
Timer1->Interval=5000;
Timer1->Enabled = true;
Button1->Caption = "5秒休憩中だよ。";
Button1->Enabled = false;//
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Timer1->Enabled = false;
if(!bFirst){
Button1->Enabled = true;
SYSTEMTIME st;
::GetLocalTime(&st);
AnsiString As;
As.printf("%d:%02d:%02d-%03d",st.wHour,st.wMinute,st.wSecond,st.wMilliseconds);
L->Caption = As;
Timer1->Enabled = true;
Button1->Caption = "押したら5秒とまるよ。";
P1->Enabled = true;
}else{
Timer1->Interval=10;
bFirst = false;
Timer1->Enabled = true;
}
}
//---------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

ありがとうございました!参考になりました!!
感謝です。

お礼日時:2007/11/09 00:15

これは言語の問題というよりは、ロジックを組み立てる問題です。



初期起動かどうかのフラグをリセットする

タイマーはとまっている

ボタンが押されたら0.1秒単位でタイマーを起動する
と同時に、初期フラグを立てる

タイマーのイベントで初期フラグがたっていたら時計を表示

ボタンが押されたらタイマーを一旦とめ、
初期起動かどうかのフラグをリセットし、
5秒単位でタイマーを起動する

タイマーのイベントで初期フラグがたっていなかったら
一度タイマーをとめ、初期フラグを設定して、0.1秒単位で
タイマーを起動する

元に戻る

こんな形であれば、ボタンもタイマもひとつですみます。
    • good
    • 0
この回答へのお礼

なるほど!タイマ機能は二つ必要なのかと思ってましたが
色々と応用があるのですね!ありがとうございました。

お礼日時:2007/11/09 00:16

とりあえずサンプル。


わからない点はヘルプをしっかり読む。
それでも判らなければ判らない点を具体的かつ明確に再質問してください。

フォーム上にTTimerを2つ、TLabelを1つ、TButtonを2つぽとりぺたりする。
それぞれTimer1、Timer2、Label1、Button1、Button2とする。
以下の通り設定
 Timer1:メインの作業をするタイマー。Intervalを1000ms、Enableをfalseに設定。
 Timer2:Timer1を5秒停止させるためのタイマー。Intervalを5000ms、Enabledをflaseに設定。


Button1のOnClickイベントで
 Timer1->Enabled = true;

Button2のOnClickイベントで
 Timer1->Enabled = false;
 Timer2->Enabled = true;

Timer1のOnTimerイベントで
 Lavel1->Caption = Time();//メインの作業。とりあえず現在時刻を表示。

Timer2のOnTimerイベントで
 Timer1->Enabled = true;
 Timer2->Enabled = false;
    • good
    • 0
この回答へのお礼

分かりやすく教えて頂いてありがとうございました。
お陰さまで上手くいきました^^

お礼日時:2007/11/09 00:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!