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 2 von 2     12   
Benutzerbild von nicodex
nicodex

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

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

  Alt 5. Sep 2008, 14:06
Zitat von sirius:
bei mir (D7) gibt es keine inhertied Methode mit WM_APPCommand, aber wenn es funktioniert....
Der Compiler macht was nötig ist, ohne den Entwickler mit den Details zu nerven (wenn es eine gibt, dann wird sie auch aufgerufen).
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

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

  Alt 5. Sep 2008, 14:24
Ich wollte ja nur grad nachsehen, was dort gemacht wird. Aber ich habe keine Methode gefunden.
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
 
#13

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

  Alt 5. Sep 2008, 17:15
Zitat von sirius:
Ich wollte ja nur grad nachsehen, was dort gemacht wird. Aber ich habe keine Methode gefunden.
Haltepunkt setzen und das CPU-Fenster öffnen (normalerweise [Strg+Alt+C]).

ps: "..., call dword ptr [ecx-$10]" ist "DefaultHandler(Msg)".
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

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

  Alt 5. Sep 2008, 17:27
Dazu müsste ich erstmal das Programm schreiben.

inherited (für Messages) ist im Standardfall der Defaulthandler? Ist ja eine ganz neue Erkenntnis.


Edit: Das ist ja interessant. Das musste ich jetzt doch einmal durchtesten. Der Defaulthandler wird schon in TObject als virtuelle Methode deklariert und wird für Message-Methoden (welche ja dynamisch sind) immer bei inherited aufgerufen. Weiß nicht, ob das so bekannt ist. Mir war es nicht bekannt. Denn bisher wusste ich nur, dass ein inherited nur ausgeführt wird, wenn:
  • bei statischen oder virtuellen Methoden eine Vorfahrklasse eine Methode mit gleichem Header+Name hat
  • bei dynamischen Methoden eine Vorfahrklasse eine Methode mit gleichem Header+ (Index bzw. Name) hat
Message-Methoden sind ja dynamische Methoden bei denen man den Index über die Konstante (e.g. WM_User) vorgibt (Deswegen lassen sie sich ja mittels Dispatch so leicht auffinden). Sie haben aber noch den Unterschied zu anderen dynamsichen Methoden, dass ein Vorfahr immer der Defaulthandler ist. Und das von jeder Message-Methode.

==>Also neben der Methode Dispatch ist auch noch die Methode DefaultHandler (beide von TObject implementiert) wichtig für Message-Methoden.
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
 
#15

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

  Alt 5. Sep 2008, 17:40
Zitat von sirius:
inherited (für Messages) ist im Standardfall der Defaulthandler?
Jupp. Die Funktion ist übrigens virtuell, damit man sie überschreiben und Nachrichten behandeln kann, die keine festen Nachrichten-IDs haben (RegisterWindowMessage).
"inherited" ist die beste Lösung, da der Compiler sich darum kümmert, was aufgerufen werden muss.
Bei WM_ACTIVATE wäre es (in meiner Delphi-Version) TCustomForm.WMActivate() - aber das braucht den Entwickler nicht zu interessieren (und kann sich auch von Delphi-Version zu Delphi-Version ändern). Würdest du DefWindowProc() aufrufen, dann würdest du die "Vererbung" aufbrechen und diverse Handler übergehen.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

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

  Alt 5. Sep 2008, 17:46
Ich hab das nochmal in meinem Edit zusammengefasst. Das ist ein etwas anderes Verhalten als ich von inherited erwartet hätte. Das kann man ja in Zuklunft sicher gewinnbringend einsetzen.
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
 
#17

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

  Alt 6. Sep 2008, 14:28
Hm ist ja interessant. Also ist inherited; die beste Lösung, weil die dem Compiler mehr Spielraum lässt um die optimalere Lösung zu finden. Ok, habe sowieso inherited genommen, schon weils einfach "smaller" ist. Aber ertsmal Thx für die Zusatzinfo am Rande.



mfg. chri_ri
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:19 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