AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt?
Thema durchsuchen
Ansicht
Themen-Optionen

Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt?

Ein Thema von Panthrax · begonnen am 17. Feb 2010 · letzter Beitrag vom 20. Feb 2010
Antwort Antwort
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt?

  Alt 17. Feb 2010, 20:38
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?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 17. Feb 2010, 20:44
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 17. Feb 2010, 21:13
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?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#4

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 19. Feb 2010, 10:17
Hat niemand eine zündende Idee?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 19. Feb 2010, 10:32
Zitat von msdn:
If an application processes this message, it should return zero.
Schau doch mal in Message.Result nach.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
375 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 19. Feb 2010, 10:35
... oder schau hier nach

About Delphi

mfg cg
Andreas Schachtner
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 19. Feb 2010, 12:11
Zitat von sirius:
Schau doch mal in Message.Result nach.
Argh, danke, richtig. TMessage <> TMsg. Daran habe ich nicht mehr gedacht, und weil Dispatch(var Message) ohne Typ deklariert ist, ist es mir auch nicht aufgefallen, und in TMsg gibt es kein Feld Result o.ä.

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 von MSDN:
If an application processes this message, it should return zero.
Zitat von ConstantGardener:
... oder schau hier nach About Delphi
Danke, das hatte ich mir schon angesehen, allerdings wird dort kein Ergebnis ausgewertet.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 19. Feb 2010, 18:55
was verstehst du nicht
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 19. Feb 2010, 22:02
Zitat von sirius:
was verstehst du nicht
"If an application processes this message, it should return zero." -- Zu Deutsch: Wenn eine Anwendung diese Nachricht verarbeitet, sollte sie Null zurückgeben."

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?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Wann hat TObject.Dispatch(...) zu einem Ergebnis geführt

  Alt 20. Feb 2010, 11:17
Achso, dass ist verkertrum. Das habe ich irgendwie nicht gesehen

Tja, da weis ich auch nicht.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 01:18 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