Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Systemmenü-Punkt entfernen !?!?! (https://www.delphipraxis.net/55527-systemmenue-punkt-entfernen.html)

Assun 22. Okt 2005 16:19


Systemmenü-Punkt entfernen !?!?!
 
hi !

Ich möchte gerne bei meinem Prog einen bestimmten Systemmenü-Punkt (das welches in der Taskbar erscheint) entfernen, nämlich die Schließen Option...

Doch dieser Code bewirkt rein gar nix :(

Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMan, ComCtrls, jpeg, ExtCtrls, Menus, ButtonComps;

type
  TForm1 = class(TForm)
    Image1: TImage;
    ImageButton1: TImageButton;
    ImageButton2: TImageButton;
    ImageButton3: TImageButton;
    Bezeichnung: TEdit;
    Aktion: TEdit;
    Aktion2: TEdit;
    procedure ImageButton2Click(Sender: TObject);
    procedure ImageButton1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private

  public
    procedure WMHotKey(var msg: TMessage); message WM_HOTKEY;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  MY_MENU_ID = 999;


// Auf die HotKeys reagieren
procedure TForm1.WMHotKey(var msg: TMessage);
begin
  Case msg.WParam of
    01: ShowMessage('F1');
    02: ShowMessage('F2');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var hMenu       : THandle;
begin
// HotKeys registrieren
RegisterHotKey(Handle,01,0,vk_F1);
RegisterHotKey(Handle,02,0,vk_F2);

// Unnötige Systemmenü-Punkte entfernen
hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
// HotKeys wieder freigeben
UnregisterHotKey(Handle,01);
UnregisterHotKey(Handle,02);
end;

omata 22. Okt 2005 16:31

Re: Systemmenü-Punkt entfernen !?!?!
 
Warum willst du den ausblenden? Mit Alt+F4 kann ich dein Programm dann immer noch schliessen!

Also verarbeite doch lieber das Ereignis Action im FormClose-Ereignis.

Oder habe ich da jetzt was falsch verstanden?

MfG
Thorsten

Assun 22. Okt 2005 16:44

Re: Systemmenü-Punkt entfernen !?!?!
 
es geht nicht exakt um den schließen button...mir gehts darum zu wissen wie man beliebige punkte entfernen kann !

also minimieren, schließen etc.

da fällt mir grad ein ich muss auch noch wissen wie man nen neuen punkt hinzufügt :P

Hab auch schon gesucht und nur diesen code gefunden aber der geht net :(

Luckie 22. Okt 2005 16:58

Re: Systemmenü-Punkt entfernen !?!?!
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var msg: TMessage); override;
  end;

var
  Form1        : TForm1;

implementation

{$R *.dfm}

const
  MY_MENU_ID  = 999;

procedure TForm1.Button1Click(Sender: TObject);
var
  hMenu       : THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  hMenu       : THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not InsertMenu(hMenu, 6, MF_BYPOSITION, MY_MENU_ID, 'Mein Menüitem') then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;

procedure TForm1.WndProc(var msg: TMessage);
begin
  inherited;
  case msg.Msg of
    WM_SYSCOMMAND:
      begin
        if hiword(msg.WParam) = 0 then
        begin
          case loword(msg.WParam) of
            MY_MENU_ID: ShowMessage('Buuuh!');
          end;
        end;
      end;
  end;
end;

Assun 22. Okt 2005 17:26

Re: Systemmenü-Punkt entfernen !?!?!
 
hmmm irgendwie will das bei mir einfach net klappen :(

Hab nun zum testen mal ein komplett neues Projekt erstellt und nur diesen Code reingemacht :

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
     procedure WndProc(var msg: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 const
  MY_MENU_ID  = 999;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  hMenu       : THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not DeleteMenu(hMenu, 6, MF_BYPOSITION) then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  hMenu       : THandle;
begin
  hMenu := GetSystemMenu(Handle, False);
  if hMenu <> 0 then
  begin
    if not InsertMenu(hMenu, 6, MF_BYPOSITION, MY_MENU_ID, 'Mein Menüitem') then
      ShowMessage(SysErrorMessage(GetLastError));
    DrawMenuBar(hMenu);
  end;
end;

procedure TForm1.WndProc(var msg: TMessage);
begin
  inherited;
  case msg.Msg of
    WM_SYSCOMMAND:
      begin
        if hiword(msg.WParam) = 0 then
        begin
          case loword(msg.WParam) of
            MY_MENU_ID: ShowMessage('Buuuh!');
          end;
        end;
      end;
  end;
end;

end.

und....es geschieht gar nix :(

es wird weder ein SystemMenü-Punkt entfernt, noch wird ein neuer hinzugefügt :(

Christian Seehase 23. Okt 2005 12:28

Re: Systemmenü-Punkt entfernen !?!?!
 
Moin Assun,

das dürfte daran liegen, dass Du das falsche Handle verwendest.
Was in der Taskbar angezeigt wird ist nicht Form1 sondern, dass ansonsten unsichtbare, Application Fenster.
Probiers also mal mit Application.Handle statt Handle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 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