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

解決


久美子  2010-01-22 10:57:15  No: 37147  IP: 192.*.*.*

いつもお世話になっています。
カテゴリーボタンを利用して、実行する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 11:37:29  No: 37148  IP: 192.*.*.*

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

編集 削除
久美子  2010-01-22 11:47:49  No: 37149  IP: 192.*.*.*

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

編集 削除
TS  2010-01-22 11:51:08  No: 37150  IP: 192.*.*.*

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

編集 削除
HOta  2010-01-22 11:55:18  No: 37151  IP: 192.*.*.*

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

編集 削除
tor  2010-01-22 12:01:18  No: 37152  IP: 192.*.*.*

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

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

編集 削除
TS  2010-01-22 12:29:24  No: 37153  IP: 192.*.*.*

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

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

編集 削除
TS  2010-01-22 12:45:29  No: 37154  IP: 192.*.*.*

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

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

編集 削除
KHE00221  2010-01-23 01:33:25  No: 37155  IP: 192.*.*.*

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

これでHint出るだろ?

編集 削除
久美子  2010-01-24 15:10:00  No: 37156  IP: 192.*.*.*

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

編集 削除