Aus Datei Editfelder füllen



  • sorry für das generve!

    aber habe jetzt ein kleines Problem 😞

    ich hab das Speichern mal mit einer ComboBox1->ItemIndex ausprobiert das klappt.

    aber wen ich das jetzt so schreibe,

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    Form2->ComboBox1->ItemIndex=list->Strings[0];
    delete list;
    

    bringt er den typischen fehler

    [C++ Fehler] Unit2.cpp(2830): E2034 Konvertierung von 'AnsiString' nach 'int' nicht möglich
    

    hab mir am anfang nicht gedacht das ich das benutzen kann, da es aber jetzt mit dem speicher des ItemIndex geht, muss ich es nicht erst umsetzen in ein Editfeld 😉

    nur wie kann ich den Int werte in nen string umwandeln, gibts da ne möglichkeit alle die im Button1 vorhandenen Int Variabeln in String umzuwandeln?

    THX



  • siehe in der Hilfe zu
    IntToStr
    StrToInt
    AnsiString::ToInt



  • Hallo

    dein Ansatz ist schon richtig, wie du AnsiString nach umwandelst steht in der BCB-FAQ hier im Forum.

    /Edit : Braunstein , wir scheinen beide wohl immer die Antworten uns gegenseitig wegnehmen wollen 😉

    bis bald
    akari



  • jaja schon gut,

    ich hau mir ja schon auf den hinterkopf 😉

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    ComboBox1->ItemIndex= StrToInt(list->Strings[0]);
    

    aber ich hab na ne menge ComboBoxen und Checkboxen mit State 😉

    CheckBox1->State=StrToInt(list->Strings[1]);
    

    ah zu früh gefreut 😞
    das mit der CheckBox geht doch nicht er bringt mir ein fehler nicht im compiler sondern erst wen ich den button laden drücke irgendwas im debuger aber frag mich mal wie ich das verstehen soll !?!? HILFE 😕



  • hawkdz schrieb:

    aber frag mich mal wie ich das verstehen soll !?!? HILFE 😕

    Indem Du erst einmal die C++-Grundlagen lernst?



  • ja hast du vollkommen recht @ joe_m.

    aber diese Festestellung hilft auch nicht wirklich weiter 😞
    aber danke das du mich so freundlich dran erinnerst!

    naja zum problem ich glaube ich muss ein memofeld auch mit den eizelnen strings aus und eingeben bzw laden.

    kann es sein da er in den zeilen durcheinander kommmt den mit einem einzelnen CheckBox->State kommt er klar?

    danke für die lernhilfe an alle 😉



  • Hallo

    oder indem du die betreffende Fehlermeldung hier mal postest?

    Ich vermute mal das in der ersten zeile der Datei eben keine reine Ganzzahl steht.

    /Edit : Außerdem weiß ich nicht wie du plötzlihc von ComboBox auf CheckBox kommst, und warum du CheckBox->State nimmst und nicht CheckBox->Checked

    bis bald
    akari



  • Ich hab mir das mal noch mal genauer angeschaut,

    es sieht halt so aus, anhand dieses Beispiels:
    speichern:

    TStringList *list = new TStringList();
    list->Add(Memo1->Text);
    list->Add(CheckBox1->State);
    delete list;
    

    laden:

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    Memo1->Text=list->Strings[46];
    CheckBox1->State=StrToInt(list->Strings[3]);
    

    wenn im Memofeld, 2 Zeilen stehen, kann es glaub ich ja so nicht gehen.
    wie akari schon ein paar antworten vorher gesagt hat, daß die Zeilen in der Datei übereinstimmen müssen.

    also denke ich mal das ich das Memofeld auch einzeln in die Datei speichern muss?! Die eizelnen Strings mein ich

    ich habe das Memofeld auf 5lines beschränkt und wenn ich jetzt alle 5 in die Datei schreibe und auch immer alle 5 auslesen lasse, das es egal sein wird ob sie alle befüllt worden sind oder nicht?!



  • Hallo

    ich habe das Memofeld auf 5lines beschränkt

    Aha, und wie? 😕
    und fällt dir dazu im Vergleich hierzu etwas auf?

    Memo1->Text=list->Strings[46];
    

    Wenn das kein Schreibfehler ist, hast du nicht wirklich begriffen was die Klammern machen.

    bis bald
    akari



  • @hawkdz
    Alles was mehr als eine Zeile bringen kann (Memo) solltest du der Einfachheit halber lieber in eine eigene Datei speichern. TMemo::Lines ist ja schon vom Typ TStrings und kann ja so direkt geschrieben und gelesen werden.



  • @akari

    ja das mein ich ja mit dem fehler, daß wen im memofeld 2 zeilen stehen das beim laden der datei, nur die zeile [46] ausgelesen wird.

    aber ich brauche ja auch dann die 47 oder....

    ja das mit einer weiteren datei ist aber nicht erwünscht, den beim laden möchte man ja nicht 20verschiedene dateien anklicken.

    ich mach mir mal die arbeit und versuche es jetzt mit einzelausgabe des memofeldes.

    ich habe es wie gesagt mit einer if abfrage auf 5 beschränktes können nur maximal 5 lines drinstehen, wenn ich jetzt nur 2 stehen habe hoffe ich das die anderen 3 nur als eine leere zeile gespeichert werden und beim laden auch nur als eine leere linestring eingefügt werden.

    wie gesagt hoffe daß es so klappt, wen ihr noch ein tipp habt were super!
    denn ch weis das die fragen die ich hier stelle manchen auf den geistgehen!
    aber jeder hat man mal klein angefangen 😉

    BIGTHX



  • Du könntest ja bei jedem memofeld die Zeilenanzahl mit abspeichern. Eine Alternative wäre auch statt TStrings::SaveToFile ein eigenes Format (mit streams oder so) oder TIniFile zu Speichern und Laden zu verwenden.



  • nunja so geht das schon,

    speichern:

    TStringList *list = new TStringList();
    list->Add(Memo1->Lines->Strings[0]);
    list->Add(Memo1->Lines->Strings[1]);
    list->Add(Memo1->Lines->Strings[2]);
    list->Add(Memo1->Lines->Strings[3]);
    list->Add(Memo1->Lines->Strings[4]);
    .
    .
    .
    
    list->SaveToFile("c:\\test.txt");
    delete list;
    

    laden:

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    Memo1->Lines->Add(list->Strings[46]);
    Memo1->Lines->Add(list->Strings[47]);
    Memo1->Lines->Add(list->Strings[48]);
    Memo1->Lines->Add(list->Strings[49]);
    Memo1->Lines->Add(list->Strings[50]);
    .
    .
    .
    

    nur das jetzt die leeren strings im memofeld stören 😞
    wenn man jetzt noch eine zeile hinzufügen möchte dann macht er eben bei der line 6weiter und 3-5 sind leer 😞

    gibts vielleicht eine möglichkeit ein memofeld zu prüfen und alle nicht befüllten lines->Strings zu löschen?



  • Was spricht denn gegen sowas

    TStringList *list = new TStringList();
    list->Add(IntToStr(Memo1->Lines->Count)); // Anzahl ablegen
    list->AddStrings(Memo1->Lines); // gesamtes Memo ablegen
    
    .
    .
    .
    
    list->SaveToFile("c:\\test.txt");
    delete list;
    

    dann einlesen

    TStringList *list = new TStringList();
    list->LoadFromFile("c:\\test.txt");
    int count = list->Strings[0].ToInt(); // Anzahl wieder einlesen
    for( int i=0; i<count;++i)
       Memo1->Lines->Add(list->Strings[i+1]);
    


  • hallo noch mal,

    versuche jetzt nach dem laden der datei, die lines im memofeld zu prüfen

    if (Memo1->Lines->Strings[9] == "");
    {
     Memo1->Lines->Delete(-1);
     }
    

    das funktz aber nicht, warum?

    @Braunstein
    ja sieht schon verständlich aus, nur ich habe insgasamt 12memofelder in denen bis zu 5 eiträge(lines) stehen können.

    ich muss ja dan sicher stellen, daß die cout abfrage immer am anfang in der datei steht, die ja dann auch zu dem passenden memofeld genommen wird hmmm....

    ich werd aufjedenfall mal probieren, mal schauen ob ich das hinbekomme THX Braunstein

    BIGTHX



  • wie müsste den der code aussehen um nur eine line im memofeld zu löschen?



  • Hallo

    bitte schau doch wenigstens mal in die BCB-Hilfe. Oder erwartest du wirklich, das wir dir die ganze Hilfe vorlesen?

    Memo1->Lines->Delete(0); // erste Zeile löschen
    

    Jansen verweißt da gerne auf das Texteditor-Beispiel, das jeder Anfänger durcharbeioten soll.

    bis bald
    akari


Anmelden zum Antworten