![]() |
Abfangen einer Message ans eigene Programm
Nabend!
Wie kann ich eine Message, die an mein erstelltes Delphi-Programm geschickt wurde abfangen und in einem Memofeld auflisten lassen (z.B. auf Knopfdruck)??? Ich hoffe, ihr versteht, was ich meine. Falls nicht, könnt ihr ja nachfragen. Bis dann P.S. Bin ich zu doof, oder kann mir mal jemand sagen, wie man hier Smilies einfügt? Liegt's vielleicht am Browser, dass es nicht klappt? Benutze Opera. |
Re: Abfangen einer Message ans eigene Programm
Soll da über Netzwerk oder so ne Message geschickt werden oder wie soll dein Prgramm ne Message empfangen? Dazu musste dann die entsprechende Komponente aufs Formular tun.
Was willst du eigentlich coden? :spin2: Wegen den Smileys...mussteigentlich nur links drauf drücken, dann haste den Code vom Smiley hier drin. MfG Niels |
Re: Abfangen einer Message ans eigene Programm
Hi,
die Frage ist, was du nun meinst: meinst du eine Nachricht, die über Netzwerk an deinen Rechner gesendet wurde, oder eine Nachricht, du Windows oder ein anderes Control/Window an dein Fenster gesendet hat? Chris |
Re: Abfangen einer Message ans eigene Programm
/me verschiebt das mal nach WinAPI. :wink:
Mit freundlichen Grüßen, Ihre administrative Service-Kraft |
Re: Abfangen einer Message ans eigene Programm
Also, ich meine eine Message von Windows, z.B. ne System-message. :nerd:
(is ja blöd, das mit den Smilies liegt echt an Opera) |
Re: Abfangen einer Message ans eigene Programm
[offtopic]
Also am Opera im Allgemeinen liegt es unter Garantie nicht. Vielleicht hast Du ja Javascript ausgeschaltet? Ich bin jetzt mit dem aktuelle Opera (7.21) drin und die Smilies tun, wie sie sollen. :wink: [/offtopic] |
Re: Abfangen einer Message ans eigene Programm
Hi,
wusste ich es doch. :mrgreen: @Daniel: ;) .oO(Glück gehabt) Ich hoffe, dass ich jetzt zu so später Stunde keinen Fehler mehr mache, aber so sollte es gehen:
Delphi-Quellcode:
Chris
{Als Member von deines Forms}
procedure Abfangen(Msg: TMessage) message WM_DEINE_NACHRICHT; {...} procedure TfrmWin.Abfrangen(Msg: TMessage); begin {mach irgendwas. Nimm am Besten Msg zur Hilfe :-) } end; |
Re: Abfangen einer Message ans eigene Programm
Nicht als Member, als Methode.
|
Re: Abfangen einer Message ans eigene Programm
???
Das soll alles sein? damit kann ich jede beliebige Message an mein Programm abfangen? Entweder haben wir uns missverstanden oder ich bin echt zu blöde, das zu kapieren. Naja, werd's erstmal ausprobieren. MfG |
Re: Abfangen einer Message ans eigene Programm
Nein, nur eine Nachricht die WM_DEINE_NACHRICHT heißt. Alle anderen bleiben im "Sieb" nicht hängen.
|
Re: Abfangen einer Message ans eigene Programm
Hm :oops: (jetzt funzt das mit den Smilies endlcih auch :hello: )
Ich wollte eigentlich jede beliebige Nachricht abfangen, die an mein Programm gesendet wird. Genauer Wortlaut meiner Aufgabe: "Listing einer Routine, die auf Knopfdruck die Messages an das eigene Programm in einem TMemo-Feld auflistet" Also ich denke, dass damit jegliche Art von Messages gemeint is, die mein Programm empfangen kann. Nicht nur von mir eigens erstellte. :? |
Re: Abfangen einer Message ans eigene Programm
Hi,
@Luckie: danke für die Korrektur! Es gibt allerdings eine Möglichkeit ALLE Nachrichten abzufangen: die nennt sich nonVCL. Da du ja dort jede Nachricht, die dein Fenster erhält abfängst und dann verarbeitest. Allerdings kannst du nicht einfach eine Mischung aus nonVCL und VCL machen. Entweder oder. Chris |
Re: Abfangen einer Message ans eigene Programm
aaaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhhh
was soll das bedeuten? @Chakotay1308 |
Re: Abfangen einer Message ans eigene Programm
@Chakotay: Man kann auch die WndProc überschreiben, dann kommt man auch an alle Nachrichten dran. :wink:
Delphi-Quellcode:
type
TForm1 = class(TForm) ...; public { Public-Deklarationen } protected procedure WndProc(var msg: TMessage); override; end; [..] procedure TForm1.WndProc(var msg: TMessage); begin case msg.Msg of SPM_PROGRESS: // selbst definierte Nachricht1 begin ...; end; SPM_DONE: // selbst definierte Nachricht2 begin ...; end; end; inherited; end; |
Re: Abfangen einer Message ans eigene Programm
Hi Luckie,
bah ist ja widerlich! ;) Naja. Wenn du das sagst, dann wird das wohl stimmen! ;) Chris |
Re: Abfangen einer Message ans eigene Programm
:wiejetzt:
dazu hab ich einige fragen
Delphi-Quellcode:
spm-progress und spm_done sind selbstdefinierte nachrichten? das bedeutet, die muss ich selber vorher definieren, oder was? wenn ich aber keine selbstdefinierten nachrichten abfangen möchte sondern alle möglichen, z.b. bei der kommunikation mit windows, die nachrichten, die windows an mein progi schickt.
procedure TForm1.WndProc(var msg: TMessage);
begin case msg.Msg of SPM_PROGRESS: // selbst definierte Nachricht1 begin ...; end; SPM_DONE: // selbst definierte Nachricht2 begin ...; end; end; inherited; end; [edit=r_kerber]Delphi-Tags gesetzt! Mfg, r_kerber[/edit] |
Re: Abfangen einer Message ans eigene Programm
Na dann nimmst du die von Windows definierten. Zu finden im PSDK oder MSDN. Die von Windows fangen alle mit WM_ an, Control spezifische mit CB_ für Combobox, LB_ für Listbox usw.
Darf man mal fragen, was das werden soll? |
Re: Abfangen einer Message ans eigene Programm
Ist n Teil von nem Vortrag, den ich bald halten soll. :|
Und ich hab das Gefühl, den werd ich ganz schön in Sand setzen. Weil das is nich das einzige, wovon ich keine Ahnung hab. *grummel* Hm, hoffe, ich krieg da noch was hingezaubert. |
Re: Abfangen einer Message ans eigene Programm
Wie lautet das Thema des Vortrages und welchen Inhalt hat er? Geht es um die Funktionsweise von Windows, dann kuck mal hier:
![]() |
Re: Abfangen einer Message ans eigene Programm
ein Teil des Vortrages besteht auch aus der Kommunikation mit Windows, aber nicht nur. Nur davon hab ich am wenigsten Ahnung und dazu is auch am wenigsten in der Literatur zu finden.
|
Re: Abfangen einer Message ans eigene Programm
Dann sollte mein Link dir helfen.
|
Re: Abfangen einer Message ans eigene Programm
ja, danke :thuimb:
|
Re: Abfangen einer Message ans eigene Programm
So, habe mal auf die Schnelle was zusammen geschustert:
Delphi-Quellcode:
Im Memo wird die Konstate angezeigt und ihr nummerischer Wert.
type
TForm1 = class(TForm) Memo1: TMemo; private { Private-Deklarationen } public { Public-Deklarationen } procedure WndProc(var msg: TMessage); override; end; var Form1: TForm1; implementation {$R *.dfm} var bShow: Boolean = False; procedure TForm1.WndProc(var msg: TMessage); var s: string; begin case msg.Msg of WM_MOUSEMOVE: begin // leider gibt es keine Funktion, die den numerischen Wert der // Konstante umwandelt, deswegen alles von Hand und das macht es so // aufwendig s := 'WM_MOUSEMOVE'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; WM_ACTIVATE: begin s := 'WM_ACTIVATE'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; WM_CLOSE: begin s := 'WM_CLOSE'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); Sleep(2000); // 2 Sekunden warten, wir wollen noch was sehen. end; WM_LBUTTONDOWN: begin s := 'WM_LBUTTONDOWN'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; WM_LBUTTONUP: begin s := 'WM_LBUTTONUP'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; WM_MOVING: begin s := 'WM_MOVING'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; WM_SHOWWINDOW: begin s := 'WM_SHOWWINDOW'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); bShow := True; end; WM_SIZE: begin // vor WM_SHOWWINDOW existiert das Memo noch nicht!!! if bShow = True then begin s := 'WM_SIZE'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; end; WM_SYSCOMMAND: begin s := 'WM_SYSCOMMAND'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; WM_PAINT: begin s := 'WM_PAINT'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; end; // weiterleiten an die in der VCL eingebaute WndProc, // sonst reagiert unser Programm nicht mehr auf die abgefangenen Nachrichten inherited; end; |
Re: Abfangen einer Message ans eigene Programm
Ich danke dir!
Funktioniert auch (wer hätte das gedacht? :zwinker: ) Und wie kann ich einstellen, dass er damit erst startet, wenn ich auf einen Button clicke? (und dann auch wieder damit aufhört bei nochmaligem Klicken?) |
Re: Abfangen einer Message ans eigene Programm
Hmpf, Grundlagen.
Delphi-Quellcode:
var
bShow: Boolean = False; bStart: Boolean = False;
Delphi-Quellcode:
procedure TForm1.WndProc(var msg: TMessage);
var s: string; begin if bStart = True then begin case msg.Msg of WM_MOUSEMOVE: begin // leider gibt es keine Funktion, die den numerischen Wert der // Konstante umwandelt, deswegen alles von Hand und das macht es so // aufwendig s := 'WM_MOUSEMOVE'; Memo1.Lines.Add(s + '= '+IntToStr(msg.Msg)); end; [..] // weiterleiten an die in der VCL eingebaute WndProc, // sonst reagiert unser Programm nicht mehr auf die abgefangenen Nachrichten end; inherited; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin bStart := not bStart; end; |
Re: Abfangen einer Message ans eigene Programm
Das war ja auch meine Idee. Nur muss ich wohl irgendwo nen Fehler eingebaut haben. Hat nämlich erst nicht funktioniert. Aber jetzte. Nochmals vielen Dank! :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr. |
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