Halb VCL, halb nonVCL
Hallo,
wie kann ich die Standardnachrichten vom Betriebssystem Delphi abarbeiten lassen, aber spezielle Nachrichten selbst behandeln? |
Re: Halb VCL, halb nonVCL
Moin Gerrit,
ich hoffe mal das richtig verstanden zu haben: Du könntest die WndProc überschreiben.
Delphi-Quellcode:
ob Du nun tatsächlich immer die geerbte WndProc aufrufst/aufrufen musst, hängt von der jeweiligen Message ab, und was Du mit der Abfrage bezweckst.
type
TForm1 = class(TForm) private { Private-Deklarationen } protected procedure WndProc(var msg : TMessage); override; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.WndProc(var msg : TMessage); begin // Message abfangen // z.B. if msg.Msg = ..... then begin // Message behandeln end; inherited WndProc(msg); end; |
Re: Halb VCL, halb nonVCL
Alternativ kannst du dir mal in der Online-Hilfe das Keyword "message" anschauen (eintippen, cursor drauf, F1), ist vielleicht ein wenig übersichtlicher als die WndProc ;-)
|
Re: Halb VCL, halb nonVCL
Ich habe eine Nachricht selbst erstellt, sie hat die Konstante WM_TEST und im wParam auch Daten, wie kann ich diese Nachricht verarbeiten?
|
Re: Halb VCL, halb nonVCL
Moin Gerrit,
schau Dir doch mal tommie-lies Vorschlag, und TMessage an. Damit sollte das lösbar sein. |
Re: Halb VCL, halb nonVCL
Ja, und wie kann ich da nun auf lParam und WParam zugreifen?
|
Re: Halb VCL, halb nonVCL
Moin Gerrit,
wenn Du Dir TMessage angeschaut hast, müsstest Du das eigentlich wissen. ;-) |
Re: Halb VCL, halb nonVCL
Und warum bekomme ich nun bei message die Meldung Unbekannter bezeichner?
Delphi-Quellcode:
procedure TMainWindow.WMChar(var mMessage: TWMChar); message WM_TEST;
begin end; |
Re: Halb VCL, halb nonVCL
Ich frage mich, was an dem Beispiel aus der Delphi-Hilfe so falsch gelesen werden kann...
Das Message muss in die Deklaration der Methode, nicht in deren Implementation. Also suchst du ganz oben in der Unit nach dem "type", was irgenwo gefolgt wird von der Struktur deiner TForm1. Dort ergänzt du wie bei jeder anderen Methode auch deinen eigenen Funktionsnamen und machst dahinter ein " message WM_TEST;". Die Implementation erfolgt dann ohne "message". Und wenn du direkt auf lParam und wParam zugreifen willst, solltest du nicht TWMChar nehmen, sondern die Basis"klasse" TMessage, die leitet nämlich nur die Felder der Windows-Message weiter, während Delphi bei den diversen TWMxxx-Records die Message bereits entsprechend vorbereitet und die Informationen passend weiterleitet. (Zugegeben, sowas steht nicht in der Hilfe, aber dafür der Rest...) Und jetzt schütten wir erlangtes Wissen in einen großen Topf voll Gemüsebrühe und rühren kräftig um, bei kleiner Flamme kurz aufköcheln lassen, fertig zum Servieren:
Delphi-Quellcode:
unit Unit1;
interface const WM_TEST = WM_USER + 1; {...} type TForm1 = class(TForm) private { Private declarations } public { Public declarations } procedure OnTest(var Message: TMessage); message WM_TEST end; {...} implementation {...} procedure TForm1.OnTest(var Message: TMessage); begin ShowMessage(IntToStr(Message.lParam) + ' - ' + IntToStr(Message.wParam)); end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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