AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Message abfangen und nicht weiter geben
Thema durchsuchen
Ansicht
Themen-Optionen

Message abfangen und nicht weiter geben

Ein Thema von cookie22 · begonnen am 18. Apr 2009 · letzter Beitrag vom 18. Apr 2009
Antwort Antwort
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#1

Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 02:21
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.

MfG,
cookie
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#2

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 04:03
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 von cookie22:
// Was muss ich hier tun?
In der Konstelation, wie Du das machst, gar nix
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 04:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 05:11
Was möchtest du denn erreichen?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 13:32
das die message genauso behandelt wird wie in TApplicationEvents und die eingabe nicht im edit ankommt, jenachdem was die auswertung von GetMessageExtraInfo ergibt.
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#6

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 13:56
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;
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 17:33
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.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 17:39
WM_CHAR wird durch TranslateMessage gepostet, also bevor die WM_KEYDOWN-Nachricht zum Edit gelangen konnte.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 17:45
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?
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Message abfangen und nicht weiter geben

  Alt 18. Apr 2009, 17:47
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;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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