AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
Zitat:
Wie denn auch wenn es nicht mehr existiert. Also auch Quatsch. Das Menu ist nicht mehr da wie denn auch. Drück doch einfach mein dein besagtes ALT-SPACE Aber natürlich hänge ich das Projekt auch noch an. (Weil ich dazu blöd genug bin) Du bist ab sofort auf meiner Ignorier liste. gruss |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
Die Anwendung soll nur über die Tastatur zu bedienen sein und wenn der Anwender ausversehen in dem unsichtbaren Menü hängt und dann das Fenster schließen will und beim drücken der ESC-Taste nichts passiert finde ich das unsauber das er dann noch mal drücken muss. |
AW: Aufruf des Systemmenü eines Fensters verhindern
Ach lade dir mein Teil doch einfach und versuche dieses durch ESC zu schließen.
Sag bescheid wenn du es geschlossen hast. Zitat:
Danach ist das Menu garantiert nicht mehr vorhanden. gruss |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
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. |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
Da kann ich drücken wie blöde da schießt sich nichts mit ESC. Aber gut hab meinen Beitrag über dir editiert. gruss |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
So es gibt kein SysMenu mehr überprüfe das einfach anhand der GWL_STYLE Weder Unsichtbar noch sonst was. Du kannst aber das Window nun trotzdem verschieben.
Delphi-Quellcode:
Entferne den Button auf der Form addiere dein ominöses
procedure TForm1.FormShow(Sender: TObject);
var Menu: HMENU; MenuItems: Integer; i: Integer; Style: DWord; 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; Style := GetWindowLong(Handle, GWL_STYLE); Style := Style and not WS_SYSMENU; SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, Style) or WS_BORDER or WS_SIZEBOX or WS_DLGFRAME or WS_OVERLAPPED); end;
Delphi-Quellcode:
Klick einmal die ESC Taste dann beendet sich die Anwendung sofort.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Key = VK_ESCAPE then begin Close; end; end; |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
Wobei meine erste Lösung zumindest die ALT+Leertaste Problematik behebt, danach war mir auf gefallen das schon das alleinige drücken von ALT das Menü aufruft, auch wenn es nicht sichtbar ist.
Delphi-Quellcode:
private
procedure WMInitMenuPopup(var Msg: TWMInitMenuPopup); message WM_INITMENUPOPUP; procedure TForm1.WMInitMenuPopup(var Msg: TWMInitMenuPopup); begin inherited; if Msg.SystemMenu then begin //Beendet das Menü sofort wieder EndMenu; //Einträge können gelöscht werden, da aber eh nicht sichtbar also auch nicht nötig. //Außerdem sorgt dafür das löschen des "Schließen" Eintrags dafür das das "Rote X" deaktiviert wird und gräulich dargestellt wird DeleteMenu(msg.MenuPopUp, SC_MOVE, MF_BYCOMMAND); DeleteMenu(msg.MenuPopUp, SC_CLOSE, MF_BYCOMMAND); end;{if} end; |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
1. Ich starte die Anwendung. Drücke ALT-SPACE nichts passiert. Drücke einmalig den ESC Key die Anwendung beendet. 2. Ich starte die Anwendung. Drücke einmalig den ESC Key die Anwendung beendet. OK das war's für mich. :) gruss |
AW: Aufruf des Systemmenü eines Fensters verhindern
Zitat:
|
AW: Aufruf des Systemmenü eines Fensters verhindern
So ich habe es jetzt scheinbar endlich geschafft ob die Lösung jetzt allem Standhält muss sich noch herausstellen.
Delphi-Quellcode:
private
procedure WMInitMenu(var Msg: TWMInitMenu); message WM_INITMENU; procedure TForm1.WMInitMenu(var Msg: TWMInitMenu); begin //Behandlung abbrechen abort; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 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