掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
呼び出したメニュー(TMenuItem)から、そのメニューの属するTPopupMenuを識別するには? (ID:32361)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
複数のTPopupMenu内のメニューから同じprocedureを呼び出し、呼び出されたTPopupMenuを識別して処理を振り分けようとしています。この場合に、直接的にTPopupMenuを識別する方法はありますでしょうか? 当方で呼び出したメニューからオブジェクトツリーを遡るような方法を念頭に下記のようなテストは行いました。 なお、例えば、TPopupMenu1のメニューのTagには1、TPopupMenu2のメニューのTagには2をあらかじめ割り当てておいて、それにより識別するといったような間接的な方法での解決法はここでは望んでいません。 環境 : Delphi6Personal+Win2000; 〜試行内容〜 Form上にPanelを2つとButtonをおき、次のようなコードを用意しました。 procedure TForm1.Button1Click(Sender: TObject); var Pop:TPopupMenu; Pop2:TPopupMenu; NewItem:TMenuItem; begin Pop:=TPopupMenu.Create(Self); Pop.Name:='PopupMenu2'; Panel1.PopupMenu:=Pop; NewItem:=TMenuItem.Create(Pop); NewItem.Caption:='テスト1'; NewItem.Name:='test1'; NewItem.OnClick:=TestClick; Pop.Items.Add(NewItem); Pop2:=TPopupMenu.Create(Self); Pop.Name:='PopupMenu3'; Panel2.PopupMenu:=Pop2; NewItem:=TMenuItem.Create(Pop2); NewItem.Caption:='テスト2'; NewItem.Name:='test2'; NewItem.OnClick:=TestClick; Pop2.Items.Add(NewItem); end; procedure TForm1.TestClick(Sender: TObject); var i:Integer; Mn:TMenuItem; begin Mn:=(Sender as TMenuItem); for i:=0 to 10 do begin Mn:=Mn.Parent; ShowMessage(Mn.Name); end; end; 実行後、Button1をクリックして、Panelに対してそれぞれPopupMenuを作成し、テストメニューをクリックしましたが、希望のPopupMenu.Nameは得られません。また、procedure TForm1.TestClick(Sender: TObject)部を以下のように変更しての試行も実施しましたが、希望の通りにはなりませんでした。 procedure TForm1.TestClick(Sender: TObject); var i:Integer; Com:TComponent; begin Com:=(Sender as TComponent); for i:=0 to 10 do begin Com:=Com.Owner; ShowMessage(Com.Name); end; end; それは不可能という回答でもかまいませんので、よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.