Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine Message senden (https://www.delphipraxis.net/71240-eine-message-senden.html)

Koller 11. Jun 2006 19:20


Eine Message senden
 
Hallo!

Ich möchte innerhalb meines Programms eine Nachricht senden. Wenn diese empfangen wird, soll eine Procedure ausgeführt werden. Leider bin ich mithilfe der Suchfunktionen der DP und auch der EE nicht wesentlich weiter gekommen. Folgenden Codeschnipsel habe ich:
Delphi-Quellcode:
const
  WM_LOESCHMICH = WM_USER + 123; // die Message (immer als WM_USER + irgendeine Zahl deklarieren)

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure LoeschMich(var Msg: TMessage); message WM_LOESCHMICH; // der MessageHandler
  public
    { Public-Deklarationen }
  end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(Handle, WM_LOESCHMICH, Integer(Sender), 0); // an Form senden (Handle), in WParam den Button stecken
end;

procedure TForm1.LoeschMich(var Msg: TMessage);
begin
  TObject(Msg.WParam).Free; // WParam nach TObject casten und freigeben
end;
Fragen: Ich möchte
Delphi-Quellcode:
const
  WM_LOESCHMICH = WM_USER + 123; // die Message (immer als WM_USER + irgendeine Zahl deklarieren)
innerhalb einer Klasse deklarieren. Wo muss dann hin? Und was hat WM_User zu bedeuten?
Genauso wenig verstehe ich folgende Zeile:
Delphi-Quellcode:
TObject(Msg.WParam).Free; // WParam nach TObject casten und freigeben
Wer kann mir helfen?

marabu 11. Jun 2006 19:33

Re: Eine Message senden
 
Hi.

Zu deiner ersten Frage: deine Konstante gehört dahin wo sie ist. Man deklariert keine Konstanten in einer Klasse.

Zu deiner zweiten Frage: Der Pointer auf den Button wurde in wParam als 32-bit Ganzzahl transportiert und muss wieder als TObject interpretiert werden, sonst kommst du nicht an seine Methodentabelle.

Grüße vom marabu

Koller 11. Jun 2006 19:39

Re: Eine Message senden
 
Und was hat das WM_User zu bedeuten?

marabu 11. Jun 2006 19:41

Re: Eine Message senden
 
Alle message numbers unterhalb WM_USER sind bereits reserviert bzw. in Verwendung.

marabu

Koller 12. Jun 2006 10:15

Re: Eine Message senden
 
Zitat:

Zitat von marabu
Alle message numbers unterhalb WM_USER sind bereits reserviert bzw. in Verwendung.

marabu

Was sind denn message numbers?

sakura 12. Jun 2006 10:27

Re: Eine Message senden
 
Zitat:

Zitat von Koller
Was sind denn message numbers?

Alle Nachrichten (Messages) - z.B. Mausbewegung/Click, Neudarstellungen, Tastaturdruck, Windows Start/Ende, etc. - werden anhander einer Nummber (Message ID) identifiziert. Einige Tausend davon sind festen Ereignissen (System, Windows, User, etc.) zugeordnet. Die Nummern ab WM_USER stehen den Programmen zur freien Verfügung für eigene Messages.

...:cat:...

fkerber 12. Jun 2006 10:42

Re: Eine Message senden
 
Hi!

Dürfte ich an dieser Stelle eine kleine Verständnisfrage einschieben?

Was passiert, wenn ich eine Message in meinem Programm als WM_USER+37 definiere und ein anderes Programm will auch ne Message mit WM_USER+37 haben? Werden dann beide "Events" ausgelöst?


Ciao Frederic

marabu 12. Jun 2006 10:50

Re: Eine Message senden
 
Hi Frederic,

deine custom messages haben nur lokale Bedeutung. Willst du sie programmübergreifend verwenden, dann musst du dir eine message number von Windows zuteilen lassen. Siehe auch fensternachrichten unterscheidung

Grüße vom marabu

fkerber 12. Jun 2006 10:58

Re: Eine Message senden
 
Hi!

ah, Perfekt! Danke!


Ciao Frederic

sakura 12. Jun 2006 11:01

Re: Eine Message senden
 
Zitat:

Zitat von marabu
deine custom messages haben nur lokale Bedeutung. Willst du sie programmübergreifend verwenden, dann musst du dir eine message number von Windows zuteilen lassen.

Musst nicht, aber solltest. Die Nachricht sendet man normalerweise nur an das eigene Programm, aber eine der Schwächen der alten API ist es, dass man diese Messages auch an andere Anwendungen senden kann. Kennt man deren internen Nachrichtenaufbau, kann man somit auf "falsche" Botschaften senden.

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.
Seite 1 von 2  1 2      

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