AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Aufruf des Systemmenü eines Fensters verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Aufruf des Systemmenü eines Fensters verhindern

Ein Thema von TUX_der_Pinguin · begonnen am 17. Feb 2017 · letzter Beitrag vom 17. Feb 2017
Antwort Antwort
TUX_der_Pinguin

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

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 12:48
1. GetSystemMenu
2. GetMenuItemCount
3. RemoveMenu

gruss
Und das hilft mir jetzt wie weiter?

Wenn ich die Eintrage aus dem Systemmenü lösche ist es trotzdem noch da, zwar unsichtbar, aber durch drücken der Tastenkombination ALT+Leertaste bekommt das Menü trotzdem den Focus und das will ich grade nicht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:04
1. GetSystemMenu
2. GetMenuItemCount
3. RemoveMenu

gruss
Und das hilft mir jetzt wie weiter?

Wenn ich die Eintrage aus dem Systemmenü lösche ist es trotzdem noch da, zwar unsichtbar, aber durch drücken der Tastenkombination ALT+Leertaste bekommt das Menü trotzdem den Focus und das will ich grade nicht.
Sehr viel wenn man sich einfach mal der MSLibrary bedient.

Bei mir geht kein Menu mehr auf auch nicht mit ALT-SPACE
Dir sollte aber eins klar sein das durch die Manipulation und des kompletten entfernen des System Menüs
der X-Button deaktiviert und das Window sich nicht mehr verschieben lässt.

Also man sollte schon wissen was man da tut.

gruss
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:08
1. GetSystemMenu
2. GetMenuItemCount
3. RemoveMenu

gruss
Und das hilft mir jetzt wie weiter?

Wenn ich die Eintrage aus dem Systemmenü lösche ist es trotzdem noch da, zwar unsichtbar, aber durch drücken der Tastenkombination ALT+Leertaste bekommt das Menü trotzdem den Focus und das will ich grade nicht.
Sehr viel wenn man sich einfach mal der MSLibrary bedient.

Bei mir geht kein Menu mehr auf auch nicht mit ALT-SPACE
Dir sollte aber eins klar sein das durch die Manipulation und des kompletten entfernen des System Menüs
der X-Button deaktiviert und das Window sich nicht mehr verschieben lässt.

Also man sollte schon wissen was man da tut.

gruss
Es geht ja auch kein Menü auf, wenn man alle Einträge löscht, aber trotzdem ist es noch da bzw. erhält den Focus. Wenn man TFrom.KeyPreview := True einstellt und im TFrom.KeyDown die Esc-Taste abfrage reagiert das Ereignis erst wenn man die Taste zweimal drückt, da beim ersten drücken das Menü geschlossen wird, welches unsichtbar ist und beim zweiten wird dann das Ereignis ausgelöst.
Ja ich weiß das der X-Button deaktiviert wird das ist aber nicht wichtig und verschieben soll sowieso nicht gemacht werden. Die Anwendung soll nur über die Tastatur zu bedienen sein.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:13
Na gut dann bitte..

Delphi-Quellcode:
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;
Wenn du das Window trotzden verschieben möchtest dann ändere einfach die
DownTo 0 zu 2

Dann geht zwar das Menu wieder auf aber nur mit zwei Einträgen.
Wiederherstellen / Verschieben.

Nebenbei ich musste auch des Öfteren MS in Anspruch nehmen
Man bekommt nicht überall alles umsonst und muss es sich erarbeiten.
Aber sei's drum.

gruss
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:20
Na gut dann bitte..

Delphi-Quellcode:
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;
Wenn du das Window trotzden verschieben möchtest dann ändere einfach die
DownTo 0 zu 2

Dann geht zwar das Menu wieder auf aber nur mit zwei Einträgen.
Wiederherstellen / Verschieben.

Nebenbei ich musste auch des Öfteren MS in Anspruch nehmen
Man bekommt nicht überall alles umsonst und muss es sich erarbeiten.
Aber sei's drum.

gruss

Ist das Menü weg: JA
Bekommt das UNSICHTBARE Menü immer noch den Focus: JA
Muss ich immer noch ZWEIMAL die ESC-Taste drücken um das Formular zu schließen: JA
Ist es das was ich will: NEIN

Es tut mir leid das das vielleicht etwas harsch wirkt, aber das ist doch genau das wo von ich die ganze Zeit spreche das es zwar Funktioniert aber nicht so wie ich das will. Vielleicht reden wir auch an einander vorbei.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:21
Zitat:
Bekommt das UNSICHTBARE Menü immer noch den Focus: JA
Quatsch.

Zitat:
Muss ich immer noch ZWEIMAL die ESC-Taste drücken um das Formular zu schließen: JA
Ich kann es selbst mit 100 ESC Klicks nicht schießen.
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

Geändert von EWeiss (11. Jul 2019 um 16:02 Uhr)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

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

AW: Aufruf des Systemmenü eines Fensters verhindern

  Alt 17. Feb 2017, 13:33
Das Menu ist nicht mehr da wie denn auch.
Drück doch einfach mein dein besagtes ALT-SPACE

gruss
Ja ich drücke ALT-Space, dann drücke ich ESC um mein Formular zu schließen und es passiert nichts weil DAS SYSTEMMENÜ DEN FOCUS HAT UND SICH DURCH DRÜCKEN DER ESC-TASTE SCHLIESST, drücke ich dann ein zweites mal ESC wird endlich das KeyDown Ereignis des Formulars ausgelöst und das Formular schließt sich.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz