Thema: Delphi Bescheuertes Mausrad!

Einzelnen Beitrag anzeigen

Schneck

Registriert seit: 22. Jun 2004
18 Beiträge
 
Delphi 7 Personal
 
#1

Bescheuertes Mausrad!

  Alt 2. Jul 2004, 21:14
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
  Mit Zitat antworten Zitat