動的に生成したメニューアイテムの番号を取得するには?

解決


Delphi大好き  2010-08-03 03:31:19  No: 38912

お世話になります。
以下のようにしてポップアップメニューアイテムを動的に生成し、
それにイベントを割り当てます。

そして、動的に生成されたポップアップメニューを
クリックして、イベントを実行させます。
そのイベントで選択されたポップアップメニューアイテムを取得し、
必要な処理を実行させます。

ここで問題にあたっているのですが、
動的に生成されたポップアップメニューアイテムを取得する方法が解りません。
その為、各ポップアップメニューアイテムを識別することが出来ず、
困っています。

以下がポップアップを動的生成する部分のコードです。

procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
  NewItem: TMenuItem;
begin
  Application.Title := '解像度変更';
  Button1Click(Sender);

  i := 0;
  while listbox1.Items.Count > i do begin
    NewItem := TMenuItem.Create(PopupMenu1);
    NewItem.Caption := listbox1.items[i];
    NewItem.OnClick := Button6Click;
    NewItem.Tag := i;
    popupmenu1.Items.Insert(0,NewItem);
    i := i + 1;
  end;
end;

以下は肝心の動かない部分です

procedure TForm1.Button6Click(Sender: TObject);
var i:integer;
begin
  case popupmenu1.ComponentIndex of
  //これだとここの値がメニューの合計を出して、
  //セレクトしたアイテム番号を取得する方法が解らない
    0:i:=0;
    1:i:=1;
    2:i:=2;
    3:i:=3;
    4:i:=4;
    5:i:=5;
  end;
  combobox1.Text := combobox1.Items[i];
  combobox2.text := combobox2.Items[i];
  combobox3.Text := combobox3.Items[i];
  combobox4.Text := combobox4.Items[i];

  Button2Click(Sender);
end;


けど  2010-08-03 04:00:56  No: 38913

(Sender as TComponent).Tag
ですか?


けど  2010-08-03 04:06:24  No: 38914

質問の意図からしてこちらかも
if Sender is TMenuItem then (Sender as TMenuItem).MenuIndex


Delphi大好き  2010-08-03 04:30:25  No: 38915

けどさんありがとうございます。

二通りの方法ありがとうございます、
とても勉強なります。

無事動作しました。
それではありがとうございました。


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

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






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