Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit xml File auslesen und in TTreeView anzeigen (https://www.delphipraxis.net/75217-problem-mit-xml-file-auslesen-und-ttreeview-anzeigen.html)

Mackhack 16. Aug 2006 01:13


Problem mit xml File auslesen und in TTreeView anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich bekomme leider nicht das gewuenschte Resultat mit diesem Code. Er sollte mir nur eine Translation hinschreiben per ObjectName. Wie das ganze aussieht seht ihr im Screenshot.

Delphi-Quellcode:
procedure TfoFrmMain.ShowLanguagesInTreeView;
var
  I, J, K, L: Integer;
  lLanguageNode, lTFormNode, lTransNode: TTreeNode;
begin
  TV.Items.Clear;
  for I := Low(Languages) to High(Languages) do
  begin
    lLanguageNode := TV.Items.Add(nil, 'Sprache: ' + Languages[I].FLanguage);
    for J := Low(Languages) to High(Languages[I].TForms) do
    begin
      lTFormNode := TV.Items.AddChild(lLanguageNode, 'Form: ' + Languages[I].TForms[J].FormName);
      for K := Low(Languages) to High(Languages[I].TForms[J].TWords) do
      begin
        lTransNode := TV.Items.AddChild(lTFormNode, 'ObjektName: ' + Languages[I].TForms[J].TWords[K].ObjectName);
        for L := Low(Languages) to High(Languages[I].TForms[J].TWords) do
          TV.Items.AddChild(lTransNode, 'Translation: ' + Languages[I].TForms[J].TWords[K].TranslatedString)
      end;
    end;
  end;
  // Alle Knoten öffnen
  TV.FullExpand;
end;
Kann mir mal jemand sagen was falsch ist?

Leonard 16. Aug 2006 08:23

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Zitat:

Zitat von Mackhack
Delphi-Quellcode:
procedure TfoFrmMain.ShowLanguagesInTreeView;
var
  I, J, K, L: Integer;
  lLanguageNode, lTFormNode, lTransNode: TTreeNode;
begin
  TV.Items.Clear;
  for I := Low(Languages) to High(Languages) do
  begin
    lLanguageNode := TV.Items.Add(nil, 'Sprache: ' + Languages[I].FLanguage);
    for J := Low(Languages) to High(Languages[I].TForms) do
    begin
      lTFormNode := TV.Items.AddChild(lLanguageNode, 'Form: ' + Languages[I].TForms[J].FormName);
      for K := Low(Languages) to High(Languages[I].TForms[J].TWords) do
      begin
        lTransNode := TV.Items.AddChild(lTFormNode, 'ObjektName: ' + Languages[I].TForms[J].TWords[K].ObjectName);
        for L := Low(Languages) to High(Languages[I].TForms[J].TWords) do
          TV.Items.AddChild(lTransNode, 'Translation: ' + Languages[I].TForms[J].TWords[K].TranslatedString)
      end;
    end;
  end;
  // Alle Knoten öffnen
  TV.FullExpand;
end;
Kann mir mal jemand sagen was falsch ist?

Hi,

Wenn ich das richtig verstehe, dann müsstest du die Schleifen für J und K ändern.

Delphi-Quellcode:
    for J := Low(Languages[I].TForms) to High(Languages[I].TForms) do
      ...
      for K := Low(Languages[I].TForms[J].TWords) to High(Languages[I].TForms[J].TWords) do
Mit der Schleife L das sieht mir auch ein wenig komisch aus, aber ohne die genauen Datentypen, wäre alles nur Vermutung.

mfg
Tobias

Mackhack 17. Aug 2006 03:03

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

und hier ist sie schon:

Delphi-Quellcode:
  TLangWord = class(TObject)
  private
    ObjectName: String;
    TranslatedString: String;
  end;
  TLangForm = class(TObject)
  private
    FormName: String;
    TWords: Array of TLangWord;
  end;
  TLanguage = class(TObject)
  private
    TForms: Array of TLangForm;
    FLanguage: String;
  end;
Was mir noch auffiel: Jedesmal wenn ich ein neues 'Objekt' hinzufuege und die Procedure ShowLanguagesInTreeView aufgerufen wird zum aktualisieren tritt das Problem auf. Hier nochmal ein neuer Screenshot der das ganz schoen deutlich macht. Zuerst hab ich ein Objekt im TreeView. Hervorragend. Genauso will ich das sehen. Dann speichere ich das 2. Objekt und dann hab ich im TreeView auf einmal 2 Translations von BtnLoad und 2 Translations von BtnSave. Genauso dann wenn ich das 3. Objekt speichere.

Ich hoffe das hilft. Ich weis hier nicht weiter.

marabu 17. Aug 2006 08:44

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
@Leonard:

Herzlich willkommen in der Delphi-PRAXiS. Die falschen Grenzen für die Laufvariablen sind ganz sicher zu bemängeln.


@Mackhack:

Mir scheint du hast deine Speicherstruktur etwas unglücklich gewählt. Nicht "Languages: array of TLanguage" sollte der Ausgangspunkt sein, sondern eher eine Forms-Kollektion:

Code:
- Form: MainForm
  - Control: SaveButton
      Deutsch: &Speichern
      Englisch: &Save
  - Control: UrlLabel
      Neutral: $URL
- Form: LoginForm
...
Freundliche Grüße vom marabu

Leonard 17. Aug 2006 11:21

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von marabu
@Leonard:

Herzlich willkommen in der Delphi-PRAXiS. Die falschen Grenzen für die Laufvariablen sind ganz sicher zu bemängeln.

@marabu:
Danke!

@Topic
Ich habe mit dem Hinweis von marabu über die geänderte Struktur mal ein kleines Beispiel erstellt, wie du die Daten auch verwalten könntest. Ich hoffe, dass das mit den TCollection und TCollectionItem alles so richtig ist.
Für die verschiedenen Sprachtypen (siehe Beispiel) gibts vielleicht Standards, die man dann nehmen sollte, aber auf die Schnelle gings erstmal so.

Was das Beispiel macht:

Im FormCreate wird ein Formular in die Struktur eingelesen (das Beispiel von marabu). Über die Taste "Anzeigen", wird immer die aktuell gespeicherte Struktur im TreeView dargestellt. Mit der Taste "LoginForm" kannst du ein Beispielformular in die Struktur einfügen, welches die Übersetzung für 2 Tasten beinhaltet. Mit der 3. Taste "Form +" werden Daten abgefragt, die dann eingefügt werden, musst du einfach mal probieren.

Wegen der Dateigrösse habe ich mal nur die dfm und pas Datei gepackt angehängt.

Ich hoffe, das hilft weiter...

mfg Leonard

Mackhack 17. Aug 2006 14:49

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Zitat:

Zitat von marabu
@Leonard:

Herzlich willkommen in der Delphi-PRAXiS. Die falschen Grenzen für die Laufvariablen sind ganz sicher zu bemängeln.


@Mackhack:

Mir scheint du hast deine Speicherstruktur etwas unglücklich gewählt. Nicht "Languages: array of TLanguage" sollte der Ausgangspunkt sein, sondern eher eine Forms-Kollektion:

Code:
- Form: MainForm
  - Control: SaveButton
      Deutsch: &Speichern
      Englisch: &Save
  - Control: UrlLabel
      Neutral: $URL
- Form: LoginForm
...
Freundliche Grüße vom marabu

Hallo marabu,

vielen Dank fuer deinen Hinweis. Weist du auch warum dieser Effekt bei mir auftritt den ich im Screenshot dargestellt habe? Denn auch mit geaenderter Struktur wuerde ich ja wieder diesen "Gruscht" doch angezeigt bekommen.

Leonard 17. Aug 2006 15:36

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Zitat:

Zitat von Mackhack
Hallo marabu,

vielen Dank fuer deinen Hinweis. Weist du auch warum dieser Effekt bei mir auftritt den ich im Screenshot dargestellt habe? Denn auch mit geaenderter Struktur wuerde ich ja wieder diesen "Gruscht" doch angezeigt bekommen.

Ich bin zwar nicht direkt angesprochen, melde mich aber trotzdem nocheinmal. Mackhack, könntest du bitte mal das Stückchen Quelltext schreiben, in dem du die neuen Objekte hinzufügst? Ich habe irgendwie die Vermutung, dass das Problem dort liegt.

mfg Leonard

Mackhack 18. Aug 2006 02:05

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Hi Leo..

nein tut es nicht. Denn wenn du dir die xml file im Browser anguckst ist alles wie es sein soll! Es muss in der Show...-Procedure liegen! Denn die wird immer aufgerufen nachdem ich den Hinzufuegen Button gedrueckt habe. Mit diesem Button wird noch nichts in die File geschrieben sondern nur in die Arrays!

Leonard 18. Aug 2006 08:39

Re: Problem mit xml File auslesen und in TTreeView anzeigen
 
Zitat:

Zitat von Mackhack
Hi Leo..

nein tut es nicht. Denn wenn du dir die xml file im Browser anguckst ist alles wie es sein soll! Es muss in der Show...-Procedure liegen! Denn die wird immer aufgerufen nachdem ich den Hinzufuegen Button gedrueckt habe. Mit diesem Button wird noch nichts in die File geschrieben sondern nur in die Arrays!

Hallo,

Wenn mit dem Button noch nichts ins File geschrieben wird, dann bringt auch das anschauen im Browser nicht viel, denke ich. Die procedure TfoFrmMain.ShowLanguagesInTreeView macht nichts weiter, als die Felder zu durchlaufen (auch wenn bei der 1. Version die Grenzen nicht stimmten). Also sieht es mit dem was du gezeigt hast so aus, dass die Werte einfach mehrfach in den Feldern stehen.

mfg Leonard


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 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 by Thomas Breitkreuz