AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bescheuertes Mausrad!

Ein Thema von Schneck · begonnen am 2. Jul 2004 · letzter Beitrag vom 4. Jul 2004
Antwort Antwort
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
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bescheuertes Mausrad!

  Alt 2. Jul 2004, 22:15
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#3

Re: Bescheuertes Mausrad!

  Alt 2. Jul 2004, 22:26
Komisch dass es bei ihm nicht funktioniert... (laut Profil hat er ja auch Delphi 7 ... Updates, andere Komponenten auf der Form?)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bescheuertes Mausrad!

  Alt 2. Jul 2004, 22:31
Naja, ich habs gar nicht erst mit überschreiben probiert, geht doch viel einfacher die message selbst abzufangen...
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Schneck

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

RienNeWaPlü

  Alt 3. Jul 2004, 12:51
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 Ich habe eine billige 2-Tastenmaus mit Rad (wär cool, wenn sie keines hätte, das würde vieles erklären ) 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
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#6

Re: Bescheuertes Mausrad!

  Alt 3. Jul 2004, 13:34
WM_MOUSEWHEEL messages werden nur dann geschickt wenn das control den Eingabefokus hat, egal wo sich die Maus befindet!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Bescheuertes Mausrad!

  Alt 3. Jul 2004, 14:45
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
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Schneck

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

Re: Bescheuertes Mausrad!

  Alt 4. Jul 2004, 21:45
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz