![]() |
Hamsterlaufrad ääh Mauslaufrad
Hallilallo,
ich bin ziemlich neu hier, hab mich bisher mehr schlecht als recht als Einzelkämpfer durchgeschlagen (es gibt gar nicht so viele Delphianer!) und bleib regelmäßig mal hier mal dort im Programmcode stecken ..., bin so etwa in der Phase eines ganz leicht fortgeschrittenen Anfängers. Meine hoffnungslose Situation: Ich habe eine Komponente TZeichenBlatt von TImage abgeleitet. Wenn ich mit der Maus über die fertige Komponente fahre, soll beim Mausraddrehen gezoomt werden. Ich möchte nicht nur das OnMouseWheel Ereignis im Objektinspektor sehen, sondern ich möchte auch, dass das dann funktioniert, ohne dass ich eine entsprechende Procedure erst schreiben muss, NACHDEM ich meine Komponente auf Form1 plaziert habe; der Code soll schon im Quelltext der Komponente drinnen sein; ich glaube man sagt dazu, ein Ereignis zur Laufzeit realisieren (?). Frage: Wie kann ich auf das OnMouseWheel Ereignis zugreifen? Das OnClick Ereignis ist ja bei TImage standartmäßig dabei, aber das OnMouseWheel nicht! Kann ich es irgendwie von TControl ableiten? Wie geht das? Hab auch schon untenstehendes versucht, aber auf das Mausrad ragiert nix!!!!!!!! Es tut sich überhaupt nix, nix, nix!-((( Wie kann ich tun, dass irgendetwas auf mein Mauslaufrad reagiert? Ich hab sicher einen easycollen extrasimplen Fehler oder ein IQ-Problem! Vielleich kann mir jemand helfen, damit ich nicht den ganzen Tag :wall: Danke feste Schneck
Delphi-Quellcode:
type TMausAnzeige = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of Object; TZeichenBlatt = class(TImage) private procedure MausDrehen(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); ... protected ... public ... published Property OnMouseWheel; ... ... procedure TZeichenblatt.MausDrehen(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin if WheelDelta > 0 then ShowMessage('ää'); Canvas.TextOut(10,10,'hjhjhhjhgjkghk'); Handled := True; end; constructor TZeichenBlatt.Create(aOwner: TComponent); begin inherited create(aOwner); ... OnMouseWheel := Mausdrehen; .. end; ... |
Re: Hamsterlaufrad ääh Mauslaufrad
Delphi-Quellcode:
Is etwas komisch geschrieben, aber hier die Erklärung:
...
protected procedure MeinVerstecktesOnMouseWheel(...) fOnMouseWheel: ... published property OnMouseWheel: ... constructor TZeichenBlatt.Create(...) begin inherited OnMouseWheel := MeinVersteckesOnMouseWheel; end; procedure MeinVersteckesOnMouseWheel(...) begin if assigned(OnMouseWheel) then fOnMouseWheel(...); end; du überschreibst zwar das alte OnMouseWheel, kannst es aber noch mit inherited ansprechen! In deinem OnMouseWheel musst du halt noch eventuell das von Benutzer verwendete OnMouseWheel aufrufen! |
Re: Hamsterlaufrad ääh Mauslaufrad
Hallo da bin ich wieder,
geht leider immer noch nicht, ist da noch was faul? Es tut sich immer noch nix...
Delphi-Quellcode:
type TMausAnzeige = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer) of Object; TZeichenBlatt = class(TImage) private ... protected fOnMouseWheel: TMouseWheelEvent; procedure MausDrehen(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); ... public constructor Create(aOwner: TComponent); override; ... published property OnMouseWheel: TMouseWheelEvent Read fOnMouseWheel Write fOnMouseWheel; ... end; ... procedure TZeichenblatt.MausDrehen(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin if assigned(OnMouseWheel) then fOnMouseWheel(Sender, Shift, WheelDelta, MousePos, Handled); if WheelDelta > 0 then ShowMessage('ää'); Canvas.TextOut(10,10,'hjhjhhjhgjkghk'); end; ... constructor TZeichenBlatt.Create(aOwner: TComponent); begin inherited create(aOwner); ... inherited OnMouseWheel := Mausdrehen; end; |
Re: Hamsterlaufrad ääh Mauslaufrad
Hast du schon mal probiert, ob das MouseWheel-Event vom Formular funzt?
Bei mir gabs mal das Problem, dass es da nicht funktioniert hat! Am Source dürfte eigentlich nichts fehlen! (glaub ich halt!) |
Re: Hamsterlaufrad ääh Mauslaufrad
Was heißt funzen:?:
|
Re: Hamsterlaufrad ääh Mauslaufrad
funzen = funktionieren
|
Re: Hamsterlaufrad ääh Mauslaufrad
nur zur information, WM_MOUSEWHEEL messages werden nur an das Fenster geschickt, das den Eingabefokus hat!
|
Re: Hamsterlaufrad ääh Mauslaufrad
Zitat:
ps: CM_Xxx entsprechen nicht unbedingt 'durchgereichten' Windows-Nachrichten (das sind eher die CN_Xxx) |
Re: Hamsterlaufrad ääh Mauslaufrad
ojeoje, da steig ich voll aus.
Und übigens, mein Form1 funzt schon, auch der Objektinspektor der Komponente TZeichenBlatt zeigt jetzt OnMouseWheel an, aber wenn ich beim OnMouseWheel-Ereignis vom Form1 eine Prozedur einfüge, funzt immer nur die Procedur vom Form1, auch wenn ich im OnMouseWheel vom ZeichenBlatt eine andere Procedure einfüge, diese wird immer ignoriert. :( Danke jedenfalls für die vielen Tipps, ich glaub, ich muss aufgeben Schnief Schneck |
Re: Hamsterlaufrad ääh Mauslaufrad
Hi! :hi:
Meines wissens nach musst du einfach mal für deine Kompo ein Nachrichtenfenster erstellen das dann die Msg vom Mausrad (ka wie die jetzt heißt) abfragt, dann noch gucken ob die Maus innerhalb deiner Kompo ist und schon kannst den Event drum herum basteln ;) mfg phlux :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 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