![]() |
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 14:27 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