请问,怎样屏蔽窗体的象 Alt+F4之类的快捷键,使它在本窗体无效?!(50分)

  • 主题发起人 主题发起人 oicu
  • 开始时间 开始时间
O

oicu

Unregistered / Unconfirmed
GUEST, unregistred user!
请问,怎样屏蔽窗体的象 Alt+F4之类的快捷键,,使它在本窗体内无效?!
 
也许您希望您的程序在运行时不想让用户按系统按键 Alt-Tab 或  Ctrl-Alt-Del,那么可以通过以下的程序段屏蔽这些按键。  
procedure TForm1.FormCreate(Sender: TObject);  
begin  
var  
tmp : integer;
  begin
  tmp := 0;
  //屏蔽 Alt-Tab
  SystemParametersInfo( SPI_SETFASTTASKSWITCH, 1, @tmp, 0);
  //屏蔽 Ctrl-Alt-Del
  SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @tmp, 0);   end;  end;


 
当你不需要让用户按Alt+Enter、Ctrl+Alt+Del、Ctrl+Esc等功能键的时候加入以下代码:
Var
temp:integer;
begin
SystemParametersInfo(Spi_screensaverrunning,1,@temp,0);
end;
  当你要恢复功能键时用以下代码:
Var
Temp:integer;
begin
SystemParametersInfo(spi_screensaverrunning,0,@temp,0);
end;

 
以前的帖子有很多类似的,你找找
 
最简单的办法,加一个visible=false的菜单项,他的热键设为Alt+F4.
 
不用那么麻烦吧? 使用OnCloseQuery事件就行了

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False; //cannot close
end;
 
procedure TmainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if(Shift=[ssALT])and(key=VK_F4) then Key:=0
end;
 

procedure TmainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if(Shift=[ssALT])and(key=VK_F4) then Key:=0
end;

这方法好点!
如果用
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False; //cannot close
end;
在退出时会出错,也就是不能常的关闭
 
可以将窗口的关闭按钮Disabled.
procedure TForm1.FormCreate(Sender: TObject);
Const xMenuID = 10;
var hmenu:integer;
MII : MENUITEMINFO;
begin


hMenu := GetSystemMenu(Handle, false);
MII.cbSize := SizeOf(MII);
MII.cch := SizeOf(MII.dwTypeData);
MII.fMask := MIIM_STATE;
MII.wID := SC_CLOSE;
GetMenuItemInfo(hMenu, SC_CLOSE, False, MII);
MII.wID := xMenuID;
MII.fMask := MIIM_ID;
SetMenuItemInfo (hMenu, SC_CLOSE, False, MII);

MII.fState := MII.fState Or MFS_GRAYED;
MII.fMask := MIIM_STATE;
SetMenuItemInfo(hMenu, MII.wID, False, MII);

SendMessage(Handle, WM_NCACTIVATE, 0, 1);
enn;
 
我用过这方法
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if (ssAlt in shift)and(key=115) then key:=0;
end;
试试吧
 
我的意思是:要屏蔽 Alt + f4 和 Ctrl+Alt+Del 最小化之类的快捷键,
但我出示一个密码输入框,当密码正确,就Close窗体!
请问在windows下有组合键的键值的么,能提供一份比较全面的键值表么?!
 
可以建一个菜单控件,使其为空,但它的快捷方式用你要屏蔽的快捷方式
 
后退
顶部