Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi activebar mousemenu deaktivieren ?? (https://www.delphipraxis.net/108-activebar-mousemenu-deaktivieren.html)

erniepb 11. Jun 2002 21:56


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??

toms 11. Jun 2002 22:12

Hi,

Was verstehst du unter 'activebar'?
Meinst du die Titelleiste?

erniepb 11. Jun 2002 22:23

ja genau die .. :)

toms 11. Jun 2002 22:34

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;

erniepb 11. Jun 2002 22:53

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 ..

toms 11. Jun 2002 22:59

Das beste "Tutorial" gibts hier:

http://msdn.microsoft.com/library/

Luckie 11. Jun 2002 23:12

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.

erniepb 11. Jun 2002 23:21

hui .. danke das hat geholfen ..

Alfons_G 11. Jun 2002 23:22

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 Luckies Homepage finden.
:idea:

:coder:

Alfons_G 11. Jun 2002 23:23

Na, da war Luckie zur gleichen Zeit dran, wie ich :P

:coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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