![]() |
WndProc funktioniert nicht mit Buttons auf Formular
Hi,
ich möchte alle Clicks auf ein Formular mitloggen. Dabei soll u. a. auch der Komponentenname mitgeloggt werden. Ich wollte dies mit WndProc des Formulars machen, doch leider werden nur Clicks auf die Formularebene oder auf labels registriert. Für Clicks auf Buttons wird mein WndProc NICHT aufgerufen - kann mir jemand sagen, warum das so ist (und wie ich es besser machen kann...)
Delphi-Quellcode:
Schon mal danke
procedure TForm1.WndProc(var Message: TMessage);
var MausPos: TPoint; control: TControl; begin If Message.Msg = WM_LBUTTONDOWN then begin GetCursorPos(MausPos); MausPos := ScreenToClient(MausPos); control := form1.ControlAtPos(MausPos, false, true); if control = nil then debugdatei.schreiben('WndProc: WM_LBUTTONDOWN --- nil ---') else debugdatei.schreiben('WndProc: WM_LBUTTONDOWN ' + control.Name); end; inherited WndProc(Message); end; Poolspieler |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Probier mal, KeyPrewiew des Formulars auf True zu setzen ;)
ADD: Muss natürlich KeyPreview heißen, ist aber trotzem falsch ... (@Mirage. Eine IDE mit Rechtschreibkorrektur :shock: :mrgreen: ) |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Hi,
danke, aber es bleibt leider beim gleichen Verhalten :cry: |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Zitat:
Zitat:
mfG mirage228 |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Zitat:
Und ansonsten mußt du nur mal nachdenken!: Fenster können sich überlappen und können andere Fenster enthalten. Wenn das Klickereignis eines Buttons nun aber vom Formular abgefangen würde, käme es ja nicht beim Button an! Damit aber das Eltern-Objekt weiß, daß der Button geklickt wurde, sendet der Button WM_COMMAND an das Eltern-Objekt. Nachtrag: Schonmal einen lokalen Fensterhook in Erwägung gezogen? |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Hallo das Problem hatte ich auch bei mir war es ein Panel das ich abfragen wollte
Ich habe lange gesucht und habe dann rausgefunden das "Message.Msg = WM_PARENTNOTIFY" bei klick auf mein Panel war und "Message.WPARAM" dann "WM_LBUTTONDOWN" war also probier mal folgendes
Delphi-Quellcode:
procedure TForm1.WndProc(var Message: TMessage);
var MausPos: TPoint; control: TControl; begin If (Message.Msg = WM_LBUTTONDOWN) or ((Message.Msg = WM_PARENTNOTIFY) and (Message.wParam = WM_LBUTTONDOWN)) then begin GetCursorPos(MausPos); MausPos := ScreenToClient(MausPos); control := form1.ControlAtPos(MausPos, false, true); if control = nil then debugdatei.schreiben('WndProc: WM_LBUTTONDOWN --- nil ---') else debugdatei.schreiben('WndProc: WM_LBUTTONDOWN ' + control.Name); end; inherited WndProc(Message); end; |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Hallo TeTSuO,
wenn ich Dich kennen würden, dann würde ich Dir jetzt ein Bier ausgeben!!! :-D :) :P Du hattest recht und es funktioniert wunderbar - aber wie kommt man denn auf diese Lösung? Hast Du dafür irgendwo eine tolle Doku gefunden? Vielen Dank und Gruß Poolspieler |
Re: WndProc funktioniert nicht mit Buttons auf Formular
Zitat:
![]() Wenn du es installiert hast, findest du die entsprechenden Infos unter diesen URLs:
Da man sich darauf nicht bei allen Child-Controls verlassen kann, wurde dies (zumindest von mir) oben noch nicht angeführt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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