Как получать события скроллинга в Memo

interface

uses
    WinAPI.Messages
   ;

type
  // Используем этот трюк, чтобы получить доступ к protected методам TControl
  TMyControl = class(TControl);

  TTestAreaMain = class(TForm)
                    Memo3: TMemo;
                    procedure FormCreate(Sender: TObject);
                    ...
                  private
                    // Наш собственный обработчик событий
                    procedure ScrollHandler(var Message: TMessage);
                  end;

implementation

procedure TTestAreaMain.FormCreate(Sender: TObject);
begin
  // Заменяем стандартный обработчик TControl.WndProc на наш.
  Memo3.WindowProc := ScrollHandler;
end;


procedure TTestAreaMain.ScrollHandler(var Message: TMessage);
begin
  // Если событие - скроллинг...
  if ((Message.Msg = WM_VSCROLL) or (Message.Msg = WM_HSCROLL))
     // и можно реагировать только один раз, когда скроллинг завершился,
     and (TWMVScroll(Message).ScrollCode = SB_ENDSCROLL)   
  then begin
         // поделать то, ради чего всё и затевалось.
       end;
  // вызвать исходный обработчик для корректного завершения обработки события.
  TMyControl(Memo3).WndProc(Message);
end;

Метки: