AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MainMenu komplett durchlaufen

Ein Thema von dot · begonnen am 13. Nov 2007 · letzter Beitrag vom 13. Nov 2007
Antwort Antwort
dot

Registriert seit: 10. Okt 2007
39 Beiträge
 
#1

MainMenu komplett durchlaufen

  Alt 13. Nov 2007, 10:21
Hallo Leute, wie kann man ein MainMenu komplett ( in der schleife ) durchlaufen ?
ich habe es so probiert aber sobald elemente im Untermenu vorhanden sind klappt es nicht mehr???


Delphi-Quellcode:
//Für Obere Menüitems
for i := 0 to fMenu.Items.Count -1 do
    begin
      fMenu.Items[i].OnDrawItem := MenuDraw;
    end;

//Für Unteritems
  for i := 0 to fMenu.Items.Count -1 do begin
    for j:= 0 to fMenu.Items[i].Count -1 do
      if fMenu.Items[i].Items[j].caption = '-then
        begin
          fMenu.Items[i].Items[j].OnDrawItem := SeparatorDrawItem;
          fMenu.Items[i].Items[j].OnMeasureitem := MeasureSeparator;
        end
      else
        begin
          fMenu.Items[i].Items[j].onDrawItem := MenuItemDrawItem;
          fMenu.Items[i].Items[j].OnMeasureitem := MenuItemMeasureItem;
        end;
    end;
danke für die hilfe gruss dot
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#2

Re: MainMenu komplett durchlaufen

  Alt 13. Nov 2007, 10:34
Du brauchst ne Funktion, die im Falle von Untermenüs sich selber mit dem jeweiligen Menüeintrag wieder aufruft (Rekursion).
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

Re: MainMenu komplett durchlaufen

  Alt 13. Nov 2007, 10:35
Die Funktion sollte doch rekursiv sein, denn du kannst ja mehrere Untermenüs haben.

Sprich als Pseudocode ca. so:
Delphi-Quellcode:
Funktion XYZ(AItem);
begin
  Gehe alle Items von AItem druch ...
  begin
    Setze Eigenschaften des aktuelle Items.
    Rufe XYZ auf und übergebe das aktuelle Item als Parameter.
  end;
end;
Chris
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: MainMenu komplett durchlaufen

  Alt 13. Nov 2007, 10:38
Hallo,

ich würde es so probieren:

Delphi-Quellcode:
type
  TEnumMenuItemProc = procedure (item: TMenuItem) of object;

procedure TDemoForm.EnumMenuItem(item: TMenuItem);
begin
  with item do
  if IsLine then
  begin
    OnDrawItem := SeparatorDrawItem;
    OnMeasureitem := MeasureSeparator;
  end else
  begin
    onDrawItem := MenuItemDrawItem;
    OnMeasureitem := MenuItemMeasureItem;
  end;
end;

procedure EnumerateMenuItems(item: TMenuItem; proc: TEnumMenuItemProc);
var
  i: Integer;
  subItem: TMenuItem;
begin
  for i := 0 to Pred(item.Count) do
  begin
    subItem := item.Items[i];
    proc(subItem);
    if subItem.Count > 0 then
      EnumerateMenuItems(subItem, proc);
  end;
end;

procedure TDemoForm.Button3Click(Sender: TObject);
begin
  EnumerateMenuItems(MainMenu.Items, EnumMenuItem);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
dot

Registriert seit: 10. Okt 2007
39 Beiträge
 
#5

Re: MainMenu komplett durchlaufen

  Alt 13. Nov 2007, 11:16
wow super danke, es klappt perfekt, ja mein ansatz war falsch, jetzt schreib ich nach enum... noch meine funktion die den Oberitems andere Proceduren zuweist als den Unteritems ...

Delphi-Quellcode:
constructor TMainMenueDrawObj.Create(AOwner: TMainMenu);
var I, j : Integer;
begin
  inherited Create(AOwner);
  fMenu := AOwner;
  fMenu.OwnerDraw := True;

  EnumerateMenuItems(fMenu.Items, EnumMenuItem);

  for i := 0 to fMenu.Items.Count -1 do
    begin
      fMenu.Items[i].OnDrawItem := MenuDraw;
    end;
  Mit Zitat antworten Zitat
dot

Registriert seit: 10. Okt 2007
39 Beiträge
 
#6

Re: MainMenu komplett durchlaufen

  Alt 13. Nov 2007, 11:18
was ich natürlich auch nicht wusste ist die Abfrage auf : Isline, meine lösung mit Captione = '-' ist doch sehr unvorteilhaft gewesen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:37 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