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



  • Hallo Leute, 😃

    ich versuche gerade in einem Text zu formatieren und über einen Button direkt in ein Eingabefeld (Auf Form1, ein RichEdit1 Feld, formatierter Text, eine Zeile Rot, Fett, die nächste schwarz, standard usw. ) schreiben und anzeigen zu lassen. Das ist mir auch gelungen. Nun möchte ich den Inhalt genau so wie er formatiert ist also Farbe und Schriftstärke in ein zweites RichEdit (Formular2 RichEdit2) Feld kopieren. Kann mir jeman Helfen?

    Ich kann zwar den Text übertragen mit

    "Form1->RichEdit2->Text = Form2->RichEdit1->Text; "

    jedoch geht jede Formatierung verloren. Das heißt also auch bei einer Eingabe in RichEdit1 soll die Änderung auch in RichEdit2 zwei übernommen werden und anderst herum. So das bei Wechsel des Formulars immer das gleiche in RichEdit1 und RichEdit2 Feld steht. 😮

    Speichere ich den Text in eine Datei und lade ihn dann neu funktioniert es nur teilweise. Beim ersten Mal wenn ein Text über den Button hinzugefügt wird geht das. Beim zweiten Mal ändert sich die komplette Formatierung des Textes der zuvor eingetragen wurde. Wenn ich dann noch manuell etwas in des RitchEdit2 Feld eintrage dann ändert sich die Farbe des kompletten Textes auch in die Farbe, die zu letzt unter Font (programmiert) angewählt war und mit dem Button geschrieben wurde. 😞

    Gut, ich bräuchte von euch die Lösungen für: 😮

    1.) Kopieren von RitchEdit1 nach RitchEdit2 (Formatierung soll bleiben)
    2.) Speichern und laden des Textey (Formatierung soll bleiben)
    3.) Eingabe manuell soll möglich sein (Formatierung soll bleiben)

    Also bitte helft mir. Weiß nicht mehr weiter. 😞

    Mfg Armi



  • Hallo

    1.) Kopieren von RitchEdit1 nach RitchEdit2 (Formatierung soll bleiben)

    In der Eigenschaft Text steht die RichText-Formatierung nicht, sondern nur der reine Text, also
    -Speichern von RichEdit1->Lines in einem Stream, RichEdit2->Lines dann von diesem Stream wieder laden!

    2.) Speichern und laden des Textey (Formatierung soll bleiben)
    3.) Eingabe manuell soll möglich sein (Formatierung soll bleiben)

    Wenn du RichEdit->Lines->SaveToFile() und RichEdit->LInes->LoadFromFile() nutzt, dann sollte das klappen!! Ansonsten zeig mal den Code, wie du die Formatierung änderst!

    Gruß,
    Robert



  • 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