Delphi 7 - Обработка событий MouseWheel для встроенных фреймов в формах?
Привет, у меня есть форма с несколькими кадрами внутри.
Для некоторых кадров я хочу прокрутить содержимое (или хотя бы обработать событие mousewheel).
Я пробовал следующее:
Простое назначение обработчика события OnMouseWheel для каждого кадра
Переопределение события MouseWheel для родительской формы:
procedure TFmReview.MouseWheelHandler(var Message: TMessage);
var Control: TControl;
begin
Control := ControlAtPos(ScreenToClient(SmallPointToPoint(TWMMouseWheel(Message).Pos)), False, True);
if Assigned(Control) and (Control <> ActiveControl) then
begin
ShowMessage(Control.Name);
Message.Result := Control.Perform(CM_MOUSEWHEEL, Message.WParam, Message.LParam);
if Message.Result = 0 then
Control.DefaultHandler(Message);
end else inherited MouseWheelHandler(Message);
end;
К сожалению, оба не работают.
- В случае 1 событие никогда не запускается, однако запускается обработчик родительского колеса мыши.
- В случае 2 элемент управления, который получает фокус, является панелью, которая содержит кадр, в который я хочу отправить событие mousewheel.
Итак, проще говоря, как я могу направить событие mousewheel на самый верхний элемент управления, на котором находится курсор мыши (независимо от того, в каком кадре / родителе / форме и т. Д. Находится курсор)?
1 ответ
Отложить управление колесом мыши до TWinControl
над которым в данный момент находится курсор мыши, переопределите в основном кадре форму MouseWheelHandler
метод с использованием кода, подобного этому:
type
TMainForm = class(TForm)
private
procedure MouseWheelHandler(var AMessage: TMessage); override;
public
{ Public declarations }
end;
implementation
procedure TMainForm.MouseWheelHandler(var AMessage: TMessage);
var
Control: TWinControl;
begin
Control := FindVCLWindow(SmallPointToPoint(TWMMouseWheel(AMessage).Pos));
if Assigned(Control) then
begin
AMessage.Result := Control.Perform(CM_MOUSEWHEEL, AMessage.WParam,
AMessage.LParam);
if AMessage.Result = 0 then
Control.DefaultHandler(AMessage);
end
else
inherited MouseWheelHandler(AMessage);
end;