|
その他のイベントハンドラを記述します。
コンストラクタでは、必要な初期設定をします。Timer1
は Enabled が true
なので、このままでダイヤルアップ接続の監視が始められます。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//初期設定
StartLabel->Caption = "";
MsgLabel->Caption = "";
connected = false;//未接続
//タイマー起動でダイヤルアップ接続の監視が始まる
}
|
次に OnTimer でのイベントを記述します。
ここでは、最初にダイヤルアップ接続の状態を判定します。未接続の場合は、状態をメッセージ表示後、ダイヤルアップ接続をチェックします。接続されるまで監視を続け、接続されたら、通信開始時刻と状態のメッセージを表示します。
接続の場合は、ダイヤルアップ接続をチェックして、切断されていればタイマーを停止後状態をメッセージ表示します。接続中ならば、現在時刻を取得して、経過時間を計算します。
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
switch(connected){
case false://未接続
MsgLabel->Caption = "状態: 未接続です。";
//ダイヤルアップ接続するまで繰り返す
if(!CheckDialup()) return;
//ダイヤルアップ接続されたら、通信開始時刻を表示
StartLabel->Caption = starttime.TimeString();
MsgLabel->Caption = "状態: 接続しています。";
break;
case true://接続中
//ダイヤルアップ接続が切断されたらタイマーを止める
if(!CheckDialup()){
Timer1->Enabled = false;
MsgLabel->Caption = "状態: 未接続です。";
return;
}
//ダイヤルアップ接続していれば処理する
//現在の時刻を取得
TDateTime t, nowtime;
nowtime = t.CurrentTime();
//通信時間を表示
PassEdit->Text = TimeToStr(nowtime - starttime);
}
}
|
最後に、接続中に終了しようとした場合の処理を追加しておきます。CheckDialup
でダイヤルアップ接続の状態を調べ、接続中であればメッセージを表示して
OnCloseQuery をキャンセルします。
void __fastcall TForm1::FormCloseQuery(TObject *Sender,
bool &CanClose)
{
//ダイヤルアップ接続中ならメッセージを返す
if(CheckDialup()){
ShowMessage("接続中です。");
CanClose = false;
return;
}
}
|
これですべてのコーディングが終わりました。
コンパイルして実行してみてください。無事通信時間が記録できましたか?
ダイヤルアップ接続管理ツールの作成はこれで終わりです。お疲れ様でした。
今後の課題
今回作成したダイヤルアップ接続管理ツールは、起動後一度しか通信時間を取得できません。何度も繰り返し記録でき、通信時間も累計していく機能が欲しいところです。その他気づいた点があれば、修正して、使いやすいソフトに拡張してください。
以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。
|
|