Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RegisterWindowMessage und vcl... (https://www.delphipraxis.net/38360-registerwindowmessage-und-vcl.html)

Kedariodakon 18. Jan 2005 08:36


RegisterWindowMessage und vcl...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Morgen :chat:

Da ich mich gerade bischen mit Windows-Messages beschäftige, wollt ich fragen, ob das hier so korrekt ist, oder ob es vielleicht anders besser geht...
Der Teil mit der Registerierten Windowsmeldung muß aber bleiben, aber das Nachrichten empfangen, dass ist vielleicht nicht korrekt...
Naja vielleicht aber auch nicht, da es ja funktioniert :zwinker:

Aja und mit dem WM_INITDIALOG weiß ich net wirklich weiter, da steht seltsames in der Hilfe drinne, was ich ganz und gar nicht verstehen will... :gruebel:

Delphi-Quellcode:
Unit FMain;


Interface


Uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
         Dialogs, StdCtrls;


Type
   TfrmMain = Class( TForm )
      cmdRegister:   TButton;
       cmdSend:         TButton;  
      Procedure FormCreate( Sender: TObject );
      Procedure FormDestroy( Sender: TObject );
      Procedure cmdRegisterClick( Sender: TObject );
      Procedure cmdSendClick( Sender: TObject );
   Private
      { Private-Deklarationen }
      fHook:         TWindowHook;
      fMyMessage:   Cardinal;
      Function MessageHandler( Var Message: TMessage): Boolean;
   Public
      { Public-Deklarationen }
   End;


Var   frmMain: TfrmMain;


Implementation


{$R *.dfm}


Procedure TfrmMain.FormCreate( Sender: TObject );
Begin
   fHook   := MessageHandler;   //   fHook meinem MessageHandler zuweisen
   Application.HookMainWindow( fHook );   //   Hook laden
End;


Procedure TfrmMain.FormDestroy(Sender: TObject);
Begin
   Application.UnhookMainWindow( fHook );//   Hook entladen
End;


Function TfrmMain.MessageHandler( Var Message: TMessage): Boolean;
Begin
   Result      := False;   //   Wir haben die Nachricht noch nicht behandelt...
   If Message.Msg   = fMyMessage Then Begin//   Ist es unsere Nachricht?
      beep;
      Result   := True;
   End;
   //   WM_INITDIALOG  ?!?   Soll True zurückliefern ?!?!?!? Why?
End;


Procedure TfrmMain.cmdRegisterClick( Sender: TObject );
Begin
   fMyMessage   := RegisterWindowMessage( 'Testy_Message' );//   Unsere Nachricht registrieren
End;


Procedure TfrmMain.cmdSendClick( Sender: TObject );
Begin
   SendMessage( HWND_BROADCAST, fMyMessage, 0, 0 );//   Unsere Nachricht senden
End;


end.
Bye

Olli 2. Jul 2005 10:03

Re: RegisterWindowMessage und vcl...
 
Paßt besser in Win32 API

Zitat:

Zitat von Kedariodakon
Aja und mit dem WM_INITDIALOG weiß ich net wirklich weiter, da steht seltsames in der Hilfe drinne, was ich ganz und gar nicht verstehen will... :gruebel:

In welcher Hilfe. Erstmal: Forms (TForm) sind keine Dialoge. Es wird also auch nie WM_INITDIALOG geschickt!

Den Rest der Frage habe ich nicht wirklich verstanden.

Wenn du es innerhalb einer einzigen Anwendung benutzt, also ohne die Fensternachrichten zwischen verschiedenen Apps hin- und herzuschicken, kannst du RegisterWindowMessage() komplett weglassen. Ist sinnlos, weil das nur garantiert, daß du "systemweit" eine einzigartige Fensternachricht bekommst. Es dient dazu, daß verschiedene Anwendungen, welche sich auf den Namen einer Nachricht geeinigt haben, diesen Namen verwenden können um a.) den Wert einer bereits registrierten Fensternachricht auszulesen oder b.) eine slche neu zu registrieren.


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