Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wo muss die WNDProc eingebunden werden? (https://www.delphipraxis.net/23669-wo-muss-die-wndproc-eingebunden-werden.html)

Chris P 7. Jun 2004 18:08


Wo muss die WNDProc eingebunden werden?
 
Hi Leute,

soweit ich weiß, dient doch die Prozedur WNDProc zur
Behandlung von Windowsbotschaften.

Aber wo muss ich diese in mein Programm einbinden
damit Windows die Botschaften schicken kann??

Luckie 7. Jun 2004 18:23

Re: Wo muss die WNDProc eingebunden werden?
 
Wenn du nicht selbst definierte Nachrichten abfangen willst oder die standard Nachrichten von Windows umbiegen willst, dann brauchst du gar nichts machen, macht alles die VCL für dich.

Delphi-Quellcode:
const
  MY_MESSAGE = WM_USER + 1974;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure WndProc(var msg: TMessage); override;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var msg: TMessage);
begin
  inherited;
  case msg.Msg of
    MY_MESSAGE: Showmessage(PChar(msg.LParam));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Text: String;
begin
  Text := 'Hello world';
  SendMessage(Handle, MY_MESSAGE, 0, Integer(PChar(Text)));
end;
Mal eben so in einer Minute hingerotzt. :roll:

Chris P 7. Jun 2004 18:25

Re: Wo muss die WNDProc eingebunden werden?
 
Wozu muss denn inherited aufgerufen werden?

Luckie 7. Jun 2004 18:30

Re: Wo muss die WNDProc eingebunden werden?
 
Machst du das nicht werden die geerbeten Methoden nicht aufgerufen und alle Nachrichten außer deiner werden nicht korrekt bearbeitet, was katastrophale Folgen für dein Fenster haben dürfte.

Chris P 7. Jun 2004 18:35

Re: Wo muss die WNDProc eingebunden werden?
 
Ok, aber eine Frage hab ich noch:

Wenn Windows zB. eine WM_MOUSEMOVE-Botschaft schickt.
Wie kann ich diese abfangen? Steht sie in Msg.wParam oder Msg.lParam oder woanders?

Christian Seehase 7. Jun 2004 18:48

Re: Wo muss die WNDProc eingebunden werden?
 
Moin Chris,

schau Dir dazu doch mal die Felder von TMessage an, und, ggf. noch ein paar beliebige Messages und deren Parameter.

Luckie 7. Jun 2004 18:48

Re: Wo muss die WNDProc eingebunden werden?
 
Sie steht in msg.Msg. im wParam bzw lParam stehen Nachrichten spezifische Informationen: MSDN-Library durchsuchenwm_mousemove.

Chris P 7. Jun 2004 18:50

Re: Wo muss die WNDProc eingebunden werden?
 
Ok, dass hat mir geholfen... Danke :-D

neolithos 7. Jun 2004 20:48

Re: Wo muss die WNDProc eingebunden werden?
 
Eine andere Möglichkeit

Delphi-Quellcode:
type
  TMyMessage = packed record // statt TMessage
    dwMsg,
    reserved : Cardinal;
    cStr : PChar;
  end;

const
  MY_MESSAGE = WM_USER + 1974;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure MyMessage(var msg : TMyMessage); message MY_MESSAGE;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.MyMessage(var msg: TMyMessage);
begin
  Showmessage(msg.cStr);
  inherited; // optional: ruft den Message DefaultHandler auf und der ruft WndProc
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Text: String;
begin
  Text := 'Hello world';
  SendMessage(Handle, MY_MESSAGE, 0, Integer(PChar(Text)));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 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