| 
      ...synchronize two RichEdit by scrolling?
     | 
   
   
    | Autor: 
      Bruno     | 
   
  | [ Print tip 
] |   |   |   
 
 
 
//... 
  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; 
 
 
 
  
                       |