/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Fulde filnavne -> Treeview... How?
Fra : Mads M.


Dato : 20-01-02 17:50

Er der en snild måde at putte filnavne + stier ind i en treeview,
ligesom i exploreren?

c:\fil1,txt
c:\fil2,txt
c:\x\fil1,txt
c:\x\fil2,txt
c:\x\fil3,txt

Ind i treeview
c:
   fil1.txt
   fil2.txt
   [x]
      fil1.txt
      fil2.txt
      fil3.txt


Osv...

Jeg døjer lidt med at lave en fejlsikker algoritme uden alt for mange
lykker, så gode råd er velkomne...

/Mads


 
 
Thomsen (21-01-2002)
Kommentar
Fra : Thomsen


Dato : 21-01-02 22:27

Hej Mads,,

Snild er vel så meget sagt, men dette er hvad jeg, en selvlært programmør,
har fundet frem til. Og den virker hos mig udemærket:
Bemærk:
Jeg bruger Q_Strings, hvis functioner er noget hurtigere end delphi's
stadard.
Q_CompTexst svarer til AnsiCompareText
Q_SameText svarer til AnsiSameText
Derudover bruges ikke TtreeView, men Mike Lisches VirtualTreeview, som
bruger records til at gemme alle informationer (som fx. text) i.
Men det skulle ikke være så galt at omskrive det, ellers må du råbe højt : )

God fornøjelse.

Mvh,
Anders Thomsen

PS: Hvis du optimerer koden vil jeg da godt lige se hvad du har lavet : )



Function getLevel(p:pointer; level:integer; toTheRoot:boolean =
false):string;
var i,x:integer;
begin
if level < 0 then result := '' else
begin
result := Prec(p).Fpath;
if toTheRoot then
begin
x:=1;
for i:=0 to level do
x := Q_StrScan(result, '\', x)+1;
result := Q_CopyLeft(result, x-2)
end
else
begin
for i:=0 to level-1 do
Q_cutLeft(result, Q_StrScan(result, '\'));
result :=Q_CopyLeft(result, Q_StrScan(result, '\')-1)
end
end
end;

function CompareUpdateTreeDir(Item1, Item2: Pointer): integer;
begin
result := Q_CompText(Prec(Item1).fPath, Prec(Item2).Fpath) //svarer
til Q_CompText(extractfilePath(s1), extractFilePath(s2))
end;


//Selve koden:
SortList.Sort(CompareUpdateTreeDir);
i:=0;
x:=1;
while x < sortList.count do
begin
if Q_SameText(getFilePath(sortlist.items[i]),
getFilePath(sortlist.items[x])) then
sortList.items[x] := nil
else i := x;
inc(x)
end;
Sortlist.pack;
i:=0;
level:=0;
aNode := rNode;
while (i < sortlist.count) and (level >= 0) do
begin
with tree do
begin
aNode := AddChild(aNode);
with PTreeRec(getnodedata(aNode))^ do
begin
text := getLevel(sortlist.items[i], level);
if level = 0 then Kind := TreeKind_Drive
else Kind := TreeKind_Directory;
end // of with Ptreerec(...
end; // eo with tree
if length(getLevel(sortlist.items[i], level+1)) > 0
then
inc(level)
else
begin
if (i < sortlist.count-1) and
Q_SameText(getLevel(sortlist.items[i], level, true),
getLevel(sortlist.items[i+1], level, true)) then
begin
inc(level);
inc(i)
end
else
begin
aNode := aNode.parent;
if i < sortlist.count-1 then
while not
Q_SameText(getlevel(sortlist.items[i], level-1, true),
getlevel(sortlist.items[i+1], level-1, true)) do
begin
dec(level);
aNode := aNode.parent
end;
inc(i)
end // of Q_SameStr(...
end // of length(..
end // of while (i < sortLi...



"Mads M." <waup@punkass.com> skrev i en meddelelse
news:susl4u0h5js7hbvekvl732f6amqu9nu42d@4ax.com...
> Er der en snild måde at putte filnavne + stier ind i en treeview,
> ligesom i exploreren?
>
> c:\fil1,txt
> c:\fil2,txt
> c:\x\fil1,txt
> c:\x\fil2,txt
> c:\x\fil3,txt
>
> Ind i treeview
> c:
> fil1.txt
> fil2.txt
> [x]
> fil1.txt
> fil2.txt
> fil3.txt
>
>
> Osv...
>
> Jeg døjer lidt med at lave en fejlsikker algoritme uden alt for mange
> lykker, så gode råd er velkomne...
>
> /Mads
>
>



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste