Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TreeView Frage Hilfe bitte:) (https://www.delphipraxis.net/111008-treeview-frage-hilfe-bitte.html)

Tobiax 27. Mär 2008 23:10


TreeView Frage Hilfe bitte:)
 
Hallo , ich habe ein Problem ich will ein Treeview und eine Memo erstellen wenn ich im TreeView zb :

Sprachen
+Deutsch
+Englisch

jetzt wähle ich Englisch aus dann soll er eine Info über Englisch in der Memo anzeigen also wie speichere ich einen text oder eine funktion in eine node

Bitte um Hilfe bin noch Anfänger

Ps: Sry für Schreibfehler

mfg TobiaX

Die Muhkuh 27. Mär 2008 23:14

Re: TreeView Frage Hilfe bitte:)
 
Hi,

wieviele Sachen sollen den in Englisch angezeigt werden?

Wenn es um Lokalisierung einer Software geht, solltest Du mal nach selbigem hier suchen.

Tobiax 27. Mär 2008 23:51

Re: TreeView Frage Hilfe bitte:)
 
Das war nur ein Beispiel ich will eigentlich wenn man auf diese node klickt eine .txt datei in die Memo geladen wird die zb denn namen englisch.txt hat

Die Muhkuh 27. Mär 2008 23:58

Re: TreeView Frage Hilfe bitte:)
 
Du könntest z.B. überprüfen, ob das selektierte Item "Englisch" heißt und demnach den Code laden:

Delphi-Quellcode:
procedure TForm2.TreeView1Click(Sender: TObject);
begin
  if TreeView1.Selected.Text = 'Englisch' then
    Memo1.Lines.LoadFromFile('englisch.txt');
end;

Tobiax 28. Mär 2008 00:05

Re: TreeView Frage Hilfe bitte:)
 
Danke wieso bin ich nicht gleich drauf gekommen jetzt habe ich nur noch ein Problem wie kann ich es machen das zb Sprachen nicht Ausgewählt werden kann?
Ach ja mir ist gerade aufgefallen was mache ich wenn ich eine neue node per butten hinzufügen will ?

Die Muhkuh 28. Mär 2008 00:09

Re: TreeView Frage Hilfe bitte:)
 
Hi,

da bietet sich das Ereignis "OnChanging" an:

Delphi-Quellcode:
procedure TForm2.TreeView1Changing(Sender: TObject; Node: TTreeNode;
  var AllowChange: Boolean);
begin
  if Node.Text = 'Sprache' then
    AllowChange := false;
end;

Die Muhkuh 28. Mär 2008 00:10

Re: TreeView Frage Hilfe bitte:)
 
Simples Hinzufügen geht so:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  TreeView1.Items.Add(nil, 'Beschriftung');
end;

Es gibt noch eine Funktionen mehr, die mit Add* anfangen. Ein Blick in die Delphi-Referenz durchsuchenOnline-Hilfe ist das auf jeden Fall Wert.

Tobiax 28. Mär 2008 00:17

Re: TreeView Frage Hilfe bitte:)
 
Danke erstmal , das hinzufügen kenne ich schon aber ich muss ja auch angeben was es tun so wenn man drauf klickt wenn ich zb im code jetzt noch nicht reingeschrieben habe welche datei es öffenen soll wenn ich denn namen xxx eintrage.

PS: Mit AllowChange hat es irgendwie nicht geklappt habe es jetzt so geregelt
Delphi-Quellcode:
  if TreeView1.Selected.Text = 'Sprachen' then
  Memo1.Clear;

Die Muhkuh 28. Mär 2008 00:25

Re: TreeView Frage Hilfe bitte:)
 
Hi,

das kannst Du jetzt auf mehrere Arten lösen.

Eine wäre die Beschriftung gleich dem Dateinamen. Ist allerdings keine elegante Lösung.
Die andere wäre, dass Du dem Node eine Datenstruktur mitgibst, in der diese Informationen drin stehen. Jedes TTreeNode hat eine Eigenschaft Data, ein Pointer auf eine Datenstruktur, die sie hier sehr anbieten würde.

Tobiax 28. Mär 2008 00:33

Re: TreeView Frage Hilfe bitte:)
 
Hi, könntest du mir vl ein Beispiel dazu geben sry auch wenn du denkst ich habe mich damit nicht beschäftigt nein ich habe 2 Stunden im i-net gesucht aber nichts passendes gefunden hab auch schon einiges ausprobiert wäre sehr net danke schon mal.


mfg TobiaX

Die Muhkuh 28. Mär 2008 00:34

Re: TreeView Frage Hilfe bitte:)
 
Morgen früh ja, wenn es bis dort hin nicht schon jemand anders hat. ;)
Heute Nacht nicht mehr, dafür bin ich zu Müde *g*

Tobiax 28. Mär 2008 00:43

Re: TreeView Frage Hilfe bitte:)
 
Ok kein Problem :)

toms 28. Mär 2008 06:09

Re: TreeView Frage Hilfe bitte:)
 
Zitat:

Zitat von Tobiax
Hi, könntest du mir vl ein Beispiel dazu geben sry auch wenn du denkst ich habe mich damit nicht beschäftigt nein ich habe 2 Stunden im i-net gesucht aber nichts passendes gefunden hab auch schon einiges ausprobiert wäre sehr net danke schon mal.
mfg TobiaX

Hallo, wenn du Englisch kannst, dann führ dir doch mal das TreeView Tutorial zu Gemüte. Insebesondere Sektion 13: TTreeNode.Data

Tobiax 28. Mär 2008 11:29

Re: TreeView Frage Hilfe bitte:)
 
Hi danke für die Seite, die kannte ich schon nur ich bin nicht schlau draus geworden ich verstehe nicht wie man jeder node einen anderen text befehl geben kann.

Muhkuh könntest du mir vl doch ein komentiertes Beispiel machen das wäre sehr net weil auf Deutsch wäre mir das lieber das ich es auch wirklich verstehe um was es geht was ich mitgenommen habe das jedes node eine Data besitzt

mfg. TobiaX

taaktaak 28. Mär 2008 11:54

Re: TreeView Frage Hilfe bitte:)
 
Moin, Moin,

wie soll denn das verstanden werden?
Zitat:

wie man jeder node einen anderen text befehl geben kann
Soll einer Node ein Text zugewiesen werden? Oder willst du auf das OnClick im Tree reagieren?

Den Text einer Node setzt du mit
Delphi-Quellcode:
Node.Text:='irgendein Text';
Auf ein Click reagierst du im OnClick-Event z.B. mit

Delphi-Quellcode:
if Selected.Text='Sprachen' then Memo1.Clear;
Das wurde doch aber alles schon geschrieben, was verstehst du denn nicht?

Die Muhkuh 28. Mär 2008 12:07

Re: TreeView Frage Hilfe bitte:)
 
Wenn Du lesen würdest, taaktaak, dann meinte er, dass er das mit dem Data nicht versteht.

Das Beispiel ist gleich fertig.

taaktaak 28. Mär 2008 12:14

Re: TreeView Frage Hilfe bitte:)
 
Hmmm, lesen ist manchmal gar nicht so einfach :oops: Aber, die in #14 gestellte Frage passt nicht so ganz in ein Lösungskonzept mit Hilfe der Data-Property :zwinker:

Die Muhkuh 28. Mär 2008 12:16

Re: TreeView Frage Hilfe bitte:)
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier ist das ganze.

Da ich das eig. selten brauche, hoffe ich, dass ich es selbst richtig gemacht habe :mrgreen:
Funktionieren tut es und falls ich etwas falsch erklärt haben sollte, gibt es ja noch andere Leute, die mich darauf aufmerksam machen werden.

@taaktaak:

Eig. schon. Er möchte beim Klick auf ein Node, einen Text in ein Memo laden. Als Data kann man z.B. den Pfad zur Datei hinterlegen.

Tobiax 28. Mär 2008 12:22

Re: TreeView Frage Hilfe bitte:)
 
Danke echt Perfekt geworden alles schön beschriftet genau so brauche ich es :) danke nochmal

mfg TobiaX:)

Die Muhkuh 28. Mär 2008 12:25

Re: TreeView Frage Hilfe bitte:)
 
Bitte, aber wie gesagt: Ich mache das eig. nicht alltäglich. Deswegen könnte die eine oder andere Beschreibung vielleicht nicht ganz richtig sein.

taaktaak 29. Mär 2008 11:46

Re: TreeView Frage Hilfe bitte:)
 
Moin, Moin,

angeregt durch das schöne Beispiel von Manuel habe ich ein wenig mit den sich daraus ergebenden Möglichkeiten herumgespielt. Mit diesem Verfahren (Records etc. "anzuhängen") können ja auch bei Stringlisten, also z.B. der Listbox, zusätzliche Daten "unsichtbar mitgespeichert" werden. Eine sehr interessante Möglichkeit auch umfangreichere Datenstrukturen recht bequem abzulegen.

Der Programmierer ist hier allerdings dafür verantwortlich, den zusätzlichen Speicher auch selber wieder frei zu geben. Im Beispiel von Manuel erfolgte dies bei Beendgung des Programms - da war die skizzierte Vorgehensweise ausreichend. Im Zuge meiner Versuche mit einer Listbox, habe ich den Speicher für die Record-Daten mal während der Laufzeit freigegeben, was dann beim Zugriffsversuch (auf die nicht mehr vorhandene Daten) zu einem Laufzeitfehler führte. Abhilfe ist durch eine winzige Ergänzung des Codes von Manuel möglich (hier natürlich das Beispiel mit dem TreeView):

Delphi-Quellcode:
procedure TfrmMain.btnClearClick(Sender: TObject);
var
  Node: TTreeNode;
begin
  // Der Variable Node die erste Node aus dem TreeView zuweisen
  Node := tvTree.Items.GetFirstNode;

  // Solange Node <> nil ist, mache...
  while Node <> nil do
  begin
    // Überprüfen, ob Node.Data etwas zugewiesen wurde
    if Assigned(Node.Data) then
      begin                           //      zusätzlich !!!
      // Wenn ja, Speicher freigeben
      Dispose(Node.Data);
      Node.Data:=nil                  // <<<< zusätzlich !!!
      end;                            //      zusätzlich !!!

    // Nächste Node holen
    Node := Node.GetNext;
  end;

  // Alle Nodes löschen
  tvTree.Items.Clear;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz