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);
begin
VoegToeAanBoomStructuur(loc,prior);
VindBestand := ZoekBestanden(loc,*);
while GevondenBestand
do
begin
if GevondenBestand.IsDir
then FindTree(loc+'\'+GevondenBestand.naam,prior+1);
GevondenBestand := ZoekVolgendBestand;
end;
end;
Het is iets in die aard, thuis heb ik het in ieder geval wel in een Delphi-boek in echte code staan, met de juiste functienamen. Het komt erop neer dat je de functies voor het zoeken van bestanden moet gebruiken, vermits een map ook maar een bestand is en dan kijk je bij elk gevonden bestand na of het een map is. Die map kun je weeral doorzoeken. Die variabele prior lijkt me nodig om de "prioriteit (het niveau) van de map te bepalen bij het invoegen in de boomstructuur, die dan vanaf de bovenste map (prior=0) opgebouwd zal worden naar onderliggende mappen (prior=1) en zo verder naar verder onderliggende mappen (prior=2) enzovoorts.
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).