![]() |
Bescheuertes Mausrad!
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:
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 :kotz: 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:
Und hier meine komplette Komponente Versuch 2:
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.
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 |
Re: Bescheuertes Mausrad!
Hab grad einfach mal vesucht die Mousewheelmessage abzufangen und hat geklappt
Delphi-Quellcode:
type
TOwnImg = class(TImage) private procedure FOnMouseWheel(var AMsg: TWMMouseWheel); message WM_MOUSEWHEEL; end; [...] procedure TOwnImg.FOnMouseWheel(var AMsg: TWMMouseWheel); begin //das was passieren soll wenns mousewheel betätigt wird end; |
Re: Bescheuertes Mausrad!
Komisch dass es bei ihm nicht funktioniert... (laut Profil hat er ja auch Delphi 7 ... Updates, andere Komponenten auf der Form?)
|
Re: Bescheuertes Mausrad!
Naja, ich habs gar nicht erst mit überschreiben probiert, geht doch viel einfacher die message selbst abzufangen...
|
RienNeWaPlü
Danke der Anteilnahme...
Ich weiß auch nicht was los ist. Jedenfalls Danke der Information, dass es auf anderen Rechnern geht. Bei mir läuft Windows XP Home inkl. ServicePack 1, Delphi 7 Personal hab ich vor ca. 1/2 bis 3/4 Jahr gekauft, bisher abeer nie registrieren lassen und auch nicht upgedatet. Kann es daran liegen? Wie geht das mit dem Registrieren überhaupt und kann ich als Billignutzer der Personal-Version überhaupt updaten, wie steht's mit den Update 7.1? Jedenfalls hab ich den Code von SirThornberry 1:1 ausprobiert, und immer der gleiche Fehler :evil: Ich habe eine billige 2-Tastenmaus mit Rad (wär cool, wenn sie keines hätte, das würde vieles erklären :lol: ) und unten steht sowas wie Logitech ... sollte alles ok sein?! Was empfieht Ihr: Aufgeben? Delphi neu installieren? Updaten? Irgendwelche Einstellungen ändern? Coputer auf den Müll und ab in den Urwald? Schneck ist ratlos |
Re: Bescheuertes Mausrad!
WM_MOUSEWHEEL messages werden nur dann geschickt wenn das control den Eingabefokus hat, egal wo sich die Maus befindet!
|
Re: Bescheuertes Mausrad!
Moin SirThornberry,
wenn Du es mit Deiner D7 EE probiert hast, scheint es ein Problem der Personal Versionen zu sein. Weder mit D6 PE, noch mit D7 PE wird die WM_MOUSEWHEEL Routine aufgerufen, bei D5 Pro funktioniert es hingegen :shock: :gruebel: |
Re: Bescheuertes Mausrad!
Auch wenn's nicht mein Problem gelöst hat:
Mittlerweile zeifle ich nicht mehr an meinen bescheidenen Programmierkenntnissen, sondern eher an meiner Delphiversion! Sollte jemand mit seiner D7 PE Version beim MouseWheelen bei einer abgeleiteten Komponente Erfolg haben, bitte mich wissen lassen, dann muß ich meine Weltanschauung nochmals überdenken ... Danke all Euren Beiträgen, hab sehr viel dazugelernt Schneck :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz