カテゴリーボタンのOnClickエベントで「Hint」を受け取るには

解決


久美子  2010-01-22 19:57:15  No: 37147

いつもお世話になっています。
カテゴリーボタンを利用して、実行するSQLの振り分けを考えています。
OnClickエベントを一つのprocedureで済ませたく、Hintで実行するSql文のテキストファイルを指定しようと考えました。
SenderからHintを得ようとしますがうまくゆきません。
ご教授をお願いします。
[テストPro]
procedure TForm1.CategoryButtons1Categories0Items0Click(Sender: TObject);
begin
  ShowMessage((Sender as TButtonItem).Hint);
end;
[発生するエラー]
$7C812AFB に最初の偶発例外があります。例外クラス EInvalidCast (メッセージ '無効なクラス型キャスト')。 
[環境]
XP
Delphi2007


HOta  2010-01-22 20:37:29  No: 37148

TButtonItemにHintプロパティは有りますか?


久美子  2010-01-22 20:47:49  No: 37149

オブジェクトインスペクタからも、VCL リファレンスからもあると理解しています。


TS  2010-01-22 20:51:08  No: 37150

普通のボタンの場合です。
procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage((Sender as TButton).Hint);
end;


HOta  2010-01-22 20:55:18  No: 37151

失礼しました。
この場合のSenderはTCategoryButtonsですね。


tor  2010-01-22 21:01:18  No: 37152

「無効なクラス型キャスト」ということは、
SenderがTButtonItem(またはその派生クラス)ではないということですね。
Sender.ClassNameを見ると何になっていますか?
また、TBaseButtonItemにキャストするとどうなるでしょうか?

一応調べてみたら、OnClickのSenderにTButtonItemが入ってこないというバグが報告されているようですけど。
http://qc.embarcadero.com/wc/qcmain.aspx/qcmain.aspx?d=70595


TS  2010-01-22 21:29:24  No: 37153

CategoryButtonを使った事がないので使ってみましたが
Hintまでたどり着けませんでした。

procedure TForm1.CategoryButtons1Click(Sender: TObject);
begin
  ShowMessage((Sender as TCategoryButtons).SelectedItem.Caption);
end;


TS  2010-01-22 21:45:29  No: 37154

たどり着きましたが、やってみるとこれは意味がないみたいですね。
Index値を使ってケースで分けた方がいいと思います。

procedure TForm1.CategoryButtons1Click(Sender: TObject);
begin
  ShowMessage(
  (Sender as TCategoryButtons).Categories[(Sender as TCategoryButtons).
  SelectedItem.Index].CategoryButtons.Hint);
end;


KHE00221  2010-01-23 10:33:25  No: 37155

procedure TForm3.CategoryButtons1Categories0Items0Click(Sender: TObject);
begin
    Caption := TCategoryButtons(Sender).SelectedItem.Hint;
end;

これでHint出るだろ?


久美子  2010-01-25 00:10:00  No: 37156

ありがとうごさいました。
KHE00221の方法で解決しました。


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

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






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