AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WM_APPCOMMAND - Nur benötigte Commandos abfangen?!
Thema durchsuchen
Ansicht
Themen-Optionen

WM_APPCOMMAND - Nur benötigte Commandos abfangen?!

Ein Thema von chri_ri · begonnen am 4. Sep 2008 · letzter Beitrag vom 6. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#1

WM_APPCOMMAND - Nur benötigte Commandos abfangen?!

  Alt 4. Sep 2008, 20:43
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 4. Sep 2008, 21:01
Hast du das hier beachtet?
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#3

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

  Alt 4. Sep 2008, 23:02
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
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#4

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

  Alt 4. Sep 2008, 23:21
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 = 'IIthen 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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 5. Sep 2008, 07:27
und die defwindowproc vielleicht noch aufrufen (im else)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#6

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

  Alt 5. Sep 2008, 12:57
@sirius:
Erstmal Thx, aber wie benutze ich das?

so
    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 = 'IIthen 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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

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

  Alt 5. Sep 2008, 13:00
anstatt 0 nimmst du self.handle.

Edit:
Als Alternative kannst du auch mal versuchen die Methode DefaultHandler (der VCL) aufzurufen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 5. Sep 2008, 13:01
Zitat von chri_ri:
[...] aber irgendwie werden die nicht benötigten nicht weitergereicht.
Sollte es bei Delphi nicht ausreichen, inherited aufzurufen?
  Mit Zitat antworten Zitat
Benutzerbild von chri_ri
chri_ri

Registriert seit: 16. Okt 2007
Ort: Markkleeberg
37 Beiträge
 
Delphi 7 Enterprise
 
#9

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

  Alt 5. Sep 2008, 13:21
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 = 'IIthen 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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

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

  Alt 5. Sep 2008, 13:33
bei mir (D7) gibt es keine inhertied Methode mit WM_APPCommand, aber wenn es funktioniert....
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14: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