![]() |
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; |
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 |
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 :( |
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; |
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 :( |
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 13:58 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