Wen ich neben den Panel am Maus-Rad drehe, dann reagiert OnMouseWheel, im Panel nicht mehr.
Das Panel hat ein eigenes OnMouseWheel. Kann man dies umleiten, das dies auf das höher gelegene Fenster reagiert, in diesem Fall das Forrm.
Für Tasten gibt es für solche Fälle KeyPreview, wobei das beim Panel nicht gebraucht wird.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, types;
type
{ TForm1 }
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormClick(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Writeln('x:', x, ' Y:', y);
end;
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
Writeln(MousePos.y);
end;
procedure TForm1.FormClick(Sender: TObject);
begin
Writeln('Klick');
end;
end.
Ich will bei meinen OpenGL-Anwendung auf Maus-Ereignisse reagieren.
Das sieht dann so aus:
Code: Alles auswählen
OpenGLControl := TOpenGLControl.Create(Form);
with OpenGLControl do begin
Name := 'OpenGLControl';
Parent := Form;
Align := alClient;
end;