AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Windows Messages - Tutorial?

Ein Thema von BloodySmartie · begonnen am 29. Nov 2007 · letzter Beitrag vom 1. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
BloodySmartie
(Gast)

n/a Beiträge
 
#1

Windows Messages - Tutorial?

  Alt 29. Nov 2007, 18:53
Hallo liebe Leute!

Kennt jemand von euch vielleicht ein Tutorial, Komponenten oder
andere Ressourcen, die sich um Windows Messages drehen? Ich würde
gern mehr darüber lernen, wie genau Messages funktionieren und wie
man sie lesen und senden kann.

Viele Dank & beste Grüße
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Windows Messages - Tutorial?

  Alt 29. Nov 2007, 22:04
Messages ist ja DAS Windows-Kommunikationsmittel.
Nur in einer VCL-anwendung siehst du nicht mher allzuviel davon (wenn du es nicht erzwingst). Deswegen würde ich dir mal zu einem nonVCL-Tutorial raten (Luckie hat da z.B. eins). Vielleicht kommst du darüber auch an eins, welches dir direkt die Messageverarbeitung erklärt.


Hier mal kurz für die VCL (ohne jetzt tiefer drauf einzugehen):

1. Abschicken einer Message geht über Sendmessage oder Postmessage. Beide erwarten 4 Parameter:
-den Adressaten (Empfänger hiervon können alle Fenster sein), wird durch das Windowhandle (HWND) gekennzeichnet
-Eine MessageID (eine 32bit-Nummer, damit der Empfänger wies, wofür die Nachricht ist)
-Und die letzten beiden Parameter sind einfach 2 32-Bit Werte, welche du mit irgendetwas füllen kannst (natürlich so, dass es der Empfänger versteht)
Der Unterschied zwischen PostMessage und Sendmessage ist, dass Postmessage die NAchricht abschickt und im Programm einfach fortfährt, während Sendmessage das Programm anhält, bis der Empfänger auf die Nachricht reagiert hat (beim Empfänger wird eben eine Funktion aufgerufen und, wenn die durchgearbeitet ist, läuft dein Programm weiter und zusätzlich bekommst du noch das Ergebnis der Funktion als Ergebnis von Sendmessage)

[1a) Es gibt ach noch PostThreadMessage]

2. Der Empfänger kann über PeekMessage oder GetMessage eintreffende Nachrichten mit genau den 4 Parametern abrufen (das macht die VCL in etwa so, wenn sie grad nix zu tun hat, oder du Application.ProcessMessages aufrufst)
Messages empfangen kann in der VCL jedes Objekt, dass von TWinControl abgeleitet wurde (das sind ne ganze Menge) Alle diese Objekte haben als Property ein Windowhandle. Dieses Windowhandle musst du nur dem Sender irgendwie mitteilen (oder du bekommst es über Funktionen, wie "Findwindow", "EnumWindows", "Getwindow")
Zudem hat jedes TWincontrol die Methode "WndProc". Dort laufen alle Messages eines Fensters durch. Wenn du diese Methode überschreibst, hats du die Messageverarbeitung selber in der Hand. Das ist allerdings nicht zu empfehlen, besser ist es eine Methode zu implementieren, welche auf genau eine bestimmte Message (anhand MessageID) reagiert. Dazu musst du in der Deklaration hinter die Methode einfach "message yourMessageID" schreiben und als Parameter braucht die Methode "var Msg:TMessage"

3. Was gibt es so für MessageIDs. Also es gibt vordefinierte, für bestimmte Aktionen (z.B. WM_Create, WM_LButtonDown, WM_Close,...). Diese sollte man nur senden, wenn du damit eine bestimmte, von Windows vordefinierte, Aktion bezwecken willst.
Für alle anderen Aktionen gibt es WM_User+x (x relativ frei wählbar)

4. noch ein kurzes Beispiel für eigene Messages:
Delphi-Quellcode:
const WM_myMessage=WM_User+1;

type TForm1=class(TForm)
       procedure Button1Click(Sender:TObject);
      private
       procedure getMyMessage(var msg:TMessage); message MW_myMessage;
end;
....
procedure TForm1.Button1Click(Sender:TObject);
var res:integer;
    Erfolg:boolean;
begin
  memo1.lines.add('Wir senden: 5');
  //function sendmessage(wnd:HWND; MessageID:Integer; WParam:Integer; LParam:Integer): Integer;
  res:=sendmessage(self.handle,WM_myMessage,5,0);
        //wir senden mal an unser eigenes Fenster
  memo1.lines.add('Die Antwort ist '+inttostr(res));

  
  memo1.lines.add('Wir senden: 10');
  //function postmessage(wnd:HWND; MessageID:Integer; WParam:Integer; LParam:Integer): Boolean;
  Erfolg:=Postmessage(self.handle,WM_myMessage,10,0);
  if Erfolg then memo1.lines.add('Die Antwort ist erfolgreich gesendet')
            else memo1.lines.add('Die Antwort ist nicht gesendet');
end;

procedure TForm1.getMyMessage(var msg:TMessage);
begin
  memo1.lines.add(inttostr(msg.wparam)+' empfangen.');
  msg.result:=msg.wparam+1; //Das ist die Antowrt, welche man mit Sendmessage auch zurückbekommt.
end;

Editas war der falsche Button
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Wotan89

Registriert seit: 20. Nov 2007
77 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Windows Messages - Tutorial?

  Alt 30. Nov 2007, 15:08
Wenn ich jetzt zwei verschiedene eigen programmierte Programme habe, welche beide auf den Messagetyp reagieren sollen, muss ich dann die Message irgendwie registrieren oder kann ich die dann trotzdem so einfach verwenden, wie du es beschrieben hast?(Ich wollte einen integer-Wert übertragen)
  Mit Zitat antworten Zitat
BloodySmartie
(Gast)

n/a Beiträge
 
#4

Re: Windows Messages - Tutorial?

  Alt 30. Nov 2007, 15:15
Hmm, ich würd vor allem gern Messages für andere Adressaten als mein eigenes Programm mitlesen. Ganz speziell möchte ich ans Handle eines x-beliebigen Fensters kommen wenn es mit der Maus angeklickt wird.

Danke schonmal für Deine ausführliche Erläuterung und das Beispiel! Ich werd mich heute Abend mal ransetzen*händereib*
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Windows Messages - Tutorial?

  Alt 30. Nov 2007, 15:26
Zitat von Wotan89:
Wenn ich jetzt zwei verschiedene eigen programmierte Programme habe, welche beide auf den Messagetyp reagieren sollen, muss ich dann die Message irgendwie registrieren oder kann ich die dann trotzdem so einfach verwenden, wie du es beschrieben hast?(Ich wollte einen integer-Wert übertragen)
Nö, du musst nix registrieren. Da du die Message ja direkt an das Fenster schickst (welcher Process, spielt keine Rolle) regiert auch nur dieses Fenster darauf (oder eben nicht, wenn für die MessageID kein Code vorliegt)
Wenn du (als Fenster) Post im Briefkasten hast - egal ob Normalbrief, Eilbrief, Telegramm oder Maxibrief (MEssageID) - sollte sie nicht dein Nachbar lesen
Es gibt die Möglichkeiten Messages zu registrieren. Das braucht man eigentlich nur für Broadcast (aber da auch nicht wirklich)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Wotan89

Registriert seit: 20. Nov 2007
77 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Windows Messages - Tutorial?

  Alt 30. Nov 2007, 15:58
Dankeschön, du hast mir sehr geholfen. ICh meine, sowas ist sehr einfach, man muss nur an die richtige Quelle kommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Windows Messages - Tutorial?

  Alt 30. Nov 2007, 23:50
Zitat von BloodySmartie:
Ganz speziell möchte ich ans Handle eines x-beliebigen Fensters kommen wenn es mit der Maus angeklickt wird.
Dazu guck dir mal MSDN-Library durchsuchenWindowFromPoint an.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#8

Re: Windows Messages - Tutorial?

  Alt 30. Nov 2007, 23:58
Moin, Moin,
es wird jetzt ein wenig speziell und trifft nicht mehr ganz die Ausgangsfrage. Ich würde mich auch für einen Lesestoff zu diesem Thema interessieren. Da ich gern mal in der Badewanne oder im Bett lese, sollte es möglichst ein BUCH sein - hat jemand eine Empfehlung parat?
Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Windows Messages - Tutorial?

  Alt 1. Dez 2007, 00:10
Drucks dir aus Win32API_Tutorials_pdf.pdf. Sind nur 278 Seiten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.993 Beiträge
 
Delphi 7 Professional
 
#10

Re: Windows Messages - Tutorial?

  Alt 1. Dez 2007, 00:13
Joooo, Michael, das ist 'ne Idee ...
Gute Nacht Zusammen!
Ralph
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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