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 Message abfangen und nicht weiter geben (https://www.delphipraxis.net/132721-message-abfangen-und-nicht-weiter-geben.html)

cookie22 18. Apr 2009 01:21


Message abfangen und nicht weiter geben
 
hallo,

ich möchte zwei messages abfangen und nicht zu meinem edit durchlassen, wie kann ich das weiter geben der nachricht verhinden.

Delphi-Quellcode:
procedure TEdit.WndProc(var msg: TMessage);
begin
  case Msg.Msg of
    WM_KEYUP, WMKEYDOWN:
    begin
      // Was muss ich hier tun? 
    end
    else
      inherited WndProc(msg);
  end;
...
end;
was muss ich hier tun damit die eingaben nicht in meinem edit ankommen. :gruebel:

MfG,
cookie

Sunlight7 18. Apr 2009 03:03

Re: Message abfangen und nicht weiter geben
 
Moin,

wenn Du gar keine Eingabe erlauben willst solltest Du Delphi-Referenz durchsuchenReadOnly vom TEdit auf True setzen.
Willst Du nur bestimmte Tasten filtern, dann mußt Du MSDN-Library durchsuchenWM_CHAR abfangen.

Zitat:

Zitat von cookie22
// Was muss ich hier tun?

In der Konstelation, wie Du das machst, gar nix :mrgreen:

cookie22 18. Apr 2009 03:34

Re: Message abfangen und nicht weiter geben
 
wenn ich auf der mainform eine TApplicationEvents kompo platziere, und folgenes mache geht das auch.

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (msg.message = WM_KEYDOWN) or (msg.message = WM_KEYUP) then
    if GetMessageExtraInfo = 200 then
      handled := True;
end;
das muss doch auch in der kompo selbst möglich sein.

jaenicke 18. Apr 2009 04:11

Re: Message abfangen und nicht weiter geben
 
Was möchtest du denn erreichen?

cookie22 18. Apr 2009 12:32

Re: Message abfangen und nicht weiter geben
 
das die message genauso behandelt wird wie in TApplicationEvents und die eingabe nicht im edit ankommt, jenachdem was die auswertung von GetMessageExtraInfo ergibt.

Sunlight7 18. Apr 2009 12:56

Re: Message abfangen und nicht weiter geben
 
Ich weiß jetzt grad nicht, wann da GetMessageExtraInfo den Wert 200 liefert, aber ich habs mit keybd_event simuliert und da funkt dann folgende Zeilen:

Delphi-Quellcode:
...
private
  IgnoreMe:Boolean;
...

procedure TEdit.WndProc(var Message:TMessage);
begin
   Case Message.Msg of
      WM_CHAR: If IgnoreMe then begin
                  IgnoreMe:=False;
                  Exit;
               end;
      WM_KEYDOWN: If GetMessageExtraInfo=200 then IgnoreMe:=True;
   end;

   inherited WndProc(Message);
end;

cookie22 18. Apr 2009 16:33

Re: Message abfangen und nicht weiter geben
 
200 war da nur n beispiel, GetMessageExtraInfo gibt im allgemeinen 0 wieder, ausser du markierst es selbst.

ich dachte wenn ich WM_KEYDOWN und WM_KEYUP irgendwie behandele brauche ich WM_CHAR garnicht abfangen. Aber so müste es auch gehen.

Apollonius 18. Apr 2009 16:39

Re: Message abfangen und nicht weiter geben
 
WM_CHAR wird durch TranslateMessage gepostet, also bevor die WM_KEYDOWN-Nachricht zum Edit gelangen konnte.

cookie22 18. Apr 2009 16:45

Re: Message abfangen und nicht weiter geben
 
wieso kann man die sache dann so abfangen?

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (msg.message = WM_KEYDOWN) or (msg.message = WM_KEYUP) then
    if GetMessageExtraInfo = 200 then
      handled := True;
end;
oder versteh ich da was nicht richtig? :gruebel:

Apollonius 18. Apr 2009 16:47

Re: Message abfangen und nicht weiter geben
 
Schau mal in Forms.TApplication.ProcessMessage:
Delphi-Quellcode:
Handled := False;
if Assigned(FOnMessage) then FOnMessage(Msg, Handled);
if not IsPreProcessMessage(Msg) and not IsHintMsg(Msg) and
  not Handled and not IsMDIMsg(Msg) and
  not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
begin
  TranslateMessage(Msg);
  if Unicode then
    DispatchMessageW(Msg)
  else
    DispatchMessage(Msg);
end;


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