Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Halb VCL, halb nonVCL (https://www.delphipraxis.net/21174-halb-vcl-halb-nonvcl.html)

gerritlober 28. Apr 2004 20:18


Halb VCL, halb nonVCL
 
Hallo,

wie kann ich die Standardnachrichten vom Betriebssystem
Delphi abarbeiten lassen, aber spezielle Nachrichten selbst behandeln?

Christian Seehase 28. Apr 2004 20:23

Re: Halb VCL, halb nonVCL
 
Moin Gerrit,

ich hoffe mal das richtig verstanden zu haben:

Du könntest die WndProc überschreiben.

Delphi-Quellcode:
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;
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.

tommie-lie 28. Apr 2004 20:26

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 ;-)

gerritlober 28. Apr 2004 20:28

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?

Christian Seehase 28. Apr 2004 20:31

Re: Halb VCL, halb nonVCL
 
Moin Gerrit,

schau Dir doch mal tommie-lies Vorschlag, und TMessage an.
Damit sollte das lösbar sein.

gerritlober 28. Apr 2004 20:38

Re: Halb VCL, halb nonVCL
 
Ja, und wie kann ich da nun auf lParam und WParam zugreifen?

Christian Seehase 28. Apr 2004 20:39

Re: Halb VCL, halb nonVCL
 
Moin Gerrit,

wenn Du Dir TMessage angeschaut hast, müsstest Du das eigentlich wissen. ;-)

gerritlober 28. Apr 2004 20:44

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;

tommie-lie 28. Apr 2004 21:16

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