チェックボックスのイベント取得方法

解決


たけし  2007-06-28 20:26:36  No: 26859

Delphi6パーソナルで勉強を始めた者です。
チェックボックスを貼り付けてCheckedになったらProcedure A; に飛び、そうでなかったらProcedure B;に飛ぶということをさせたいのですが

これを
TForm1.CheckBox1Click(Sender: TObject);に書いた場合はチェックボックスをクリックしてもイベントが発生しません。

またこれをTForm1.MouseDownに書いた場合も同様のようでBeepを入れたりブレークポイントを指定して動きを監視したのですが引っかかりません。  

チェックボックスのON/OFFをした時にCheckedかどうかによってイベントを発生させるにはどうしたら良いか教えてください。設定方法などに問題があるのでしょうか?


igy  2007-06-28 20:37:55  No: 26860

コードはどのように書いているのですか?


たけし  2007-06-28 21:25:55  No: 26861

igy様  対応ありがとうございます。

Procedure TForm1.CheckBox1Click(Sender: TObject);

Begin
     Beep; //イベントが発生しているか耳でチェック
     ChkStatus; //  動かないのでアクションをここから移動してみました
End;

Procedure ChkStatus;
Begin
     If Form1.CheckBox1=Checked then
          Begin
             Timer1.Enabled:=True;
             PicDraw; // 絵を表示
          End;
     Else
          Begin
             Timer1.Enabled:=False;


たけし  2007-06-28 21:39:46  No: 26862

igy様  対応ありがとうございます。

先ほど書いていたら途中で意図しないで送信されてしまいましたので再度お送りさせていただきます。コードは下記のようにテストしながらこのようになりました。

---------------------------------------------------
Procedure TForm1.CheckBox1Click(Sender: TObject);

Begin
     Beep; //イベントが発生しているか耳でチェック
     ChkStatus; //  動かないのでアクションをここから移動してみました
End;

Procedure ChkStatus;
Begin
     If Form1.CheckBox1=Checked then
          Begin
             Timer1.Enabled:=True;
             PicDraw; // 動く絵を表示
          End;
     Else
          Begin
             Timer1.Enabled:=False; 
             PicReset; //絵を削除
             ・・・・ // 別の作業
          End;

というようなものです。他に新たにDelphiを立ち上げてテストするとちゃんとイベントを取得できるのですが今いじっている開発しようとしている本番のプログラムでは思うようにならなくて質問させていただきました。プロパティーがおかしいのかなど洗っていますが現段階で正常に動作するものとの相違点はわかりません。問題点のヒントなどよろしくお願いします。


igy  2007-06-28 22:00:50  No: 26863

ちなみに、
そのチェックボックスのオブジェクトインスペクタの「イベント」
タブのOnClick欄に CheckBox1Click が設定されていますか?
また、コードのどこかで
    CheckBox1.OnClick := CheckBoxXXXXXClick;
のように、別のイベントを設定しているというのはありませんか?


通りがかり  2007-06-28 22:49:12  No: 26864

どんな処理?
 If Form1.CheckBox1=Checked then    // ??

 If Form1.CheckBox1.Checked=true then    // ??


通りすがり  2007-06-28 23:28:06  No: 26865

ELSE の前に ; があったりと、実際に動作するとは思えれません。
実際に動作するソースを載せてもらわないと・・・、
最低でもコンパイルの通るソースを載せて欲しいです。


たけし  2007-06-29 01:01:08  No: 26866

igy様、通りがかり様  申し訳ありません。当方の超初歩的なミスでした。結果的に問題なく動きました。

今まで長く使ってきたソフトを大改造しようと思い、それまで使ってきたフォルダーAに加えてフォルダーBを作りました。そしてフォルダーAの内容をそのままフォルダーBにコピーしてもしも取り返しのつかない失敗をしてもAを残しておくという目的でBにあるA.dprを立ち上げていじってきました。何度も何度も各種のテストをしたのですが少しも結果が反映されませんでした。そして先ほどエクスプローラでタイムスタンプを見たら何とフォルダーAが新しくなっていました。フォルダーBのdprを読んで.pasを変更してもフォルダーAの.pasに上書きされているとは知りませんでした。DPRとPASの関係がよくわかりませんでしたのでフォルダーBのDPR,PASの名前を全て変更してフォルダーAとの関係を完全に絶ってテストしたところうまく動きました。超初歩的なミスを知らずにお尋ねし本当に申し訳ありませんでした。

(If Form1.CheckBox1.Checked=true then    // ??  >>直しました。御礼)


むく  2007-06-29 01:44:43  No: 26867

ちょっとだけ・・・

If Form1.CheckBox1.Checked=true then 

If Form1.CheckBox1.Checked then 

でOKですよ


たけし  2007-06-29 01:56:41  No: 26868

むくさんにお礼。  If Form1.CheckBox1.Checked=true then と  If Form1.CheckBox1.Checked then を試しましたがどちらも通りました。一つ覚えました。


orz  2007-06-29 18:23:49  No: 26869

ちょっとだけ・・・

たぶん、dpr(プロジェクト)を開くと、前回閉じた時に開いていたユニットが
開くようになってるんだと推測。
エクスプローラで別フォルダにプロジェクトフォルダを複写しても
複写先のプロジェクトが記憶している作業状態は、以前のフォルダ。

だから、全ユニットを一回閉じて、履歴ではなく普通に開けばよかったはず・・・と言ってみる。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加