AGB  ·  Datenschutz  ·  Impressum  







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

Rekursives Problem

Ein Thema von Neutral General · begonnen am 30. Nov 2007 · letzter Beitrag vom 30. Nov 2007
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Rekursives Problem

  Alt 30. Nov 2007, 14:41
Hi,

Habe hier eine rekursive Funktion die mir Probleme macht. Sie funktioniert eigentlich soweit aber das Problem ist, dass wenn sie vorzeitig das Item findet und noch andere Instanzen (kann man das so sagen?) der Funktion laufen, dann überschreiben die das richtige Ergebnis. Hatte eigentlich noch nie ein Problem. Vielleicht ists auch ein ganz blöder Fehler...

Delphi-Quellcode:
function Find(Items: TObjectList; Item: HMENU): TMenuItem;
var i: Integer;
begin
  for i := 0 to Items.Count-1 do
  begin
    if TMenuItem(Items[i]).Handle = Item then
    begin
      Result := TMenuItem(Items[i]);
      exit;
    end
    else
      Result := Find(TMenuItem(Items[i]).FItems,Item);
  end;
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Rekursives Problem

  Alt 30. Nov 2007, 14:58
Meinst du so:
Delphi-Quellcode:
function Find(Items: TObjectList; Item: HMENU): TMenuItem;
var i: Integer;
begin
  for i := 0 to Items.Count-1 do
  begin
    if TMenuItem(Items[i]).Handle = Item then
    begin
      Result := TMenuItem(Items[i]);
      exit;
    end
    else
    begin
      Result := Find(TMenuItem(Items[i]).FItems,Item);
      if result<>nil then exit;
    end;
  end;
  result:=nil;
end;
Edit: "end;" vergessen
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Rekursives Problem

  Alt 30. Nov 2007, 14:59
Hallo,

Du benötigst eine weitere Abbruchbedingung:
Delphi-Quellcode:
function Find(Items: TObjectList; Item: HMENU): TMenuItem;
var
  i: Integer;
begin
  for i := 0 to Items.Count - 1 do
  begin
    if TMenuItem(Items[i]).Handle = Item then
    begin
      Result := TMenuItem(Items[i]);
      exit;
    end
    else
    begin
      Result := Find(TMenuItem(Items[i]).FItems, Item);
      if Assigned(Result) then
        Exit;
    end;
  end;
end;
Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Rekursives Problem

  Alt 30. Nov 2007, 15:01
Hi,

Ah danke. Eigentlich logisch

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Rekursives Problem

  Alt 30. Nov 2007, 15:08
Moin,

warum? Der Abbruch ist doch klar.

Stefan
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Rekursives Problem

  Alt 30. Nov 2007, 15:42
Ich weiss nicht, der gezeigte Code scheint mir ziemlich unsauber zu sein.
Wozu TObjectList ins Spiel bringen, wenn doch TMenuItem ausreicht ?
Die Klasse TMenuItem bildet eine hierarchische Struktur ab.
Man muss das System aber erst mal verstanden haben. siehe: Tiefensuche
Delphi-Quellcode:
function Find(Item: TMenuItem; mhandle: HMENU): TMenuItem;
var
  i: Integer;
begin
  if item.Handle = mhandle then
  begin
     Result := Item;
  end
  else
  begin
    for i := 0 to Items.Count - 1 do
    begin
       Result := Find(Item.Items[i], mhandle)
       if Assigned(Result) then
         Exit;
    end;
    Result := nil;
  end;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Rekursives Problem

  Alt 30. Nov 2007, 16:27
Hi,

Danke
Habs jetzt verbessert. Aber Du musst bedenken das TMenuItem nicht das TMenuItem ist, das du kennst

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  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:15 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