![]() |
[Delphi]Dirtree doorlopen
Ik moet voor school een programma maken wat een grafische overzicht geeft van de directory structuur en de bijbehorende bestanden. Een deel is gegeven en je moet nu bepaalde functies implementeren. Ik loop vast bij een functie die de 2 coordinaten van een functie meekrijgt en met de functie contains(AX, AY) kan ik kijken of bepaalde coordinaten binnen de huidige rechthoek vallen (object).
Nu moet ik op de een of andere manier heel de tree doorlopen, daarbij heb ik de beschikking om voor iedere dir zijn onderliggende en bovenliggende dingen te bekijken. Wat ik niet snap is hoe ik de complete tree moet doorlopen, ik weet niet hoe diep de tree zal zijn, dus ik zat te denken aan recursieve aanroepen, maar hoe return je dan het object waar de coordinaten wel in zitten? Code:
function TRectTree.ContainingRect(AX, AY: Integer): TRectTree; Iemand suggesties? |
Je bent niet helemaal duidelijk in wat je precies nodig hebt, maar een recursief algoritme om een bestaande directorystructuur op je computer te doorlopen is een vrij standaard dingetje hoor. Ik ben al iets te lang niet met Delphi bezig geweest, daarom in een soort pseudo-code:
Code:
function FindTree(loc:string;prior:integer); De gebruikte funcites zitten in de unit "Files", als ik me niet vergis, maar in de help van Delphi valt er zeker genoeg over te vinden :) Wat die coördinaten betreft, misschien van elk object een childclass maken, die als OnMouseOver (want ik gok dat het daarvoor is?) een functie meegeven die een pointer naar het object laat wijzen. Programmeer-technisch misschien niet de meest propere en edit: ofwel versta ik het verkeerd, daar lijkt het in ieder geval wel op. In dat geval zal je een beetje moeten uitleggen hoe je boomstructuur eruit ziet, in het geval van een SequoiaView-achtig diagram, kun je gewoon kijken of het daarbinnen valt, alle childs oproepen en kijken of het binnen een child valt, ook allemaal recursief. Is het eerder een klassieke boomstructuur (zoals in Explorer), dan zul je volgens mij ook bovenaan de tree moeten beginnen, ook gewoon recursief alles aflopen. Eventueel gewoon het bovenste niveai aflopen, ligt je y-coördinaat lager dan je te testen rechthoek, ga je naar volgende object op hetzelfde niveau. Bij die kijk je opnieuw, ligt deze hoger, dan ga je weer naar het vorige item, vraagt de childs daarvan op en voert daarop weer de functie uit. Dat lijkt me het snelste (in ieder geval sneller dan alle parents en bijhorende childs af te lopen en na te kijken, hierbij hangt de looptijd enkel af van de hoeveelste rechthoek je nodig hebt en hoe diep in de structuurhij geworteld zit, niet per se van het aantal objecten, die je anders bij elke zoekpoging zou moeten doorlopen. Al het bovenstaand lijkt me het beste met pointers door te geven (huidigePogin, vorigePoging). |
het probleem waar ik dus tegenaan loop is dat dat niet zomaar kan, alle functies en/of functiedefinities zijn al gegeven, het enige wat nog rest is de implementatie van de functies. Maar laat maar, ik ben toch al te laat met mn opdracht :p
had al maandag af moeten zijn, volgend jaar weer een kans :p |
Alle tijden zijn GMT +1. Het is nu 17:57. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.