Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi XE und Messages Phänomen (https://www.delphipraxis.net/157532-xe-und-messages-phaenomen.html)

haentschman 15. Jan 2011 07:48

Delphi-Version: XE

XE und Messages Phänomen
 
Moin alle...

letztens hat mich XE ein wenig überlistet... (oder ich mich ?) :gruebel:
Gegebenheiten, Unit im Mainthread:
Delphi-Quellcode:
.
.
private
  procedure BlaBla(var Msg: TMessage); Message WM_BLA;
.
.
procedure BlaBla(var Msg: TMessage);
begin
. // Aufgaben abarbeiten
.
end;
Message abschicken aus Thread, der im Mainthread erzeugt wird:
Delphi-Quellcode:
const
  WM_BLA = WM_USER + 1;
.
.
  PostMessage(HandleFenster, WM_BLA, wParam(Self), 0);
Phänomen:
- als erstes flogen mir Zugriffsverletzungen um die Ohren... hä, dachte ich :gruebel:
- dann kam ich drauf, daß die Procedure BlaBla bei jeder Message ausgeführt wird. (nicht nur WM_BLA)
- ich mußte in der Procedure die Message noch einmal unterscheiden..
Delphi-Quellcode:
  if Msg.Msg = WM_BLA then
Könnte das bitte jemand erklären. Kann das jemand reproduzieren ?

Ein schönes Wochenende :hi:

Uwe Raabe 15. Jan 2011 09:35

AW: XE und Messages Phänomen
 
Zitat:

Zitat von haentschman (Beitrag 1074828)
Kann das jemand reproduzieren ?

Ich jedenfalls nicht.

Bummi 15. Jan 2011 09:39

AW: XE und Messages Phänomen
 
kann ich zum Glück überhaupt nicht reproduzieren....
entweder ist der Aufruf
Delphi-Quellcode:
 PostMessage(HandleFenster, WM_BLA, wParam(Self), 0);
an einer ungünstigen Stelle verbaut (OnPaint,OnMouseMove etc.) oder eine Deiner Komponenten feuert in einem einem ähnlichen Ereignis.

haentschman 15. Jan 2011 10:05

AW: XE und Messages Phänomen
 
Danke für Eure Tipps:

kurze Rückmeldung:
- in einer Testanwendung bei der das Handle der Form benutzt wird funktioniert es.
- wenn ich aber ein Handle mit HandleFenster := AllocateHWnd(BlaBla); erzeuge ist das Verhalten zu reproduzieren. Ich weise ja die BlaBla Methode zu. Die Frage ist, warum dann die Message Direktive nicht greift und alle Messages in BlaBla ankommen.

Uwe Raabe 15. Jan 2011 10:34

AW: XE und Messages Phänomen
 
Zitat:

Zitat von haentschman (Beitrag 1074841)
- wenn ich aber ein Handle mit HandleFenster := AllocateHWnd(BlaBla); erzeuge ist das Verhalten zu reproduzieren. Ich weise ja die BlaBla Methode zu. Die Frage ist, warum dann die Message Direktive nicht greift und alle Messages in BlaBla ankommen.

Weil du mit dem Zuweisen der Methode je gerade sagst: Das ist meine Message-Methode! Die soll alle Messages bekommen und kümmert sich dann um die Verteilung.

In diesem Fall setzt du den Message-Mechanismus von Delphi ausser Kraft, der sich übrigens in
Delphi-Quellcode:
TObject.Dispatch
befindet.

haentschman 15. Jan 2011 10:37

AW: XE und Messages Phänomen
 
Danke für die Bestätigung...

so etwas habe ich mir auch grad gedacht. Also in so einem Falle ist die Message Unterscheidung nur innerhalb der Procedure möglich.

wieder was gelernt... :zwinker:

Uwe Raabe 15. Jan 2011 10:45

AW: XE und Messages Phänomen
 
Zitat:

Zitat von haentschman (Beitrag 1074847)
Also in so einem Falle ist die Message Unterscheidung nur innerhalb der Procedure möglich.

Das ist nicht zwingend der Fall. TControl.WndProc macht es eigentlich vor. Ein gut platzierter Aufruf von Dispatch ermöglicht auch dabei die Verwendung der komfortablen Message-Methoden. Du musst dann nur eine entsprechende WndProc bereitstellen, die diesen Aufruf vornimmt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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