首页  编辑  

RichEdit的同步滚动

Tags: /超级猛料/VCL/Memo&Edit&Richedit/   Date Created:

RichEdit的同步滚动

...synchronize two RichEdit by scrolling?

Author: Bruno  

//...

 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;