Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WM_APPCOMMAND - Nur benötigte Commandos abfangen?! (https://www.delphipraxis.net/120035-wm_appcommand-nur-benoetigte-commandos-abfangen.html)

chri_ri 4. Sep 2008 19:43


WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
Also wie kann ich WM_APPCOMMAND so behandeln, dass ich nicht einfach alle Messages abfange, sondern nur die, die ich wirklich benötige und die anderen völlig unberührt bleiben, so als ob mein prog keinen Focus hätte??

meine Frage bezieht sich auf den Thread: http://www.delphipraxis.net/internal...t.php?t=141690

Ja ich weiß, dass mein Vorgehen mit den Threads unbeliebt ist aber ich weiß mir nichtmehr anders zu helfen. Doku spuckt mir auch nicht das aus, was ich brauche. Und alle anderen Threads beziehen sich nur dazu, wie man WM_APPCOMMAND's überhaupt nutzen kann.

Schonmal hoffentlich Big THX im Vorraus und nochmals Thx für das Verständnis!



mfg. chri_ri

sirius 4. Sep 2008 20:01

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
Hast du das hier beachtet?
Zitat:

Zitat von msdn
If a child window does not process this message and instead calls DefWindowProc, DefWindowProc will send the message to its parent window. If a top level window does not process this message and instead calls DefWindowProc, DefWindowProc will call a shell hook with the hook code equal to HSHELL_APPCOMMAND.

...

Unlike other windows messages, an application should return TRUE from this message if it processes it. Doing so will allow software that simulates this message on Microsoft Windows systems earlier than Windows 2000 to determine whether the window procedure processed the message or called DefWindowProc to process it.


chri_ri 4. Sep 2008 22:02

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
hm also soll ich in dem case bei else einfach result := false oder so ähnlich zurück geben, damit es ignoriert wird von meinem tool?



mfg. chri_ri

chri_ri 4. Sep 2008 22:21

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
Also das will irgendwie so nicht funktionieren:

Delphi-Quellcode:
procedure TMain.MultiKey(var Msg: TMessage);
begin
  case Msg.lParam of
    $B0000: if radio <> 3 then Switch(radio + 1);
    $C0000: if radio <> 0 then Switch(radio - 1);
    $D0000: if btn_play.Caption = 'II' then btn_play.Click;
    $E0000: btn_play.Click;
    else begin
      Msg.Result := 0;
    end;
  end;
end;
Die Funktionen in meinem Tool funktionierten zwar wieder wunderbar aber irgendwie werden die nicht benötigten nicht weitergereicht.
Was mache ich falsch?

Und sorry für den Push. Erstmal thx!



mfg. chri_ri

sirius 5. Sep 2008 06:27

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
und die defwindowproc vielleicht noch aufrufen (im else)

chri_ri 5. Sep 2008 11:57

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
@sirius:
Erstmal Thx, aber wie benutze ich das?

so:?
Delphi-Quellcode:
    else Msg.Result := DefWindowProc(0, msg.Msg, msg.WParam, msg.LParam);
Hab jetzt übrigens meinen code ein wenig geände (Den Message-Typ und im Case von wparam zu lparam):
Delphi-Quellcode:
procedure TMain.MultiKey(var Msg: TMessage);
begin
  case Msg.lParam of
    $B0000: if radio <> 3 then Switch(radio + 1);
    $C0000: if radio <> 0 then Switch(radio - 1);
    $D0000: if btn_play.Caption = 'II' then btn_play.Click;
    $E0000: btn_play.Click;
    else Msg.Result := DefWindowProc(0, msg.Msg, msg.WParam, msg.LParam);
  end;
end;
Bin noch relativ Neuling auf dem Gebiet der Messages.



mfg. chri_ri

sirius 5. Sep 2008 12:00

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
anstatt 0 nimmst du self.handle.

Edit:
Als Alternative kannst du auch mal versuchen die Methode DefaultHandler (der VCL) aufzurufen.

nicodex 5. Sep 2008 12:01

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
Zitat:

Zitat von chri_ri
[...] aber irgendwie werden die nicht benötigten nicht weitergereicht.

Sollte es bei Delphi nicht ausreichen, inherited aufzurufen?

chri_ri 5. Sep 2008 12:21

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
Geil Danke, ihr seid die besten!^^ Ich weiß schon, warum ich in diesem Forum poste^^

Also habe jetzt beide Varianten probiert. inherited und self.handle geht^^ Wie immer ist die einfachste die beste Lösung XD Naja ich denke sowieso imma bissl kompliziert XD

Also hier nochmal die komplette Lösung für alle, die eventuell selber mal sowas benötigen:

Delphi-Quellcode:
type
  TMain = class(TForm)
    procedure MultiKey(var Msg: TMessage); message WM_APPCOMMAND;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure TMain.MultiKey(var Msg: TMessage);
begin
  case Msg.lParam of
    $B0000: if radio <> 3 then Switch(radio + 1);
    $C0000: if radio <> 0 then Switch(radio - 1);
    $D0000: if btn_play.Caption = 'II' then btn_play.Click;
    $E0000: btn_play.Click;
    else begin
      inherited;
      // oder Msg.Result := DefWindowProc(self.Handle, msg.Msg, msg.WParam, msg.LParam);
    end;
  end;
end;


mfg. chri_ri

sirius 5. Sep 2008 12:33

Re: WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
 
:gruebel: bei mir (D7) gibt es keine inhertied Methode mit WM_APPCommand, aber wenn es funktioniert....


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.
Seite 1 von 2  1 2      

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