AGB  ·  Datenschutz  ·  Impressum  







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

Treeview:

Ein Thema von volksjammer · begonnen am 16. Mai 2013 · letzter Beitrag vom 3. Jun 2013
Antwort Antwort
volksjammer

Registriert seit: 16. Mai 2013
15 Beiträge
 
#1

Treeview:

  Alt 16. Mai 2013, 21:43
Hallo Delphi-Freunde!
Möchte (mögl. kurz) mein Prob schildern:
Meine CDs/DVDs liegen im chaos stapelweise rum. Nun hab ich mir 'ne Treeview erstellt,
die die Inhalte der eingelegten Scheibe auflistet und ausdruckt. Klappt auch soweit.
Nur solche Ordner wie {3da26cd63df38a2b200c1842774c} möchte ich natürlich nicht mitdrucken,
daher will ich solche Einträge, die ich nicht sehn will, selektieren(Multiselect) und per
Button "Nicht mitdrucken" ausklammern bzw. nur die selektierten Einträge drucken.

Zum Test lasse ich mir vorher nichtausgewählten Einträge
in einem Memo listen. Hier hakt es dann:

Beim klick auf "Auswahl Nicht drucken" bekomme ich alle Unterordner ins Memo??
Die im Treeview garnicht zu sehen sind!
Die folgende Pocedure ist hierfür verantwortlich:
-------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject); // Auswahl nicht(!) Drucken
var i: integer; // // tv[] = TreeView(Global)
begin Memo1.Clear;
for i := 0 (to TreeView1.Items.Count - 1) do
if NOT TreeView1.Items.Item[I].Selected then
begin
Memo1.lines.add(TreeView1.Items.Item[i].Text);
tv[i]:=-1; // Nicht-selektierte Einträge auf -1 setzen
end else tv[i]:=i; // Selektierte Einträge merken
Memo1.Perform(WM_VSCROLL, SB_TOP, 0);
end;
-------------------------------------------------
Die folgende Proc für "Auswahl Drucken" funktioniert dagegen perfekt!

procedure TForm1.Button4Click(Sender: TObject); // Auswahl drucken
var i: integer;
begin Memo1.Clear;
for I := 0 to (TreeView1.Items.Count - 1) do
if TreeView1.Items.Item[I].Selected then
begin
Memo1.lines.add(TreeView1.Items.Item[i].Text);
tv[i]:=-1; // Nicht-selektierte Einträge auf -1 setzen
end else tv[i]:=i; // Selektierte Einträge merken
SendMessage(Memo1.Handle, WM_VScroll, SB_Bottom, 0);
end;

Bitte! Wie kommt es dazu, dass die obere Proc "Button2Click" die Unterordner der Treeview
ins Memo schreibt??
VIELEN Dank im Voraus!!!

Geändert von volksjammer (16. Mai 2013 um 22:15 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Treeview:

  Alt 16. Mai 2013, 23:43
Hallo,

und herzlich Willkommen in der DP.

Bitte schließe doch künftig Deine Quellcodes in die entsprechenden Tags ein (das Helm-Symbol für Delphi-Code).

Zitat:
Beim klick auf "Auswahl Nicht drucken" bekomme ich alle Unterordner ins Memo??
Die im Treeview garnicht zu sehen sind!
[...]
Bitte! Wie kommt es dazu, dass die obere Proc "Button2Click" die Unterordner der Treeview
ins Memo schreibt??
Was nicht zu sehen ist, ist nicht zwangsläufig ausgewählt.
Delphi-Quellcode:
if NOT TreeView1.Items.Item[I].Selected then
begin
Memo1.lines.add(TreeView1.Items.Item[i].Text);
// [...]
end
Nicht ausgewählt, also ab ins Memo

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
volksjammer

Registriert seit: 16. Mai 2013
15 Beiträge
 
#3

AW: Treeview:

  Alt 17. Mai 2013, 22:44
Hallo Volker!!!
Habe den ganzen in meinem Garten ackern müssen, tut mir leid, dass ich jetzt erst reagiere!
Ja, das Helmsymbol- jetzt weiß ich es. Ich denke demnächst daran(.. evtl. muss ich mich wieder
hier melden..?).
"Was nicht zu sehen ist, ist nicht zwangsläufig ausgewählt."
Diesen Satz verstehe ich nicht!? Es ist wie folgt:
Ordner im Treeview:
--3da26cd63df38a2b200c1842774c <-diesen Ordner markiere ich zB.
--Bewerbungen.doc
--Downloads
--DVDs .. usw

Nach klick auf "Auswahl nicht drucken" erscheint dieser Ordner auch nicht im Memo(soll so sein). Aber alle anderen Ordner im Treeview werden geöffnet und die ihre Unterordner ins Memo geschr.(Total verrückt).
Habe hin und her experimentiert, kein Ergebnis.
Die Procs für "Auswahl Drucken" & "Auswahl nicht Drucken" ähneln sich
bis auf das NOT. Und "Auswahl Drucken" funzt perfekt! Macht mich irre!
DANKE DIR!!!!
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#4

AW: Treeview:

  Alt 18. Mai 2013, 00:45
Hallo,
Zitat:
"Was nicht zu sehen ist, ist nicht zwangsläufig ausgewählt."
Diesen Satz verstehe ich nicht!? Es ist wie folgt:
Ordner im Treeview:
--3da26cd63df38a2b200c1842774c <-diesen Ordner markiere ich zB.
--Bewerbungen.doc
--Downloads
--DVDs

Nach klick auf "Auswahl nicht drucken" erscheint dieser Ordner auch nicht im Memo(soll so sein). Aber alle anderen Ordner im Treeview werden geöffnet und die ihre Unterordner ins Memo geschr.(Total verrückt).
ich kenne die Struktur der Ordner zwar nicht, hält mich jetzt aber nicht wirklich davon ab mal etwas zu in die Geschichte hinein zu interpretieren, daher nehme ich mal folgende Struktur an:
Code:
+ 3da26cd63df38a2b200c1842774c
| Bewerbungen.doc
- Downloads
  | Downloads Vorgestern
  - Downloads Gestern
    | oldstuff.rar
  - Downloads Heute
    | Datei1.zip
    | Datei2.zip
  | Downloads Danknimmerleinstag
- DVDs
  + Setups
  - Spielfilme
    - Heiter bis wolkig
      | Die Ritter der Kokosnuss
    - Frauenfilme
      | Die wunderbare Welt der Amelie
Wenn wir uns jetzt die Struktur von Treeview.Items ansehen, dann ergibt sich folgendes Bild (ich liste nur Index und Text)
Code:
[0]  3da26cd63df38a2b200c1842774c
[1]  3da2 // sehen wir oben zwar nicht ist aber da, und nicht ausgewählt
[2]  3da3 // dito
[3]  Bewerbungen.doc
[4]  Downloads
[5]  Downloads Vorgestern
[6]  Downloads Gestern
[7]  oldstuff.rar
[8]  Downloads Heute
[9]  Datei1.zip
[10] Datei1.zip
[11] Datei2.zip
[12] Downloads Danknimmerleinstag
[13] DVDs
[14] Setups
[15] Emba XE4 // sehen wir oben zwar nicht ist aber da, und nicht ausgewählt
[16] Spielfilme
[17] Heiter bis wolkig
[18] Die Ritter der Kokosnuss
[19] Frauenfilme
[20] Die wunderbare Welt der Amelie
So nun gilt gemäß Deiner Auswahl: Treeview1.Items[0].Selected := True und Treeview1.Items[i].Selected := False für alle 0 < i <= Treeview1.Items.Count - 1
Demnach wundert es nicht (und da ist auch nichts Total verrückt), wenn Du in Deiner Schleife über alle Einträge iterierst, dass alle diese Knoten im Memo landen (ob sichtbar oder nicht, das war gemeint). Offenbar ist dies nicht das gewünschte Verhalten. Was genau Du erreichen möchtest kann ich leider nicht erkennen. Ist es Ok, dass Bewerbung.doc, Downloads und DVDs - mit allen Unterordner - im Memo landen, aber alles was unterhalb von 3da26cd63df38a2b200c1842774c liegt, dort nicht aufschlagen soll? Oder ist Deine Zielsetzung eine ganz andere?

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
volksjammer

Registriert seit: 16. Mai 2013
15 Beiträge
 
#5

AW: Treeview:

  Alt 18. Mai 2013, 20:13
Hallo Volker!

Ja, meine Zielsetzung ist schon anders:
Mir kommt es vor allem darauf an, Ordner mit kryptischen Namen auszulassen.
Auf meinen DVDs sind durchweg irgendwelche Progs, Filme, Daten, die mich im Wesentlichen inetressieren.
Diese Ordner will ich später auf einem Blatt ausgedruckt sehn, weil mich nur(!) dies interessieren.
Aber ich will nur das Hauptverzeichnis, was in den Ordnern drin ist, brauche ich nicht und es wird dann auch unübersichtlich.
Zumal alle Unterordner des betr. Laufwerks geöffnet werden- und im Memo erscheinen, im Treeview
ändert sich dabei nix!
Mir erscheint das total verrückt. Aus meinem früheren programmieren in TP habe ich gelernt, dass letztendlich der Computer immer recht hat. Der macht nur die Fehler, die ich ihm beibringe, ist schon klar. Bin leider mit Delphi zu wenig "zusammen", um das mal so nachvollziehn zu können.
Ansonsten war es immer eine Stärke von mir, Fehler im Code zu finden.
Schade, das Prog könnte mir sehr helfen in meinem CD-Chaos.
Zum handlichen Liste schreiben fehlt mir einfach die Lust und außerdem würde ich es sehr gerne als sinnvolles Programm sehen. DANKE DIR!!!
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: Treeview:

  Alt 18. Mai 2013, 21:21
Hallo,

mit for I := 0 to (TreeView1.Items.Count - 1) do durchläufst Du alle Zweige des Baumes und nicht nur die sichtbaren. Deine Auswahl triffst Du aber nur bei den sichtbaren Zweigen. Daher werden alle unsichtbaren Zweige ausgegeben, da sie ja nicht von Dir ausgewählt wurden. Du müsstest also zusätzlich prüfen, ob die auszugebenden Zweige in der obersten oder sonst von Dir gewählten Ebene liegen.

Bin mir nicht ganz sicher, aber die ausgewählten Zweige müsstest Du in
Delphi-Quellcode:
Delphi-Syntax:

property Selections[Index: Integer]: TTreeNode;
finden.

Eventuell lässt sich Dein Problem durch diese Änderung lösen: for I := 0 to (TreeView1.Selections.Count - 1) do . Habe zur Zeit Delphi im Zugriff und kann daher nicht sagen, ob das so funktioniert.
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#7

AW: Treeview:

  Alt 18. Mai 2013, 22:46
Hallo,
Zitat:
Nur solche Ordner wie {3da26cd63df38a2b200c1842774c} möchte ich natürlich nicht mitdrucken,
daher will ich solche Einträge, die ich nicht sehn will, selektieren(Multiselect) und per
Button "Nicht mitdrucken" ausklammern
Wenn Du alle Knoten, die Du nicht drucken möchtest markierst, dann kannst Du ja mal folgendes versuchen
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);

  procedure CheckNode (Node : TTreeNode);
  begin
    while Assigned (Node) do
      begin
        if not Node.Selected then
          begin
            Memo1.Lines.Add (Node.Text);
            CheckNode (Node.getFirstChild)
          end;

        Node := Node.getNextSibling
      end
  end;

begin
  Memo1.Lines.Clear;
  CheckNode (Treeview1.Items [0])
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
volksjammer

Registriert seit: 16. Mai 2013
15 Beiträge
 
#8

AW: Treeview:

  Alt 24. Mai 2013, 22:28
Hallo Volker!!
Ja Deine While-Schleife werde ich mal einbauen!
Lasse es hier wissen, sobald ich das Ergebnis habe!
Bin gespannt & voller Zuversicht!
VIELEn Dank!!!!
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#9

AW: Treeview:

  Alt 25. Mai 2013, 01:09
Hallo,

bin auch gespannt; hoffe, die Ernüchterung kommt nicht gleich hinterher.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
volksjammer

Registriert seit: 16. Mai 2013
15 Beiträge
 
#10

AW: Treeview:

  Alt 3. Jun 2013, 13:43
Moin zusammen!

Nachdem ich mein Dach(zunächst teilweise) decken musste(Wasser im Häusle), habe ich Deinen o.g.Code- (Volker)nach Tagen u. Tagen in mein Prog einbauen wollen- klappte leider auch nicht.
Daher hab ich nun einen kl. Umweg gemacht. Packe alle Einträge der Treeview in ein Stringarray-
so klappt es endlich. Es ist sicher nicht die elegante Art, aber es soll auch mal vorwärts gehn.
Gruß Uli
  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 22:45 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