TradiogroupでOnKeyDownなどは拾えないでしょうか?

解決


RYO  2009-12-17 20:47:15  No: 36455

以前から使っている自作プログラムなのですが、TRadioGroupでOnKeyDown,PnkeyPressedなどのキーボード操作関係のイベントを拾う方法はないでしょうか?


けど  2009-12-17 20:57:13  No: 36456

コンポーネント作成でなければ
http://migaro.co.jp/contents/support/ml/backnumber/101.txt


RYO  2009-12-17 22:36:45  No: 36457

さっそくありがとうございます。
ご指摘のようにやってみましたが、うまくいきません。そこで、何もコンポーネントのないフォームを1枚作って試すとうまく拾えますが、何かしらコンポーネントを置くと拾えません。
Delphiのバージョンにもよるのでしょうか?  Delphi6でやっています。


通りすがり  2009-12-18 01:05:14  No: 36458

TForm.KeyPreview = True ですか?


RYO  2009-12-18 23:44:53  No: 36459

> TForm.KeyPreview = True

  明示的に設定したら拾えるようになりました。ただ、ひとつのフォームにTRadioGroupが複数ある場合、どのコンポーネントでイヴェントが発生したかを区別する方法が見つかりません。


そんなことは  2009-12-19 01:11:09  No: 36460

> どのコンポーネントでイヴェントが発生したかを区別する方法が見つかりません。
ActiveControlが分かるんだから、それは自明だと思うけど?


けど  2009-12-19 02:53:18  No: 36461

これで伝わりますか?
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    if ActiveControl.ClassName = 'TGroupButton' then
    case Key of
//RadioGroup を操作
      VK_RETURN:with TRadioGroup(ActiveControl.Parent) do
                  ShowMessage(Items[ItemIndex]);
//ボタン自体を操作
      VK_ESCAPE:TRadioButton(ActiveControl).Checked:=False;
    end;
end;


RYO  2009-12-20 00:32:27  No: 36462

それが、TeditだとActiveControl.Nameでコンポーネント名が帰ってくるのですが、Tradiogroupだと名前が帰ってこないところで考え込んでいます。


フシアナくん  2009-12-20 00:39:34  No: 36463

せっかくの回答のどこを見てるの?
ぜんぜん見てないんじゃない?
ちゃんとActiveControl.Parentって書いてあるのに。


KHE00221  2009-12-20 22:12:38  No: 36464

こっちのほうがわかりやすいか?

type
  TForm3 = class(TForm)
    RadioGroup1: TRadioGroup;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    procedure RadioGroupKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
var
    I: Integer;
begin
    for I:=0 to RadioGroup1.Items.Count -1 do
    begin
      RadioGroup1.Buttons[I].OnKeyDown := RadioGroupKeyDown;
    end;
end;

procedure TForm3.RadioGroupKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
    Exit;
end;


RYO  2009-12-22 23:52:10  No: 36465

いろいろ教えていただいた方法に従って、思い通りの動作をさせることができました。ありがとうございました。


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

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






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