что плохого в данном случае при применении рекурсии? Только вот так поправить function FindMenuItem(TagID: Integer; aItems: TMenuItem): TMenuItem; var I: TMenuItem; begin Result := nil; if not Assigned(aItems) then Exit; for I in aItems do if I.Tag=TagID then begin Result:=I; Exit; end else Result:=FindMenuItem(TagID, I); end;
Вызов функции - минус производительность, ИМХО.
Не находит самый последний уровень. А в х64 находит.
function FindMenuItem(TagID: Integer; aItems: TMenuItem): TMenuItem; var I: TMenuItem; begin Result := nil; if not Assigned(aItems) then Exit; if aItems.Tag = TagID then begin Result := aItems Exit;
А зачем результату набор элементов? ``` Result :=aItems Exit; ```
Так а зачем? Мне один нужен.
я о том что 4 строки кода можно заменить на одну
Так все пункты меню оказываются вываленными на первый уровень.
Ну как так-то?!? Проверку на assigned после рекурсии, а не в начале метода.
Обсуждают сегодня