Einzelnen Beitrag anzeigen

TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:42
Ach lade dir mein Teil doch einfach und versuche dieses durch ESC zu schließen.
Sag bescheid wenn du es geschlossen hast.

gruss
Das schließen wird ja auch über das OnKeyDown Event des Formulars gelöst, wie bereits beschrieben, dazu muss noch KeyPreview des Formulars aktiv sein. Rufe ich die Anwendung auf ohne irgendwas zu machen und drücke die ESC-Taste beendet sich die Anwendung sofort und umgehend. Drücke ich nach dem Start jedoch ALT+Leertaste und dann die ESC-Taste passiert nichts, erst beim erneuten drücken der ESC-Taste. Warum weil das Systemmenü obwohl nicht sichtbar doch den Focus oder sonst was bekommen hat. Du darfst das gerne selbst testen.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

  Close;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
  begin
    Close;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
var
  Menu: HMENU;
  MenuItems: Integer;
  i: Integer;
begin

  Menu := GetSystemMenu(Handle, false);
  if Menu <> 0 then
  begin
    MenuItems := GetMenuItemCount(Menu);
    if MenuItems <> 0 Then
      for i := MenuItems - 1 DownTo 0 do
        RemoveMenu(Menu, i, MF_BYPOSITION);
  end;
end;

end.
  Mit Zitat antworten Zitat