Einzelnen Beitrag anzeigen

Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Kein PopUp-Menü bei Klick auf's Icon in der Titelleiste

  Alt 28. Apr 2004, 12:21
Beim Klick auf das kleine Icon oben links einer Titelleiste wird bekanntlich ein kleines PopUp-Fenster geöffnet.

Verhindern lässt sich dies mit folgendem Code:

Delphi-Quellcode:
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;

Kurze Erklärung des Codes:

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 Titelleiste geklickt (HTCAPTION), dann wird die Nachricht umgebeogen bzw. verschluckt, in dem nicht darauf reagiert wird.
Gleiches Vorgehen bei WM_NCLBUTTONDBLCLK.

Wird mit WM_SYSCOMMAND normalerweise das Mausmenü geöffnet, wird dies auch wieder verschluckt.



Diesen Code hat toms in diesem Thread veröffentlicht.

Die Erklärung stammt von Luckie.
  Mit Zitat antworten Zitat