AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Delphi Immer im Control unter dem Mauszeiger scrollen
Thema durchsuchen
Ansicht
Themen-Optionen

Immer im Control unter dem Mauszeiger scrollen

Ein Thema von himitsu · begonnen am 19. Nov 2010 · letzter Beitrag vom 30. Mai 2011
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.332 Beiträge
 
Delphi 12 Athens
 
#1

Immer im Control unter dem Mauszeiger scrollen

  Alt 19. Nov 2010, 23:48
Einige finden es bestimmt nervig, daß immer im Control mit dem Eingabefokus gescrollt wird und nicht dort, worüber sich der Mauszeiger befindet.

Hier ist also eine mögliche einfache Lösung dafür:
Delphi-Quellcode:
Procedure TForm1.MessageEvent(Var Msg: TMsg; Var Handled: Boolean);
  Var H: HWND;

  Begin
    If ((Msg.message = WM_MOUSEWHEEL) or (Msg.message = WM_MOUSEHWHEEL))
        and (Msg.wParam and MK_CONTROL = 0) Then Begin
      H := WindowFromPoint(Msg.pt);
      If (H = 0) or ((Msg.hwnd <> H) and (GetWindowThreadProcessId(H, nil) <> GetCurrentThreadId)) Then Begin
        Msg.hwnd := 0;
        Msg.message := WM_NULL;
        Handled := True;
      End Else Msg.hwnd := H;
    End;
  End;
Und dann natürlich noch Application.OnMessage := MessageEvent; .

Achtung: Wenn noch was Anderes dem Application.OnMessage zugewiesen ist/wird, dann muß man dieses mit beachten.


Ach ja, dieser Code leitet die Scrollereignisse immer nur im eigenem Programm weiter.
Es wird also nichts an fremde Programme übergeben. (stattdessen würde das Scrollergeignis verworfen)
Und das auch nur, wenn das eigene Programm den Eingabefokus besitzt.
(sonst empfängt es ja keines der nötigen Ereignisse)

[add]
Durch Drücken der [Strg/Ctrl]-Taste kann man die Umleitung nun auch vorübergehend deaktivieren.
Angehängte Dateien
Dateityp: 7z ScrollDemo.7z (152,6 KB, 17x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Nov 2010 um 15:25 Uhr)
  Mit Zitat antworten Zitat
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#2

AW: Immer im Control unter dem Mauszeiger scrollen

  Alt 20. Nov 2010, 14:53
Dein Beispiel hat einen schweren Bug.

GetWindowLong(H, GWL_HINSTANCE) und HInstance können den gleichen
Wert haben.

Da unter 32-Bit Windows jeder Prozess in seinem eigenen Adressraum läuft und HInstance der Basisadresse entspricht, an die ein Prozess geladen wurde (Die in den meisten Fällen 0x00400000 sein wird, da dies die standard Adresse ist, an der ein Prozess geladen wird.), kann man damit natürlich einen Prozess nicht mehr eindeutig identifizieren.

Das heißt, dass verschiedene Anwendungen den gleichen Hinstance-Wert
haben können...

Geändert von wolfgang_SV (20. Nov 2010 um 15:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.332 Beiträge
 
Delphi 12 Athens
 
#3

AW: Immer im Control unter dem Mauszeiger scrollen

  Alt 20. Nov 2010, 15:31
Joar, ich wollte gestern auch das ProcessHandle, bzw die ProcessID verwenden, aber fand es nicht schnell genug.
Nja, und das HInstance lief halt auch ... nur daran hatte ich garnicht gedacht.

Aber jetzt hab ich doch nochmal gesucht und verwende nun lieber die ThreadID.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#4

AW: Immer im Control unter dem Mauszeiger scrollen

  Alt 20. Nov 2010, 18:11
mit der ThreadID funtioniert es fehlerfrei..

aber was mir jetzt aufgefallen ist , versteh ich überhaupt nicht..

wenn ich den Focus auf ein dbgrid setze, funktioniert das Weiterleiten
auf ein anders Control nicht mehr.

die Scroll-message bleibt trotzdem im dbgrid hängen..

nehm ich den Focus wieder aus dem dbgrid raus, funktionierts wieder.

Vielleicht hast du ne Ahnung...
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#5

AW: Immer im Control unter dem Mauszeiger scrollen

  Alt 20. Nov 2010, 18:14

wenn ich den Focus auf ein dbgrid setze, funktioniert das Weiterleiten
auf ein anders Control nicht mehr.
Hilft das? http://delphi.about.com/cs/adptips20...ltip1102_3.htm
Thomas
  Mit Zitat antworten Zitat
wolfgang_SV

Registriert seit: 9. Nov 2007
Ort: Neumünster
39 Beiträge
 
#6

AW: Immer im Control unter dem Mauszeiger scrollen

  Alt 20. Nov 2010, 18:24
danke für den Tipp.
aber das kenn ich schon und hab es bei mir auch schon implementiert.
Doch das ist nicht das Problem...
  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 12:04 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 by Thomas Breitkreuz