AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Wie Fehler suchen: WM_MouseWheel nicht in WindowProc()
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Fehler suchen: WM_MouseWheel nicht in WindowProc()

Ein Thema von Schwedenbitter · begonnen am 6. Sep 2010 · letzter Beitrag vom 6. Sep 2010
 
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Wie Fehler suchen: WM_MouseWheel nicht in WindowProc()

  Alt 6. Sep 2010, 16:40
Danke Euch für die schnellen Antworten:

Ich hatte Form.OnMouseWheel bereits am Start. Allerdings würde ich gern das Scrollverhalten von TRichEdit 1:1 kopieren. Dazu gehört eben auch, dass es langsam anfängst zu scrollen und das scrollen auch wieder langsam endet. Das scrollen wirkt damit weicher.
Wenn ich die Message WM_MouseWheel wie in meinem Code-Ausschnitt einfach durchreiche, kann ich genau das erreichen. Während WM_VScroll einfach "nur" scrollt. Der Benutzer soll den Eindruck haben, das TRichEdit hätte den Focus.

Mit TApplicationEvents hatte ich bislang noch nicht gearbeitet, werde mir das aber mal ansehen.

Ich hatte auch schon probiert, mir einfach die Integer-Werte der Ereignisse in meinem laufenden Code anzeigen zu lassen und dann so zu senden. Dann bekomme ich aber einen Stack-Überlauf in TControl.WndProc() ... Irgend etwas muss doch ausgerechnet WM_MouseWheel in der WindowsProc() "verschlucken". Was mich nur wundert, ist der Umstand, dass mein Programm sonst ohne Probleme läuft und TRichEdit super scrollt, wenn es den Focus hat. Genau das würde ich gern ergründen.

[edit]
Während das funktioniert,
Delphi-Quellcode:
procedure TForm1.NewWndProc(var Msg: TMessage);
const
  ScrollUp = $00780000;
  ScrollDown = -$00780000;
begin
  if (Msg.Msg = WM_MouseWheel) then
  case Msg.WParam of
    ScrollUp : Log.Perform(WM_MouseWheel, ScrollUp, makeLParam(
      Mouse.CursorPos.X, Mouse.CursorPos.Y));
    ScrollDown : Log.Perform(WM_MouseWheel, ScrollDown, MakeLParam(
      Mouse.CursorPos.X, Mouse.CursorPos.Y));
  end;
  inherited WndProc(Msg);
end;
bekomme ich hiermit (auch) den Stack-Überlauf
Delphi-Quellcode:
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
const
  ScrollUp = $00780000;
  ScrollDown = -$00780000;
begin
  if WheelDelta > 0 then
    Log.Perform(WM_MouseWheel, ScrollUp, makeLParam(
      Mouse.CursorPos.X, Mouse.CursorPos.Y));
  if WheelDelta < 0 then
    Log.Perform(WM_MouseWheel, ScrollDown, MakeLParam(
      Mouse.CursorPos.X, Mouse.CursorPos.Y));
end;
[/edit]

Alex
Alex Winzer

Geändert von Schwedenbitter ( 6. Sep 2010 um 17:04 Uhr)
  Mit Zitat antworten Zitat
 


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 00:10 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