RichEdit1 und RitchEdit2 gleich Font ändert sich bei Speichern Warum???



  • Hi Rowisoft,

    Die Idee mit der Eigenschaft Lines und SaveToFile oder LoadFromFile habe ich schon doch genau das ist das Problem, trotzdem ändert sich dir Formatierung und die Farbe. Den Code habe ich mal hier, es ist eine komplette Funktion. 🙂

    char Trennung[150] = "---------------------------------------------------------------------------";
    char Leer[200] = "";
    char Kuerzel[200] = "Bearbeitet von: ";
    char Datum[200] = "Datum: ";
    char Lieferschein[100] = "Lieferschein: ";
    char BaNummer[200] = "BA - Nummer: ";
    char KommNummer[200] = "Komm.-Nr: ";
    char Bemerkung[200] = "Bemerkung: ";
    char Keine[200] = "Keine!!!";
    
    // Den Eintrag vorbereiten
    
    StrCat(Kuerzel,Form4->ComboBox2->Text.c_str());
    StrCat(Datum,Form4->Edit1->Text.c_str());
    StrCat(Lieferschein,Form4->Edit2->Text.c_str());
    StrCat(BaNummer,Form4->Edit3->Text.c_str());
    StrCat(KommNummer,Form4->Edit4->Text.c_str());
    
    // Den vorbereiteten Eintrag schreiben.
    Form4->RichEdit1->Lines->Add(Leer);
    
    // Überschriften für den Eingang
    if(Form4->RadioButton1->Checked)
      {
      Form4->RichEdit1->SelAttributes->Color = clBlue;
      Form4->RichEdit1->Lines->Add(Trennung);
    
      Form4->RichEdit1->SelAttributes->Color = clBlue;
      Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
      Form4->RichEdit1->SelAttributes->Height += 5;
      Form4->RichEdit1->Lines->Add("Tauschgerät vom Hersteller!!!");
      }
    
    // Informationen die immer eingetragen werden, wenn ein Ein/ oder Ausgang Vorgang erstellt werden soll
    
    Form4->RichEdit1->SelAttributes->Color = clBlack;
    
    Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
    Form4->RichEdit1->Lines->Add(Kuerzel);
    
    Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
    Form4->RichEdit1->Lines->Add(Datum);
    
    Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
    Form4->RichEdit1->Lines->Add(Lieferschein);
    
    Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
    Form4->RichEdit1->Lines->Add(BaNummer);
    
    Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
    Form4->RichEdit1->Lines->Add(KommNummer);
    
    Form4->RichEdit1->Lines->Add(Leer);
    
    Form4->RichEdit1->SelAttributes->Style = Form4->RichEdit1->SelAttributes->Style << fsBold;
    Form4->RichEdit1->Lines->Add(Bemerkung);
    
    Form4->RichEdit1->Lines->Add(Keine);
    
    if(Form4->RadioButton1->Checked)
      {
      Form4->RichEdit1->SelAttributes->Color = clBlue;
      Form4->RichEdit1->Lines->Add(Trennung);
      }
    
    Form4->RichEdit1->SelAttributes->Color = clBlack;
    Form4->RichEdit1->Lines->Add(Leer);
    
    // In Zwischenspeicher  unter "Sander History" speichern
    Form4->RichEdit1->Lines->SaveToFile("Test.rtf");
    
    // Von Zwischenspeicher unter "Sander History" laden
    Form4->RichEdit1->Clear();
    Form1->RichEdit1->Clear();
    Form4->RichEdit1->Lines->LoadFromFile("Test.rtf");
    Form1->RichEdit1->Lines->LoadFromFile("Test.rtf");
    Form4->RichEdit1->SetFocus();
    

    So ich weiß nicht was hier falsch sein könnte oder sehe ich vor lauter Wald den Baum nicht??? 🙄

    Wie genau meinst Du das mit dem Stream?
    Als Char oder als AnsiString Array?
    Kannst du mir ein Beispiel zeigen, wenn das Array dynamisch sein soll??? 😋

    Gut Ich hoffe jetzt kannst Du oder jemand anderer mir weiter helfen! :p

    Also bis dann ...



  • Hallo Leute was hab ich den beim posten falsch gemacht das er den Code einmal richtig anzeigt und dann ein Teil noch mal??? 😕 😕 Hääää????



  • Hallo,

    Habe ich dich richtig verstanden, dass du das ganze nur als Datei speicherst und wieder öffnest, weil du das kopieren möchtest? Das ist nicht schön!

    Probiere mal folgendes zum Kopieren:

    TMemoryStream *memStrm = new TMemoryStream();
    Form1->RichEdit1->Lines->SaveToStream(memStrm);
    memStrm->Position = 0;
    Form4->RichEdit1->Lines->LoadFromStream(memStrm);
    delete memStrm;
    

    vielleicht funktionierts damit ja...

    Gruß,
    Robert



  • Hallo Robert, 😉

    nein natürlich nicht deshalb habe ich ja nach der Lösung mit dem Stream gefragt. 😃

    Doch speichern muss ich den Inhalt des RitchEdit -Feldes irgandwann auch damit ich z.B. ein anderes RTF - Dokument bearbeiten kann (ist so eine Art Textverarbeitungsprogramm das ich gerade programmiere). 🙄

    Also das Problem bleibt trotzdem noch das gleiche. Ich probiere mal das Kopieren mit dem Stream das ist eine saubere Lösung, 👍 aber für das Speichern und Laden der RTF - Datei brauche ich dann doch noch deine oder eure Hilfe. 🤡

    Wer kann mir da weiter helfen??? Du Robert??? 😕



  • Hallo,

    ich kann dir dazu leider auch nur sagen, dass
    RichEdit1->Lines->SaveToFile(...);

    funktioniert. Am Speichern dürfte es also nicht liegen. Du änderst die Attribute immer mit SelAttributes? Kannst du dir sicher sein, dass der richtige Text markiert ist?

    tschüss
    Robert



  • Also, so lange PlainText des TRichEdit auf false steht, sollte die Formatierung erhalten bleiben. Zur Kontrolle kann man die abgespeicherte Datei in Word öffnen. Wenn's dort richtig ist, liegt irgendwo in Deinem Programm ein Fehler vor.



  • Hallo Robert, Joe_M,

    Also PlainText ist immer auf false. 😉
    Hab auch schon probiert vor dem Speichern und Lesen die Eigenschaft definitiv auf false zusetzten. 🙂
    Geht nicht. 😡

    Mit überprüfen im Word ist das gleiche. 😮 Was jetzt ??? 😕

    Hilfeee!!!! 😕 😕 😕

    MfG Arm-tec 😃



  • Bin´s noch mal.

    Mir ist eingefallen, ob es möglich ist, dass beim Ändern der Fonteinstellung des Textes der schon im RitchEdit - Feld ist vieleicht beeinflusst wird und seine Formatierung ändert.

    Wäre das möglich, wie kann ich das prüfen und wenn ja was kann ich dagegen tun. 😕

    Danke mal für eire Hilfe. Geht hier doch mehr als bei anderen Foren. 😃

    MfG Árm-Tec 😃



  • Hallo,

    Mit überprüfen im Word ist das gleiche.  Was jetzt ???
    

    Das heisst, dass dort der Text richtig formatiert dargestellt wird?

    Mir ist eingefallen, ob es möglich ist, dass beim Ändern der Fonteinstellung des Textes der schon im RitchEdit - Feld ist vieleicht beeinflusst wird und seine Formatierung ändert.
    

    Zeig doch mal, wie du den geladenen Text umformatierst?

    Danke mal für eire Hilfe. Geht hier doch mehr als bei anderen Foren.
    

    Schleimer! 😃

    Robert



  • Hallo Leute, 🙂

    hab glaub ich mein Problem gefunden. Schaut mal im Code bei dem Kommentaren, richtig??? 😮

    So wenig wie Form1->RichEdit1->Text = Form4->RichEdit1->Text; funktioniert 👎 , funktioniert es bei dem Fehler. 👎

    Muss das ganze natürlich noch richtig austesten. ➡

    Falls dass aber nicht mein Problem sein sollte gebe ich Rückinfo, dass ich weiter eure Hilfe brauche.
    Wenn euch noch was einfällt bitte eure Ideen weiter geben. 😉

    // Datei Oeffnen
    if (FileExists(ZuOeffnen))
      {
      HistExist = true;
      Form1->RichEdit1->Lines->LoadFromFile(ZuOeffnen);
      Form1->RichEdit1->SetFocus();
    
      int HistEndeForm1 = Form1->RichEdit1->Lines->Text.Length();
      Form1->RichEdit1->SelStart = HistEndeForm1;
      Form1->RichEdit1->Modified = false;
      Form1->Label7->Caption = Form1->OpenDialog1->FileName + ".RFT";
    
      /* 
         Hier war mein Problem  das kopieren mit den Lines hat halt nicht so geklapt wie ich dachte.
         Problem an der ganzan Sache war (ist) nur das dieser Teil der Code ganz irgendwoanderst steht 
         und dass ich diese Zeile ganz am Anfang mal eingefügt hatte als ich mir noch nicht klar war,
         wie ich den Text bearbeite.
      */
    
      //Form4->RichEdit1->Lines = Form1->RichEdit1->Lines; <-------- DAS WAR FALSCH  
      Form4->RichEdit1->Lines->LoadFromFile(ZuOeffnen); // <-------- DAS GEHT JETZT
    
      /* Werde aber die Sache mit dem Stream noch einbauen gefällt mir persönlich auch besse Robert ;-)) */
    
      int HistEndeForm4 = Form4->RichEdit1->Lines->Text.Length();
      Form4->RichEdit1->SelStart = HistEndeForm4 - 87;
      Form1->RichEdit1->SetFocus();
      return;
      }
    else
      {
      Application->MessageBox("Die Historie existiert nicht. Dadurch kann die Historie nicht abgespeichert oder im Eingabefeld angezeigt werden.\n\nBitte überprüfen sie ihre Eingabe. ", "Hinweis!!!", MB_OK);
      return;
      }
    

    Also wünsch euch noch was bis dann...

    Danke alle MfG ARM-Tec 😃



  • Hallo,

    ja - das scheint wohl wirklich das Problem gewesen zu sein!

    Form4->RichEdit1->Lines ist ein Zeiger, genauso wie Form1->RichEdit1->Lines;
    Du hast lediglich gesagt Form4->RichEdit1->Lines zeigt jetzt auf Form1->RichEdit1->Lines!
    Gefährlich!

    Nachhilfe unter: http://www.volkard.de/vcppkold/zeiger.html

    😉
    Robert


Anmelden zum Antworten