Hallo,
seit einer kleinen Ewigkeit such ich nach einem Weg, das Mauslaufrad in einer von TImage abgeleiteten Komponente verwenden zu können. Hiermit versuch ich in diesem Forum mein Glück in einem zweiten Anlauf. Bei meinem ersten Versuch erhielt ich viele gute Tipps, aber noch keinen Durchbruch. Vielleicht kann mir ja doch noch jemand helfen?! Bisher bin ich folgende zwei Wege gegangen:
- Ich versuchte das Ereignis durch überschreiben der DoMouseWheel-Funktion auszulösen, die meine Komponente von TImage und diese weiter von TControl geerbt haben sollte.
- Ich versuchte das Ereignis durch die Windows-Message WM_MOUSEWHEEL auszulösen
Beim Überschreiben der DoMouseWheel-Funktion passiert beim MousWheelen überhaupt nix.
Beim WM_MOUSEWHEEL-Messagen passiert schon etwas, aber nicht das richtige: das Ereignis wird nur ausgelöst, wenn ich mit der Maus an einer Stelle bin, an der sich meine abgeleitete Komponente befinden
würde, wenn das Form-Fenster auf dem sie sitzt, im Vollbildmodus wäre und keinen Titelbalken hätte, wenn ich das Fenster aber verkleinere und verschiebe, dann reagiert das Mausrad, wenn ich beispielweise mit der Maus nichteinmal über dem Formularfester bin. Undsoweiterundsofortundundunduffichbinamende
Beim Überschreiben der Click-Methode gibt es keine Probleme. Aber versucht es mal selbst aus, unten ist der vollständige SourceCode zum kopieren ...
Damit sich ein ExpertenSuperProfi meiner ohne viel Mühe annehmen kann hier meine komplette Komponente Versuch 1:
Delphi-Quellcode:
unit MZBlatt_TEST1;
interface
uses
Classes, ExtCtrls, WinTypes, Dialogs, Controls, Messages;
type
TZeichenBlatt_TEST1 =
class(TImage)
private
protected
function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean;
override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;
constructor Create(aOwner: TComponent);
override;
published
property OnMouseWheel;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Test', [TZeichenBlatt_TEST1]);
end;
constructor TZeichenBlatt_TEST1.Create(aOwner: TComponent);
begin
inherited create(aOwner);
end;
procedure TZeichenBlatt_TEST1.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
ShowMessage('
Funzt gut: MoiseleKlickGehtSupertoll');
end;
function TZeichenBlatt_TEST1.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean;
begin
ShowMessage('
Nix tut sich Vorher: DräDichDräDichRäädchen');
Result :=
inherited DoMouseWheel(Shift, WheelDelta, MousePos);
ShowMessage('
Nix tut sich Nacher: HasteDichGutGeräätMeinRäädchen');
end;
end.
Und hier meine komplette Komponente Versuch 2:
Delphi-Quellcode:
unit MZBlatt_TEST1;
interface
uses
Classes, ExtCtrls, WinTypes, Dialogs, Controls, Messages;
type
TZeichenBlatt_TEST1 =
class(TImage)
private
protected
procedure WMMausli(
var Message: TWMMouseWheel);
message WM_MouseWheel;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;
constructor Create(aOwner: TComponent);
override;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Test', [TZeichenBlatt_TEST1]);
end;
constructor TZeichenBlatt_TEST1.Create(aOwner: TComponent);
begin
inherited create(aOwner);
end;
procedure TZeichenBlatt_Test1.WMMausli(
var Message: TWMMouseWheel);
begin
ShowMessage('
Mäuli an der faschen Stelle: DräDichDräDichRäädchen');
end;
procedure TZeichenBlatt_TEST1.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
ShowMessage('
Funzt guuut: MoiseleKlickGehtSupertoll');
end;
end.
Ich bin mit meinem Wissen am Ende.
Freu mich über jeden Tipp!
Schneck