AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit xml File auslesen und in TTreeView anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit xml File auslesen und in TTreeView anzeigen

Ein Thema von Mackhack · begonnen am 16. Aug 2006 · letzter Beitrag vom 18. Aug 2006
Antwort Antwort
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#1

Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 16. Aug 2006, 00:13
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?
Miniaturansicht angehängter Grafiken
ttreeview_450.jpg  
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 16. Aug 2006, 07:23
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
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 17. Aug 2006, 02:03
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.
Miniaturansicht angehängter Grafiken
fehler_206.jpg  
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
marabu

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

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 17. Aug 2006, 07:44
@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
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 17. Aug 2006, 10:21
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
Angehängte Dateien
Dateityp: zip beispiel_133.zip (2,5 KB, 11x aufgerufen)
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 17. Aug 2006, 13:49
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.
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 17. Aug 2006, 14:36
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
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 18. Aug 2006, 01:05
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!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Leonard

Registriert seit: 12. Okt 2005
Ort: Lutherstadt Eisleben
64 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Problem mit xml File auslesen und in TTreeView anzeigen

  Alt 18. Aug 2006, 07:39
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
Tobias
  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 01:09 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