2 Textfelder (Werte in Datei speichern und wieder einlesen)



  • Ich glaube ich schnall es einfach nicht. Die FStream Methode gefällt mir nicht wirklich, klappt aber eher als der erste Vorschlag. Ich möchte doch einfach nur die Werte aus den Textfeldern zeilenweise in eine Datei abspeichern und dann irgendwann wieder einlesen. Dabei soll natürlich jeder Wert auch wieder in das Feld geladen werden, in der es vorher stand. Ich verzweifle!!!



  • // Speichern
      TStringList *list = new TStringList();
      for (int i = 0; i < Form1->ControlCount; i++)
      {
        TEdit *tmp_edit = dynamic_cast<TEdit*>(Form1->Controls[i]);
        if (tmp_edit)
          list->Add(tmp_edit->Text);
      }
      list->SaveToFile("c:\\editlist.txt");
      delete list;
    
      // Laden
      TStringList *list = new TStringList();
      list->LoadFromFile("c:\\editlist.txt");
      for (int i = 0, j= 0; i < Form1->ControlCount; i++)
      {
        TEdit *tmp_edit = dynamic_cast<TEdit*>(Form1->Controls[i]);
        if (tmp_edit)
          tmp_edit->Text = list->Strings[j++];
      }
      delete list;
    

    Es werden alle Elemente auf der Form abgefragt, ob sie vom Typ TEdit sind. Wenn ja wird entsprechend der Text in die StringList geschrieben bzw. daraus gelesen.



  • Hi,
    is aber nicht so schwer, das mit dem ini-file war doch ein guter tip.

    schreiben:
    WritePrivateProfileString("Feldwerte", "Feld1",Edit1->Text.c_str(), "c:\\Werte.ini");

    lesen:
    char* buffer = new char[255];
    GetPrivateProfileString("Feldwerte", "Feld1", "", buffer, 255, "c:\\Werte.ini");
    Edit1->Text = String(buffer);
    delete [] buffer;

    das für alle deine text felder und alles is schön ordentlich und nachvollziebar, auch in der ini-datei 🙂



  • Danke, für den vorletzten Beitrag, unglaublich, mit so wenig Quelltext einwandfrei genau das, was ich wollte. Eine Frage bleibt jedoch: Wie speichere ich die Ini-Datei in demselben Verzeichnis, in dem auch die ausführbare *.exe liegt? Momentan speichert er alles unter "C:\\Eingaben.ini", wenn ich nur den Dateinamen eingebe, speichert er die Datei in den WinNT Ordner.



  • Über TApplication::ExeName und die verschiedenen ExtractFile...-Funktionen kannst du das Programmverzeichnis ermitteln. Nächstes Mal aber bitte die Suchfunktion benutzen.



  • Wenns doch nur so einfach wäre....er meckert, wenn ich schreibe:

    String FileName = ExtractFileName(Application->ExeName);
    WritePrivateProfileString("Feldwerte", "Feld1",Edit1->Text.c_str(), Filename;
    

    Es sei eine Konvertierung von AnsiString nach const char * nicht möglich!



  • Vergleich mal die Verwendung von Edit->Text und Filename, dann fällt dir hoffentlich etwas auf.

    Und reite nicht ständig auf den blöden API-Funktionen rum, dafür gibt's TIniFile! 😉



  • Soll ich mal ganz ehrlich sein? Da fällt mir nix auf. Würde jetzt gerne den Wert Filename gegen den Wert des Edit20 Feldes ersetzten, also

    WritePrivateProfileString(Edit20->Text, "Feld1",Edit1->Text.c_str(), "C:\\Eingaben.ini");
    

    Aber auch das geht nicht, da AnsiString nach const char irgendwie nicht möglich ist? Was ist da eigentlich der Unterschied und wie zum Himmel bekomme ich den Fehler weg? Immer wieder neue Probleme, wahnsinn, aber doch faszinierend...C halt! ;o)



  • Original erstellt von <unknown user>:
    Konvertierung von AnsiString nach const char * nicht möglich

    Siehe FAQ unter "AnsiString".



  • Original erstellt von <unknown user>:

    String FileName = ExtractFileName(Application->ExeName);
    WritePrivateProfileString("Feldwerte", "Feld1",Edit1->Text.c_str(), Filename;
    

    Hi,

    ExtractFileName ist wohl nicht richtig!
    Zwischen Filename und dem ; fehlt noch eine Klammer zu!
    Und wenn in Filename der Pfad (endl. Path) der *.exe steht´, was fehlt dann noch??? (ich meine ich nenne meine Datei auch nicht: "C:\\Windows\" 😃 )

    MFG

    Alexander Sulfrian


Anmelden zum Antworten