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.