![]() |
Rekursives Problem
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:
Gruß
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; Neutral General |
Re: Rekursives Problem
Meinst du so:
Delphi-Quellcode:
Edit: "end;" vergessen
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; |
Re: Rekursives Problem
Hallo,
Du benötigst eine weitere Abbruchbedingung:
Delphi-Quellcode:
Gruß
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; xaromz |
Re: Rekursives Problem
Hi,
Ah danke. Eigentlich logisch :wall: :) Gruß Neutral General |
Re: Rekursives Problem
Moin,
warum? Der Abbruch ist doch klar. Stefan |
Re: Rekursives Problem
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: ![]()
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; |
Re: Rekursives Problem
Hi,
Danke :) Habs jetzt verbessert. Aber Du musst bedenken das TMenuItem nicht das TMenuItem ist, das du kennst ;) Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz