AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TTreeview - Nur Oberknoten finden und übersetzen...
Thema durchsuchen
Ansicht
Themen-Optionen

TTreeview - Nur Oberknoten finden und übersetzen...

Ein Thema von torud · begonnen am 1. Dez 2007 · letzter Beitrag vom 1. Dez 2007
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 13:36
Hallo Wissende,

ich weiss, dass es in diesem Forum ewig viele Threads zum leidigen Thema Treeview gibt, aber ich konnte leider nicht das passende finden. Ich muss die Oberknoten, meines Treeview übersetzen, wenn der User die Sprache ändert. Die Childs der Knoten sollen davon unberührt bleiben. Ich konnte leider nichts, auch in der Hilfe nicht, finden, was mir das ermöglicht.

Als Beispiel:

-a
-aa
-b
-c
-d

In diesem Fall sollen immer nur a,b,c und d übersetzt werden. Ich habe es mit GetNext und GetNextsibling versucht, aber ich bin immer irgendwie auch bei -aa gelandet oder aber ich erhielt immer den selben Oberknoten, obwohl ich keine Childs wollte. Wie kann ich als relativ statisch dieses Problem lösen?
Danke
Tom
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 13:42
GetNextSibling ist schon korrekt - von daher: hast du den Code mit GetNextSibling noch zur Hand? Kannst du ihn mal posten, weil es sollte nur eine Kleinigkeit sein.

Als dreckigen Hack kannst du sonst bei jedem Knoten abfragen, ob Level = 0 ist, und nur solche übersetzen. Aber poste mal den Code...
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 13:45
Ich habe es testhalber nun so hinbekommen...Nicht schön, aber es funktioniert! Eigentlich habe ich nur 6 Oberknoten...Könnte man das vielleicht in ner Schleife machen!?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  myNode : TTreeNode;
begin
  myNode := TreeView1.Items.GetFirstNode;
  ShowMessage(myNode.Text);

  myNode := myNode.getNextSibling;
  ShowMessage(myNode.Text);

  myNode := myNode.getNextSibling;
  ShowMessage(myNode.Text);

  myNode := myNode.getNextSibling;
  ShowMessage(myNode.Text);
end;
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 14:53
Zitat von torud:
Könnte man das vielleicht in ner Schleife machen!?
Ja. Du willst sicher so etwas wie:

Delphi-Quellcode:
var
  myNode : TTreeNode;
begin
  myNode := TreeView1.Items.GetFirstNode;
  while myNode <> nil do begin
    ShowMessage(myNode.Text)
    myNode := myNode.GetNextSibling;
  end;
end;
(ungetestet, sollte aber OK sein)

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#5

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 15:01
Danke für den Code, aber wie Du selbst sehen wirst, macht es mit der Schleife nicht so wirklich Sinn. Es sind ja nur 6 Knoten.

Hier mal ein Ausschnitt aus meinem Code. Die Variablen sind voher befüllt worden.

Delphi-Quellcode:
  if obj_list <> nil then
    begin
      myNode := obj_list.TreeView1.Items.GetFirstNode;
      myNode.Text := str_tv_cams;

      myNode := myNode.getNextSibling;
      myNode.Text := str_tv_camd;

      myNode := myNode.getNextSibling;
      myNode.Text := str_tv_logo;

      myNode := myNode.getNextSibling;
      myNode.Text := str_tv_back;

      myNode := myNode.getNextSibling;
      myNode.Text := str_tv_fret;

      myNode := myNode.getNextSibling;
      myNode.Text := str_tv_objc;

      myNode := myNode.getNextSibling;
      myNode.Text := str_tv_legn;
    end;
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 15:12
Hallo Tom,

ich würde den Vorschlag von Ralf aufgreifen. Die Umstellung der Lokalisierung zur Laufzeit würde ich allerdings nicht von der Reihenfolge der Knoten, sondern von einer Markierung abhängig machen:

Delphi-Quellcode:
var
  node: TTreeNode;
begin
  node := TreeView.Items.GetFirstNode;
  while Assigned(node) do
  begin
    node.Text := GetLocalNodeText(Integer(node.Data))
    node := node.GetNextSibling;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#7

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 15:26
Sorry, dass verstehe ich nicht ganz, denn ich will doch übersetzen, auch wenn der Knoten NICHT markiert ist. Selbst wenn ich den Code so übernehmen würde, stellt sich mir die Frage, wie ich darin die Übersetzung einpflegen soll, die ja relativ statisch erfolgt...
Danke
Tom
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: TTreeview - Nur Oberknoten finden und übersetzen...

  Alt 1. Dez 2007, 15:40
Jede Komponente, deren Beschriftung bei einer Lokalisierung geändert werden soll, erhält eine "Markierung" - einen Schlüssel, über den die zugehörige Übersetzung definiert werden kann. Beim TreeNode würde ich diese "Markierung" in der dafür vorgesehenen Eigenschaft Data unterbringen.

Freundliche Grüße
  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 07:43 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