Daten aus 8 Forms zusasammen in eine Datei speichern?



  • Ja, das passt schon so 😉 das ist ein Tool um D&D Charaktere zu managen. Zumindest soll es eins werden

    Könntest du mir evtl ein Beispiel nennen? Wie ich das dann umsetzen kann.. ich bin noch nicht lange dabei und finde mich auch in der Hilfe des Builders nicht wirklich zurecht (Siehe Thread: AnsiString to Float) habs trotz stundenlanger Suche in der Hilfe nicht finden können.

    Ich habe z.B. Form1 darin sind, sagen wir mal Die Felder Char_Name, Level und EPs.
    Die Ordnung in der Datei wollte ich schon so machen, wie du sagtest. Also z.B.
    [Charakterinfos]
    Char_Name=
    Level=
    EPs=

    usw...



  • Ausnahmsweise, weil die Suchfunktion nicht funktioniert.

    SaveDialog1->DefaultExt = "ddc";
      SaveDialog1->Filter = "DDC-Dateien (*.ddc)|*.ddc|Alle Dateien (*.*)|*.*";
      if (SaveDialog1->Execute())
      {
        TIniFile *ini = new TIniFile(SaveDialog1->FileName);
        for (int i = 0; i < Panel1->ControlCount; i++)
        {
          TEdit *ed = dynamic_cast<TEdit*>(Panel1->Controls[i]);
          if (ed)
            ini->WriteString(Form1->Name, ed->Name, ed->Text);
        }
        delete ini;
      }
    

    Zum Laden dann das gleiche mit OpenDialog und ReadString.

    Zum GUI-Design hätte ich durchaus noch ein paar Vorschläge, die das weit besser passen lassen würden. Falls du daran interessiert sein solltest dann frage aber bitte in einem neuen Thread nach, da das ja nichts mit dem eigentlichen Thema hier zu tun hat.



  • ok, vielleicht stell ich mich einfach zu dumm an... aber wenn ich den Code, den du hier reingeschrieben hast übernehme bekomme ich eigentlich nur Fehlermeldungen... ich habe ja noch kein SaveDialog1. Ich weis auch nicht, wie ich den in meinen Form einbinden sollte... 😞 Denn einen Button in der Auswahlliste habe ich dafür nicht gefunden.. und der Aktionsmanager kann irgendwie mein MainMenu1 nicht nutzen. Also muss ich das irgendwie über den Code regeln... aber Danke für das schnelle Posten, aber ich kann es irgendwie nicht umsetzen. sorry

    p.hackert



  • Die Dialoge finden sich im Reiter 'Dialoge'.
    Duh! 😉

    Und um der nächsten Frage vorzubeugen: für TIniFile musst du inifiles.hpp inkludieren.



  • war ich wohl wirklich zu dumm zum schaun... naja, das speichern funktioniert... das öffnen leider noch nicht. Hab nen OpenDialog1 Objekt angelegt, den Code vom Save ans Open angepasst, aber da tut sich nichts.... muss da evtl noch ne Zeile rein, die dann das gelesene auch in die TEdits schreibt, oder sollte das so laufen? ich werde noch ein wenig herumprobieren...

    also nochmals danke 😉

    p.hackert



  • Jansen schrieb:

    Zum Laden dann das gleiche mit [...] ReadString.



  • Das habe ich doch gemacht. Wie oben geschrieben, habe ich den OpenDialog Code so angepasst, wie du es geschreiben hast. Jedoch bleiben sämtliche Felder leer.
    Mein geänderter Code:

    OpenDialog1->DefaultExt = "ddc";
    OpenDialog1->Filter = "D&D Charakter Datei (*.ddc)|*.ddc|Alle Dateien (*.*)|*.*";
    if(OpenDialog1->Execute())
    {
    TIniFile *ini = new TIniFile(OpenDIalog1->FileName);
    for (int i=0;i<Panel1->ControlCount; i++)
    {
      TEdit *ed = dynamic_cast<TEdit*>(Panel1->Controls[i]);
      if (ed)
      {ini->ReadString(Panel1->Name, ed->Name, ed->Text);}
    }
    delete ini;
    }
    

    So schaut das bei mir aus, aber wie gesagt, die Felder bleiben leer. 😞



  • Für einen Blick in die Hilfe (zu ReadString) hat es nicht gereicht?

    [cpp]ed->Text = ini->ReadString(Panel1->Name, ed->Name, ed->Text);[/cpp]



  • ok, es gibt ne Hilfe zu ReadString.. allerdings hab ich die nicht so richtig verstanden. Ich danke dir nochmal sehr!

    bye und n8
    p.hackert



  • Hab zum Speichern generell noch mal eine Frage...
    Gibt es ein Maximum an Feldern, die man speichern kann?
    Ich bekomm nämlich jetzt eine Fehlermeldung, und das kurz bevor ich mit dem Tool fertig bin 😞
    Folgende Meldung kommt auf den Bildschirm (nur beim Speichern!)

    Zugriffsverletzung bei Adresse 77F4ABD6 in Modul 'ntdll.dll'. Schreiben von Adresse 00469069.

    wenn ich die Speicherfunktion der letzten beiden Panels entferne, kommt die Meldung nicht mehr. was mache ich falsch?



  • es gibt ein Maximum von 64kB bei ini Files.


  • Mod

    Hallo

    dafuer gibt es (wenn ich mich nicht irre) TMemIniFile

    MfG
    Klaus



  • Also, wenn das File 64k groß sein kann, verstehe ich die Fehlermeldung nicht, da mein File gerade mal 6k groß ist. Naja, ich habe das entsprechende Form nochmal abgeändert und die Speicherfunktion noch ein wenig abgeändert und jetzt läuft es prima 😉


Anmelden zum Antworten