AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten in Treeview einsortieren

Ein Thema von BMI · begonnen am 16. Jul 2010
Antwort Antwort
Benutzerbild von BMI
BMI

Registriert seit: 16. Jul 2010
58 Beiträge
 
Delphi 2 Desktop
 
#1

Daten in Treeview einsortieren

  Alt 16. Jul 2010, 11:25
Delphi-Version: 2005
Hallo,

ich muß eine Liste in ein Treeview einsortieren.
Allerdings "schraub" ich jetzt schon 2 Tage daran herum, ohne ein vernünftiges Ergebnis erzielt zu haben.
Vielleicht weiß jemand von Euch eine Hilfe.

Mein weiter unten geposteter Code spiegelt meinen derzeitigen Stand wieder.
Er ist nochmehr verwurstet als vorher. Und ich weiß nicht mehr, was ich genau während des Probierens verändert habe.
Ich wollte damit alle bereits in dem aufzunehmenden String vorkommenden Teilelemnte eliminieren und nur den jeweils neuen Begriff (der hinten-dran ist) in dem Tree vermerken. Falls der letzte nicht vorkommt, soll das an einen frühren Knoten angehängt werden, sodaß ein vernünftiger Baum entsteht.

Das schwierige ist nicht der Tree, sondern das Kürzen der Zeilen auf das Wesentliche, Neue.

Vielleicht weiß aber jemand von Euch einen ganz neuen, simplen Ansatz.
auf den ich nicht gekommen bin?
evtl. lohnt es sicht gar nicht, meinen Code anzuschauen und zu reparieren/vestehen zu wollen, weil es vielleicht einfacher geht?

Großen Dank schon einmal hier.



Die Elelmente der Liste hab ich mal mit '\' getrennt. (im Original der Liste ist dies anderes, nicht darstellbares Zeichen)

Code:
{ Folgende Liste soll in einen Tree kopiert werden
####a\Schrauben
####a\Schrauben\Betonschrauben
####a\Schrauben\lang
####a\Schrauben\lang\Holzschrauben
####a\Schrauben\Metallschrauben
####a\Schrauben\sechskantig
####a\Nägel
####a\Nägel\Betonnägel
####a\Nägel\Holz
####a\Nägel\Holz\mitHaken
####b\isometrischeFormen\ ...

einsortiert in ein Treeview sollte das etwa so aussehen:

 Liste
 |- Schrauben
 |        |-Betonschrauben
 |        |-lang
 |            |-Holzschrauben
 |        |-Metallschrauben
 |        |-sechskantig
 |- Nägel
 |     |-Betonnägel
 |     |-Holz
 |         |-mitHaken
 |-isometrischeFormen
also so http://www.imagebanana.com/img/ibh7q...0716111537.png

Erklärung zum Code unten:
Also ich gehe die Liste im memo zeilenweise durch.
Packe mir dann, falls die Zeile (die steht in der Liste zwischen unbrauchbarem, daher der Filter), die in Frage kommt und scanne die Stringzeile nach "\" und füge die getrennten Elemente in eine Liste2 ein.
Kommt der Begriff in der Liste2 als nächstletzter vor, soll der Knoten als Child angehängt werden - falls nicht, soll er weiter LINKS im Baum angeordnet werden. ... soo.. dachte ich mir das ... aber das scheint wohl nicht zu funktionieren. Vielleicht ist es einfacher, das von Grundauf neu zu machen? Bloß wie?
Delphi-Quellcode:
procedure TForm1.STARTClick(Sender: TObject);
var
  z, DCounter, FCounter, i, v, k, maxL: integer; // Integer später Problem ???
Samm2, Samm, tt, t, vv, u, s: string;
  allmemo: tstringlist;
  tn: TTreeNode;
begin
TreeView1.items.clear;
  TreeView1.AlphaSort;
  ListBox1.Clear;
  ListBox2.Clear;
  ListBox3.Clear;
  ListBox4.Clear;
  allmemo := TStringList.create;
  allmemo.Assign(memo1.lines);
  maxL := memo1.lines.count - 1;
  FCounter := -1; DCounter := -1;
  i := 2;
  TreeView1.items.Addchild(nil, 'ERSTENS');
// tn.Expand;
  while i < maxL do
  begin
    inc(i);
    S := allmemo[i];
    Edit1.text := S;
    if (S <> '') then
    begin // wenn nicht leer
      if (posex('Dat(en)', S, 1) = 0)
        and (posex('Daten', S, 1) = 0)
        and (posex('<Masse>', S, 1) = 0)
        then
      begin
        if (posex(' Informationen über ', S, 1) <> 0) and (posex(':\', S, 1) <> 0) then // abchecken
        begin
          inc(DCounter);
          s := Copy(s, 20, length(s)); // ' Informationen über '
          ListBox1.items.add(s);

          tn := TreeView1.items[DCounter];
          /////////////////
// z := length(s);
            z := 0;
              Tt := ''; Samm :='';
            while z < length(s) do
            begin
              inc(z);
              tt := s[z];
              if (tt = '\') //or (tt = ':')
               then
              begin
                ts.Items.add(Samm); // Samm := Copy(s, 1, z);
                Samm2 := Samm2 + Samm;
                Samm := '';
                Tt := ''; // vorsicht , nochmal
              end
              else
                Samm := Samm + tt;
            end;
          //2end; // END IF Informationen enthalten 2
          tt := copy(s, 1, z); //length(s)
          /////////////////
vv := TS.Items[TS.Items.count - 1 ];
          if posex(vv, s, 1) <> 0 then // wenn drin
          begin
            s := copy(s, Length(vv) + 1, length(s)); /// VORHER t
            TreeView1.Items.Add(Tn, s); //DCounter] := s ;
          end
          else
            TreeView1.Items.AddChild(Tn, s); //DCounter] := s ;;
          t := t + s + ' # ';
          // ongetimageindex << anderes BIld
        end
        else
        begin
          if (posex('Anzahl der angezeigten Daten:', S, 1) = 0) then
            inc(FCounter);
          ListBox2.Items.add(s);
        end;


      end;
      ; // End pos
    end; // End wenn String nicht leer
  end; // while?

// tn[0].Expand ( True);
  allmemo.Free;
  TreeView1.FullExpand;
end;
http://www.imagebanana.com/img/ibh7q...0716111537.png

Nochwas schlimmes muß ich beichten ... ich habe Delphi 3 Pro sorry.

P.S.:Warum sind eigentlich Bilder /bzw. verlinkte Vorschauen deaktiviert?
eine Signatur? - in 2022? - WOZU ?!!!

Geändert von BMI (16. Jul 2010 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz