AGB  ·  Datenschutz  ·  Impressum  







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

Hamsterlaufrad ääh Mauslaufrad

Ein Thema von Schneck · begonnen am 22. Jun 2004 · letzter Beitrag vom 12. Jul 2004
Antwort Antwort
Seite 1 von 3  1 23      
Schneck

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

Hamsterlaufrad ääh Mauslaufrad

  Alt 22. Jun 2004, 21:50
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

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;

...
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#2

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 22. Jun 2004, 22:01
Delphi-Quellcode:
...
protected
  procedure MeinVerstecktesOnMouseWheel(...)
  fOnMouseWheel: ...
published
  property OnMouseWheel: ...

constructor TZeichenBlatt.Create(...)
begin
  inherited OnMouseWheel := MeinVersteckesOnMouseWheel;
end;

procedure MeinVersteckesOnMouseWheel(...)
begin
  if assigned(OnMouseWheel) then
    fOnMouseWheel(...);
end;
Is etwas komisch geschrieben, aber hier die Erklärung:
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!
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Schneck

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

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 22. Jun 2004, 22:20
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;
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#4

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 22. Jun 2004, 22:37
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!)
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
Schneck

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

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 22. Jun 2004, 22:44
Was heißt funzen
  Mit Zitat antworten Zitat
Skiron

Registriert seit: 14. Dez 2003
153 Beiträge
 
#6

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 22. Jun 2004, 22:52
funzen = funktionieren
Mann zu Frau:
Zieh dich aus, wir müssen reden!
  Mit Zitat antworten Zitat
w3seek
(Gast)

n/a Beiträge
 
#7

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 23. Jun 2004, 02:01
nur zur information, WM_MOUSEWHEEL messages werden nur an das Fenster geschickt, das den Eingabefokus hat!
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#8

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 23. Jun 2004, 02:10
Zitat von w3seek:
nur zur information, WM_MOUSEWHEEL messages werden nur an das Fenster geschickt, das den Eingabefokus hat!
Ich würde eher in Richtung Component-Messages (CM_Xxx) forschen (da die VCL die Nachrichten auch an die Komponenten/Childs verteilt) -> CM_MOUSEWHEEL ?

ps: CM_Xxx entsprechen nicht unbedingt 'durchgereichten' Windows-Nachrichten (das sind eher die CN_Xxx)
  Mit Zitat antworten Zitat
Schneck

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

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 23. Jun 2004, 19:31
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
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#10

Re: Hamsterlaufrad ääh Mauslaufrad

  Alt 23. Jun 2004, 19:40
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
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:19 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