Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TTreeview - Nur Oberknoten finden und übersetzen... (https://www.delphipraxis.net/104318-ttreeview-nur-oberknoten-finden-und-uebersetzen.html)

torud 1. Dez 2007 13:36


TTreeview - Nur Oberknoten finden und übersetzen...
 
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?

Muetze1 1. Dez 2007 13:42

Re: TTreeview - Nur Oberknoten finden und übersetzen...
 
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...

torud 1. Dez 2007 13:45

Re: TTreeview - Nur Oberknoten finden und übersetzen...
 
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;

Ralf Kaiser 1. Dez 2007 14:53

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

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

torud 1. Dez 2007 15:01

Re: TTreeview - Nur Oberknoten finden und übersetzen...
 
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;

marabu 1. Dez 2007 15:12

Re: TTreeview - Nur Oberknoten finden und übersetzen...
 
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

torud 1. Dez 2007 15:26

Re: TTreeview - Nur Oberknoten finden und übersetzen...
 
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...

marabu 1. Dez 2007 15:40

Re: TTreeview - Nur Oberknoten finden und übersetzen...
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 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