Mega Code Archive

 
Categories / Delphi / Examples
 

How to synchronize two RichEdit by scrolling

Title: How to synchronize two RichEdit by scrolling //... private PRichEdWndProc, POldWndProc: Pointer; procedure RichEdWndProc(var Msg: TMessage); //... procedure TForm1.FormCreate(Sender: TObject); begin PRichEdWndProc := MakeObjectInstance(RichEdWndProc); POldWndProc := Pointer(SetWindowLong(RichEdit1.Handle, GWL_WNDPROC, Integer(PRichEdWndProc))); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if Assigned(PRichEdWndProc) then begin SetWindowLong(RichEdit1.Handle, GWL_WNDPROC, Integer(POldWndProc)); FreeObjectInstance(PRichEdWndProc); end; end; procedure TForm1.RichEdWndProc(var Msg: TMessage); begin Msg.Result := CallWindowProc(POldWndProc, RichEdit1.Handle, Msg.Msg, Msg.wParam, Msg.lParam); if (Msg.Msg = WM_VSCROLL) and (LOWORD(Msg.wParam) = SB_THUMBTRACK) then begin Label1.Caption := 'Pos is ' + IntToStr(HIWORD(Msg.wParam)); RichEdit2.Perform(Msg.Msg, Msg.wParam, Msg.lParam); SetScrollPos(RichEdit2.Handle, SB_VERT, HIWORD(Msg.wParam), True); end; end;