| Mike_C hat folgendes geschrieben: |
| woher weiß eine form, dass eine nachricht an sie gesendet wurde? |
Sie "weiß" es nicht. Sie schaut einfach, ob eine Message da ist.
Wenn du dir mal eine Nachrichtenschleife (z.B. aus den nonVCL-Tutorials von Luckie und MathiasSimmack) anschaust, sieht sie folgendermaßen aus:
Delphi-Quelltext
1: 2: 3: 4: 5:
| while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end; |
GetMessage liefert solange True, bis die NAchricht WM_DESTROY war, die Schleife läuft also endlos lange weiter und schaut, ob eine Message gerade in der Message Queue ist.
Für die Application an sich gibt es in der TApplication-Klasse ein OnMessage-Event dafür. Inwieweit dieses Event auch bei Nachrichten an ein bestimmtes Fenster und nicht nur an Nachrichten an den Thread funktioniert, weiß ich nicht, das kannst du aber ja leicht ausprobieren
Wenn du eine nonVCL-Anwendung schreibst, hast du ja bereits die Nachrichtenschleife und die WndProc dazu, in der vermutlich eine lange CASE-Abfrage steckt, die die Messages durchgeht. Da kannst du deine eigene Message (z.B. WM_USER) einreihen und darauf irgendwie reagieren.
| Zitat: |
| an welcher stelle von meinem programm tauchen die gesendeten nachrichten denn wieder auf? und wie fange ich sie ab? |
Welche Daten sollen denn wieder auftauchen? Die Message kommt in eine Message-Queue, die durch GetMessage abgearbeitet wird.
Falls du im lParam oder wParam irgendwelche Zahlen übergeben hast, sind sie natürlich auch noch da drin, wenn du sie mit GetMessage aus der Queue geholt hast. Sind diese Zahlen Pointer, muss natürlich sichergestellt sein, daß der Speicher zwischenzeitlich nicht wieder freigegeben wurde, denn sonst könnte der Speicherbereich bereits mit anderen Daten gefüllt worden sein.
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk.