![]() |
activebar mousemenu deaktivieren ??
Hallöchen
Ich hab folgendes kurzes Problem .. Wie deaktiviere ich das Mousemenu das normalerweise erscheint .. wenn man mit der rechten maustaste auf den activebar eines Forms klickt?? |
Hi,
Was verstehst du unter 'activebar'? Meinst du die Titelleiste? |
ja genau die .. :)
|
Hi,
Dazu musst du einige Nachrichten abfangen: :idea:
Code:
type
TForm1 = class(TForm) private procedure WMNcrButtonDown(var Msg: TMessage); message WM_NCRBUTTONDOWN; procedure WMSyscommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; procedure WMNCLButtonDblClk(var Msg: TMessage); message WM_NCLBUTTONDBLCLK; public end; var Form1: TForm1; implementation {$R *.DFM} // Rechte Maustaste auf Titelleiste unterdrücken. procedure TForm1.WMNcrButtonDown(var Msg: TMessage); begin if Msg.wParam = HTCAPTION then Msg.Result := 0; end; // Evtl Doppelklick auf App. Icon unterdrücken procedure TForm1.WMNCLButtonDblClk(var Msg: TMessage); begin if Msg.wParam = HTCAPTION then Msg.Result := 0; end; // Klick auf App. Icon unterdürcken procedure TForm1.WMSyscommand(var Msg: TWMSysCommand); begin case (Msg.CmdType and $FFF0) of SC_MOUSEMENU: Msg.Result := 0; else inherited; end; end; |
Danke!! funktioniert gut !!!
Hab nur n kleines Problem .. ich versteh noch nich ganz was da an sich passiert .. hinsichtlich der verschiedenen Parameter .. Ich denk ich werd mich da mal nach n entsprechenden Tutorial umsehen müssen .. |
|
Also:
WM_NCRBUTTONDOWN ist ein Klick mit der rechten Maustaste in die NonClientAera des Fensters, also in den Nicht-Anwendungsbereich. der wParam der Nachricht ist das Ziel wohin geklickt wurde. Wurde auf die Titelleoste geklickt (HTCAPTION), wird die Nachricht umgebeogen bzw verschluckt, in dem nicht daraufreagiert wird. Gleiche Vorgehen bei WM_NCLBUTTONDBLCLK. Wird mit WM_SYSCOMMAND normalerweise das Mausmenü geöffnet, wird das auch wieder verschluckt. |
hui .. danke das hat geholfen ..
|
Hallo Ernie,
eigentlich sind die Parameter von der Bezeichnung her recht aussagekräftig: WM_NCRBUTTONDOWN = gedrückte rechte Maustaste WM_SYSCOMMAND = Systemmenü WM_NCLBUTTONDBLCLK = Doppelklick mit der linken Taste Windows-Messages haben zwei Parameter wParam und lParam. Wenn der hier in Frage kommende Parameter HTCAPTION ist, war das Ziel der Aktion die Titelleiste. Durch Result := 0 wird die Message gelöscht. Das Fenster erfährt nichts mehr davon, dass seine Titelleiste angeklickt wurde. Der Klick auf das Systemmenü muss anders behandelt werden, um nicht andere Aufrufe ebenfalls zu unterdrücken. Weitergehende Infos dazu findest Du, wie toms schon schrieb, bei Microsoft - vor allem kannst Du dort alle möglichen Parameter nachschlagen. Tutorials zu WinAPI kannst Du auf ![]() :idea: :coder: |
Na, da war Luckie zur gleichen Zeit dran, wie ich :P
:coder: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:38 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