![]() |
Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt?
Hallo.
Mit TObject.Dispatch(...) kann man Nachrichten versenden. Hat man irgendeine Möglichkeit herauszufinden, ob diese von irgendjemandem entgegengenommen wurde? In meinem Fall versende ich eine (abgefange) WM_MouseWheel-Nachricht an ein TWinControl-Objekt, à la: WinControl.Dispatch(Msg); Das Abfangen ist nur sinnvoll, wenn WinControl in der Lage ist, die WM_MouseWheel-Nachricht zu verarbeiten. Kann es das nicht, will ich die Nachricht "zurückgeben", ohne sie behandelt zu haben (Handled := False). Also: Kann ich herausfinden, ob ein WinControl-Objekt eine Nachricht verarbeiten kann (vorher) oder ob es eine Nachricht verarbeitet hat (nachher), und wann ich dementsprechend die Nachricht "zurückgeben" kann? |
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
So recht verstehe ich nicht was du vor hast. Warum fängst du die Nachricht ab wenn sie dann doch an das WinControl geschickt werden soll? Und warum ist es davon abhängig ob das Control die Nachricht speziell verarbeitet oder ob die DefaultWindowProc das ganze verarbeitet?
Aktuell klingt das ganze für mich nach einem Konzeptsionsfehler (basierend auf einem Verständnisproblem der Funktionsweise). Es wäre also interessant zu wissen was du eigentlich vor hast (ohne Beachtung deines "Lösungsansatzes") um dir zu sagen wie man das richtig lösen kann. |
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
WM_MouseWheel löst das Scrollen aus, und normalerweise, egal wo die Maus ist, scrollt das Steuerelement mit dem Fokus.
Ich möchte aber erreichen, das WM_MouseWheel an das Steuerelement unter der Maus umgeleitet wird, damit dieses Steuerelement scrollen kann (auch ohne Fokus). Jetzt wäre es gut zu wissen, ob das Element unter der Maus überhaupt mit dieser Nachricht etwas anfangen kann (Variante 1, vor dem Senden) bzw. mit der Nachricht etwas angefangen hat (Variante 2, nach dem Senden). In dem Fall, in dem das Element unter der Maus nichts mit der Nachricht anfangen kann bzw. angefangen hat, möchte ich, dass das Element mit dem Fokus die Nachricht "zurückbekommt". Woher weiß ich also, wann sich das Umleiten lohnt? |
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
Hat niemand eine zündende Idee? :glaskugel:
|
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
Zitat:
|
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
|
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
Zitat:
Für WMMouseWheel scheint Message: TMessage.Result = 1 zu sein, wenn das Steuerelement gescrollt hat. Ich habe es mit Memos und einer Taste probiert. Das scheint zu funktionieren, jetzt kann ich Handled := Message.Result = 1 setzen. Allerdings verstehe ich dann immer noch nicht: Zitat:
Zitat:
|
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
was verstehst du nicht :gruebel:
|
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
Zitat:
Wenn (1) Message: TMessage.Result nun dieser Rückgabewert ist, (2) dieser Rückgabewert nicht Null ist und (3) die Anwendung die Nachricht verarbeitet hat, dann widerspricht sich das doch!? Nun ist "sollte zurückgeben" ("should return") aber auch nicht "gibt zurück" ("returns"). Ist das also die Ausnahme von der Regel? |
Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt
Achso, dass ist verkertrum. Das habe ich irgendwie nicht gesehen :oops:
Tja, da weis ich auch nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 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