Scrollbalken Anzeigefehler, neuzeichnen?



  • Hallo, hier bin ich mal wieder.

    Ich habe ein Problem mit den Scrollbalken eines RichEdits.
    Wenn ich von einer StringGrid in der RichEdit Zeichen ersetze und einfügen lassen, verändert sich das Scrollbalken.

    http://www.imgbox.de/?img=m2405a58.png

    Also, normalerweise sollte es ja so aussehen:

    http://www.imgbox.de/?img=g1652e58.png

    Ich habe ein AnsiString welches von ein paar AnsiString zusammengefügt wurde und dann markiere ich mit SelStart und SelLength den Bereich wo der AnsiString eingefügt werden soll.

    Naja, Code lohnt sich nicht wirklich... 😉

    richedit->SelStart = gefunden;
            richedit->SelLength = word.Length();
            richedit->SelText = wordedit;
    

    Sobald er damit fertig ist, tritt dieser Anzeigefehler auf. Wenn ich den Scrollbalken bewege, wird er neu gezeichnet und sieht wieder normal aus. Aber die Buttons links und rechts muss ich danach auch nochmal anklicken damit sie wieder normal aussehen.
    Deshalb frage ich euch, ob ihr vielleicht wisst, ob man den Scrollbalken neu zeichnen lassen kann. Oder ob ihr eine andere Idee habt?
    Sogesehen könnte ich die Scollbalken danach einfach etwas bewegen lassen, das fände ich jedoch nicht so toll...
    Und ob sich das Problem dadruch lösen lässt? 😕

    Edit: Nutze Borland C++ Builder 6...



  • Versuchs mal mit richedit->Update();



  • Hmm... funktioniert nicht. Auch wenn ich das bei der ganzen Form anwende, zeigt das keine Wirkung. 😞
    Hab auch Refresh bzw. Repaint (Refresh ruft ja Repaint auf) versucht, geht auch nicht.

    Jedoch wenn ich das Programm nicht angezeigt wird und dann wieder angezeigt wird (minimieren dann wieder aufrufen oder anderes Programm wählen und wieder mein Programm wählen) ist diesr Anzeigefehler weg.

    _____________

    So, während des schreibens von den Beitrag habe ich auf deinen Vorschlag aufbauend noch ein bisschen rumprobiert. 😃
    Ich erstelle ja eine Form um von dort den Benutzer die AnsiStrings auswählen zu lassen. Diese Form ruft eine Funktion in der Ursprungsform auf, in dieser wird auch fokusiert. Da ich die andere Form nicht schließe sondern direkt die RichEdit fokussiere, habe ich diesen Anzeigefehler.

    Das Problem habe ich nun gelöst, wenn ich die Form vorher schließe. 🙂

    Da die Funktion ja auch ohne diese Extra Form angewandt werden kann, möchte ich in der Funktion erst prüfen ob sie Aktiv ist:

    if (Form2->Active == true)
                   Form2->btnBeenden(this); //führt den Button btnBeenden in Form2 aus, welcher eine StringGrid leert und die Form2 schließt.
    

    Wenns zutrifft wird sie beendet und dadurch habe ich diesen Fehler nicht mehr. Die Fokussierung habe ich auch entfernt da sie unnötig war...

    Danke Smitty 🙂



  • Anstelle des Schliessens sollte auch folgedes funktionieren:

    richedit->Visible = false;
    richedit->Visible = true;
    

    grüssle 🙂



  • Da ja die Form2 sowieso geschlossen werden soll ist das der richtige Weg, anstatt sie nur zu "vergraben". Durch das "verstecken" und wieder anzeigen der richedit würde ich die Form2 wahrscheinlich nur richtig überdecken ohne diesen Anzeigefehler zu haben.



  • TRichEdit::Invalidate sollte das Neuzeichnen erzwingen.


Anmelden zum Antworten