Показать сообщение отдельно
  #3  
Старый 16.02.2018, 15:29
_anger _anger вне форума
Прохожий
 
Регистрация: 16.02.2018
Сообщения: 3
Версия Delphi: Delphi 2010
Репутация: 10
По умолчанию

Спасибо за помощь, коллега, но почему-то у меня ваш пример не срабатывает. Компилится без ошибок, но на нажатия стрелок, да и вообще любых кнопок на клавиатуре, никак не реагирует((
Я решил использовать подмену оконной процедуры у ScrollBox1:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    OldScrollBoxWinProc: TWndMethod;
    procedure NewScrollBoxWinProc(var Message: TMessage);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ScrollBox1.VertScrollBar.Range := 1000;
  OldScrollBoxWinProc := ScrollBox1.WindowProc;
  ScrollBox1.WindowProc := NewScrollBoxWinProc;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_UP:
      ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position - 10;
    VK_DOWN:
      ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position + 10;
  end;
end;

procedure TForm1.NewScrollBoxWinProc(var Message: TMessage);
begin
  if Message.Msg = WM_GETDLGCODE then
    Message.Result := DLGC_WANTARROWS
  else OldScrollBoxWinProc(Message);
end;

end.


Идея подсмотрена здесь

Все больше склоняюсь к тому, что в хелперах действительно нельзя обработчики сообщений добавлять. Много нехорошего про них прочитал и для себя уже решил ими не пользоваться. Но докопаться до истины все-таки хочется - поэтому оставлю пока вопрос открытым.
Ответить с цитированием