Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi WM_MOUSEWHEEL abfragen (https://www.delphipraxis.net/110136-wm_mousewheel-abfragen.html)

PatrickB 13. Mär 2008 14:25


WM_MOUSEWHEEL abfragen
 
Hi,

ich hab ein kleines Problemchen.
Es sind 2 SynEdit-Felder vorhanden.
Wenn ich jetzt an dem einen Feld scrolle, soll das andere auch mitscrollen.
Das hab ich jetzt so gelöst:
Delphi-Quellcode:
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  _OldProc := SynEdit1.WindowProc;
  SynEdit1.WindowProc := WndMessage;
end;
....
procedure TForm1.WndMessage(var msg: TMessage);
begin
  case msg.Msg of
    WM_VSCROLL: SendMessage(SynEdit2.Handle, WM_VSCROLL,
        TWMVScroll(msg).ScrollCode, TWMVScroll(msg).Pos);
    WM_MOUSEWHEEL: SendMessage(SynEdit2.Handle, WM_VSCROLL,
        TWMVScroll(msg).ScrollCode, TWMVScroll(msg).Pos);

  end;
  _OldProc(msg);
end;
Wenn ich jetzt an den kleinen Pfeilen an der Scrollbar scrolle, dann klappt das auch. Aber wenn man mit dem Mousewheel versucht zu scrollen, klappt das im ersten Fenster. Im 2. SynEdit-Feld scrollt es aber immer nur nach oben, egal ob ich jetzt das Mausrad herunter oder hinauf drehe.

Wie kann man prüfen ob das Mausrad nach oben oder unten gedreht wurde?
Oder wo liegt jetzt der Fehler?

Danke schonmal,

Patrick

DeddyH 13. Mär 2008 14:37

Re: WM_MOUSEWHEEL abfragen
 
In meiner Hilfe zu WM_MOUSEWHEEL steht:
Zitat:

WM_MOUSEWHEEL
fwKeys = LOWORD(wParam); // key flags
zDelta = (short) HIWORD(wParam); // wheel rotation
xPos = (short) LOWORD(lParam); // horizontal position of pointer
yPos = (short) HIWORD(lParam); // vertical position of pointer

...
zDelta

The value of the high-order word of wParam. Indicates the distance that the wheel is rotated, expressed in multiples or divisions of WHEEL_DELTA, which is 120. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user.

PatrickB 13. Mär 2008 14:43

Re: WM_MOUSEWHEEL abfragen
 
Cool, danke =)
Ich werds mal probieren. Bei mir hats in der Hilfe nämlich nix gefunden..

PatrickB 13. Mär 2008 15:25

Re: WM_MOUSEWHEEL abfragen
 
Ok, das zDelta hab ich jetzt, aber wie kann ich bei SendMessage

Delphi-Quellcode:
WM_MOUSEWHEEL: SendMessage(SynEdit2.Handle, WM_VSCROLL,
        TWMVScroll(msg).ScrollCode, TWMVScroll(msg).Pos);
einstellen, dass nach oben bzw. nach unten gescrollt wird?

DeddyH 13. Mär 2008 15:28

Re: WM_MOUSEWHEEL abfragen
 
Gegenfrage: wieso schickst Du nicht einfach WM_MOUSEWHEEL an das andere Synedit? Die Parameter kannst Du doch 1:1 mit übergeben, wenn ich jetzt keinen Denkfehler habe.

PatrickB 13. Mär 2008 15:32

Re: WM_MOUSEWHEEL abfragen
 
Zitat:

Zitat von DeddyH
Gegenfrage: wieso schickst Du nicht einfach WM_MOUSEWHEEL an das andere Synedit? Die Parameter kannst Du doch 1:1 mit übergeben, wenn ich jetzt keinen Denkfehler habe.

Hm...verstehe nicht ganz was du meinst.
Ich versuche doch die Daten von SynEdit1 an SynEdit2 zu schicken..

Ich könnte ja vll ScrollBy() benutzen, aber dann wird irgendwie der ganze inhalt nach unten verschoben.

DeddyH 13. Mär 2008 15:34

Re: WM_MOUSEWHEEL abfragen
 
Ich denke, das Ganze lässt sich doch vereinfachen (aus dem Kopf):
Delphi-Quellcode:
procedure TForm1.WndMessage(var msg: TMessage);
begin
  case msg.Msg of
    WM_VSCROLL,
    WM_MOUSEWHEEL: SendMessage(SynEdit2.Handle,
                               msg.Msg,
                               msg.wParam,
                               msg.lParam);
  end;
  _OldProc(msg);
end;

Apollonius 13. Mär 2008 15:36

Re: WM_MOUSEWHEEL abfragen
 
Außerdem ist bei VCL-Controls Perform zu bevorzugen.

PatrickB 13. Mär 2008 15:41

Re: WM_MOUSEWHEEL abfragen
 
Zitat:

Zitat von DeddyH
Ich denke, das Ganze lässt sich doch vereinfachen (aus dem Kopf):
Delphi-Quellcode:
procedure TForm1.WndMessage(var msg: TMessage);
begin
  case msg.Msg of
    WM_VSCROLL,
    WM_MOUSEWHEEL: SendMessage(SynEdit2.Handle,
                               msg.Msg,
                               msg.wParam,
                               msg.lParam);
  end;
  _OldProc(msg);
end;

Das klappt irgendwie auch nicht :|

DeddyH 13. Mär 2008 15:50

Re: WM_MOUSEWHEEL abfragen
 
Und mit Perform, wie oben vorgeschlagen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr.
Seite 1 von 2  1 2      

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