Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Alle Items UND SubItems eines Popup-Menüs rekursiv durchlaufen (https://www.delphipraxis.net/174130-alle-items-und-subitems-eines-popup-menues-rekursiv-durchlaufen.html)

PeterPanino 5. Apr 2013 17:04

Alle Items UND SubItems eines Popup-Menüs rekursiv durchlaufen
 
Hallo! Ich verwende folgenden Code, um alle Items UND SubItems eines Popup-Menüs rekursiv zu durchlaufen und zu verarbeiten:
Delphi-Quellcode:
procedure TForm1.IterateMenuItems(AObject: TObject);
var
  i: Integer;
begin
  if AObject is TPopupMenu then
  begin
    for i := 0 to TPopupMenu(AObject).Items.Count - 1 do
    begin
      DoSomething(TPopupMenu(AObject).Items[i]);
      if TPopupMenu(AObject).Items[i].Count > 0 then
        IterateMenuItems(TPopupMenu(AObject).Items[i]);
    end;
  end
  else if AObject is TMenuItem then
  begin
    for i := 0 to TMenuItem(AObject).Count - 1 do
    begin
      DoSomething(TMenuItem(AObject).Items[i]);
      if TMenuItem(AObject).Count > 0 then
        IterateMenuItems(TMenuItem(AObject).Items[i]);
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  IterateMenuItems(PopupMenu1);
end;
Gibt es dafür auch eine einfachere Methode?

Bummi 5. Apr 2013 17:18

AW: Alle Items UND SubItems eines Popup-Menüs rekursiv durchlaufen
 
ich würde es so machen

Delphi-Quellcode:
Procedure DoSomeThing(mi:TMenuItem);
begin
  Form2.Memo1.Lines.Add(mi.Caption);
end;

Procedure Iterate(mi:TMenuItem);
var
 i:Integer;
begin
  DoSomeThing(mi);
  for I := 0 to mi.Count - 1 do Iterate(mi.Items[i]);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
 i:Integer;
begin
 For i := 0 to popupmenu1.Items.Count -1 do
    Iterate(popupmenu1.Items[i]);
end;

PeterPanino 5. Apr 2013 17:29

AW: Alle Items UND SubItems eines Popup-Menüs rekursiv durchlaufen
 
Vielen Dank! Habe gerade hier eine noch stärkere Vereinfachung gefunden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz