Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Individuelle, eigene Messages erzeugen und abarbeiten (https://www.delphipraxis.net/156604-individuelle-eigene-messages-erzeugen-und-abarbeiten.html)

DeddyH 8. Mär 2011 15:06

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Wer suchet, der findet: http://www.delphipraxis.net/98484-%5...elphi-5-a.html

FriendOfDelphi 8. Mär 2011 15:31

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Zitat:

Zitat von DeddyH (Beitrag 1086803)

Leider nicht.
Ich habe sogar beide Units mit eingebunden; Unit Forms und Unit Classes.
Der Compiler meldet trotzdem den Fehler "Undefinierter Bezeichner: 'AllocateHWnd'".

DeddyH 8. Mär 2011 16:07

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Und die Delphi-Hilfe findet auch nichts? Da müsste die Unit nämlich drinstehen.

C.Schoch 8. Mär 2011 16:27

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Hi,

Hast du das Classes. vor AllocateHWnd entfernt oder durch Forms. ersetzt?
Sonst sucht der Compiler nämlich weiterhin in der Unit Classes

DeddyH 8. Mär 2011 16:29

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Stimmt, das hatte ich gar nicht gesehen. Dann wird Forms also wohl doch richtig sein.

FriendOfDelphi 9. Mär 2011 10:51

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Zitat:

Zitat von C.Schoch (Beitrag 1086835)
Hi,

Hast du das Classes. vor AllocateHWnd entfernt oder durch Forms. ersetzt?
Sonst sucht der Compiler nämlich weiterhin in der Unit Classes

Ich hatte zunächst beide Units mit eingebunden. Und zwar in der Reihenfolge zuerst die Unit "Classes" und dann die Unit "Forms".
Damit meldet der Compiler den Fehler "Undefinierter Bezeichner: 'AllocateHWnd'".
Nach Deinem Tipp habe ich die Unit "Classes" ausdokumentiert und die Unit "Forms" belassen.
Damit meldet der Compiler den Fehler "Undefinierter Bezeichner: 'Classes'".
Beides in der Zeile
Delphi-Quellcode:
FHandle := Classes.AllocateHWnd(Self.WndProc);

DeddyH 9. Mär 2011 10:54

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Genau aus der Zeile sollst Du das "Classes." rausnehmen.

FriendOfDelphi 9. Mär 2011 12:17

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Zitat:

Zitat von DeddyH (Beitrag 1086965)
Genau aus der Zeile sollst Du das "Classes." rausnehmen.

Oh, da habe ich wohl nicht richtig gelesen... :oops:
Funktioniert; der Compiler meldet keine Fehler mehr. :)

Wie funktioniert denn das jetzt; wie kann ich das Ganze jetzt zum Leben erwecken?
Muss ich zur Laufzeit mit
Delphi-Quellcode:
PostMessage(...)
eine eigene Message mit den entsprechenden Parametern erzeugen, die dann dafür sorgt das die zugeordnete Prozedur (hier: OnStartupMessage(...)) aufgerufen wird und in dieser dann die übergebene ID abfragen? :?:

himitsu 9. Mär 2011 13:03

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Und nun nochmal zu den Grundlagen, was individuelle/eigene Messages angeht...

Hier erstmal die wichtigesten Bereiche:
MSDN-Library durchsuchenWM_USER bis WM_USER+31743 aka $0400 bis $7FFF
MSDN-Library durchsuchenWM_APP bis WM_APP+16383 aka $8000 bis $BFFF
$C000 bis $FFFF mit MSDN-Library durchsuchenRegisterWindowMessage
der Rest, also alles unter WM_USER und über $FFFF ist Windows vorbehalten.

Für den kleinen Anwendungsprogrammierer interessiert hier vorallem WM_USER+x und RegisterWindowMessage.

Bei WM_USER und WM_APP müssen die Programmierer aufpassen, daß sie möglichst keine Werte doppelt belegen (zumindestens nicht innerhalb von Klassen/Windows, welche diese Messages empfangen könnten.
Bei RegisterWindowMessage muß man nur aufpassen, daß der Name möglichst eindeutig ist und somit keine doppelten Message-IDs auftreten können.

RegisterWindowMessage ist eigentlich vorwiegend für Nachrichten von Anwendung zu einer anderen Anwendung vorgesehn, aber man kann sie auch innerhalb einer Anwendung nutzen.

FriendOfDelphi 9. Mär 2011 16:22

AW: Individuelle, eigene Messages erzeugen und abarbeiten
 
Zitat:

Zitat von himitsu (Beitrag 1086995)
Und nun nochmal zu den Grundlagen, was individuelle/eigene Messages angeht...

Hier erstmal die wichtigesten Bereiche:
MSDN-Library durchsuchenWM_USER bis WM_USER+31743 aka $0400 bis $7FFF
MSDN-Library durchsuchenWM_APP bis WM_APP+16383 aka $8000 bis $BFFF
$C000 bis $FFFF mit MSDN-Library durchsuchenRegisterWindowMessage
der Rest, also alles unter WM_USER und über $FFFF ist Windows vorbehalten.

Für den kleinen Anwendungsprogrammierer interessiert hier vorallem WM_USER+x und RegisterWindowMessage.

Bei WM_USER und WM_APP müssen die Programmierer aufpassen, daß sie möglichst keine Werte doppelt belegen (zumindestens nicht innerhalb von Klassen/Windows, welche diese Messages empfangen könnten.
Bei RegisterWindowMessage muß man nur aufpassen, daß der Name möglichst eindeutig ist und somit keine doppelten Message-IDs auftreten können.

RegisterWindowMessage ist eigentlich vorwiegend für Nachrichten von Anwendung zu einer anderen Anwendung vorgesehn, aber man kann sie auch innerhalb einer Anwendung nutzen.

Ok, dass erklärt, welche ID-Bereiche zur Verfügung stehen.
Aber wie verwende ich denn die eigenen Messages?
Wenn ich die Vorgehensweise wie oben im Link in der MSDN beschrieben, in Delphi übertrage, meldet das Programm beim ausführen in der Zeile
Delphi-Quellcode:
uFindReplaceMsg := RegisterWindowMessage(PChar(WM_MY_MESSAGE));
eine Zugriffsverletzung.
Kannst Du bitte ein Stück Beispielcode posten?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 2 von 2     12   

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