When scrolling, first update the new position of the control before
calling UpdateWindow().

diff --git a/dlls/riched20/editor.c b/dlls/riched20/editor.c
index fb38f63..888e597 100644
--- a/dlls/riched20/editor.c
+++ b/dlls/riched20/editor.c
@@ -1097,7 +1097,7 @@
   SCROLLINFO si;
   ME_TextEditor *editor = (ME_TextEditor *)GetWindowLongW(hWnd, 0);
   
-  TRACE("hWnd %p msg %d (%s) %08x %08lx\n",
+  TRACE("hWnd %p msg %04x (%s) %08x %08lx\n",
         hWnd, msg, get_msg_name(msg), wParam, lParam);
   
   switch(msg) {
@@ -1359,13 +1359,14 @@
     if (nPos<0)
       nPos = 0;
     if (nPos != editor->nScrollPosY) {
+      int dy = editor->nScrollPosY - nPos;
+      editor->nScrollPosY = nPos;
+      SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
       if (editor->bRedraw)
       {
-        ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL);
-        SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
+        ScrollWindow(hWnd, 0, dy, NULL, NULL);
         UpdateWindow(hWnd);
       }
-      editor->nScrollPosY = nPos;
     }
     return TRUE; /* Should return false if a single line richedit control */
   }
@@ -1849,13 +1850,14 @@
       break;
     }
     if (nPos != editor->nScrollPosY) {
+      int dy = editor->nScrollPosY - nPos;
+      editor->nScrollPosY = nPos;
+      SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
       if (editor->bRedraw)
       {
-        ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL);
-        SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
+        ScrollWindow(hWnd, 0, dy, NULL, NULL);
         UpdateWindow(hWnd);
       }
-      editor->nScrollPosY = nPos;
     }
     break;
   }
@@ -1872,13 +1874,14 @@
     if (nPos<0)
       nPos = 0;
     if (nPos != editor->nScrollPosY) {
+      int dy = editor->nScrollPosY - nPos;
+      editor->nScrollPosY = nPos;
+      SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
       if (editor->bRedraw)
       {
-        ScrollWindow(hWnd, 0, editor->nScrollPosY-nPos, NULL, NULL);
-        SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
+        ScrollWindow(hWnd, 0, dy, NULL, NULL);
         UpdateWindow(hWnd);
       }
-      editor->nScrollPosY = nPos;
     }
     break;
   }