TRichEdit: Nur einen Teil neuzeichnen
-
Hi!
Durch folgende Zeile wird bei mir immer die ganze RichEdit neugezeichnet:
SendMessage(RichEdit1->Handle, WM_SETREDRAW, LPARAM(true), 0);(Ja, ich möchte es manuell machen an manchen stellen
)
Ist es auch möglich das nur ein bestimmter Teil der RichEdit neugezeichnet wird? AB zeichen BIS zeichen oder alles was zwischen x,y und x,y liegt?
MfG
Benjamin
-
InvalidateRect(Richedit->Handle,TRect(10,10,50,50),false);
-
Hmm~
So ganz funktioniert das noch nicht. In meiner Funktion setze ich zunächst WM_SETREDRAW auf FALSE für mein RichEdit. Nach meiner Schleife (Die ziemlich viel Änderungen macht, deswegen SETREDRAW auf FALSE wird es wieder auf TRUE gesetzt. Lasse ich das auf TRUE setzen weg wird das RichEdit nie neu gezeichnet.
Egal ob die InvalidateRect Funktion dabeisteht oder nicht...int EventMask = SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, 0); SendMessage(RichEdit1->Handle, WM_SETREDRAW, LPARAM(false), 0); [...] SendMessage(RichEdit1->Handle, WM_SETREDRAW, LPARAM(true), 0); InvalidateRect(RichEdit1->Handle, NULL, true); //Egal ob mit RECT oder nicht. SendMessage(RichEdit1->Handle, EM_SETEVENTMASK, 0, EventMask);
-
_ProfEich schrieb:
Hmm~
Lasse ich das auf TRUE setzen weg wird das RichEdit nie neu gezeichnet.
Egal ob die InvalidateRect Funktion dabeisteht oder nicht...Weil wahrscheinlich WM_SETREDRAW ein Parameter initialisiert, der im WM_PAINT- Teil abgefragt wird. Wodurch das Neuzeichnen verhindert wird. Ist ja auch Sinn der Sache. Du möchtest ja mit WM_SETREDRAW das Zeichnen verhindern. InvalidateRect erklärt einen Bereich der Oberfläche als ungültig. Wenn die Paint- Methoden dann aber nicht darauf reagieren, weil du mit WM_SETREDRAW dieses verhinderst, wird auch nicht neu gezeichnet. So spielt das Leben