2013-05-09 111 views
2

我想在Delphi中创建一个窗体,它不处理鼠标和键盘事件并将它们传递到窗体下面的窗口。我怎样才能做到这一点?不处理鼠标和键盘事件的窗体

+1

给定'form',究竟是'它下面的窗口'?也许你的意思是像http://stackoverflow.com/questions/11809973/click-through-transparent-form? – 2013-05-09 11:27:05

+0

任何事情,我想制作一个覆盖桌面上所有东西的玻璃杯。 (FormAlpha = 150) – Vahid 2013-05-09 11:29:05

+0

@Andreas Rejbrand谢谢,这正是我需要的。发布您的答案。 – Vahid 2013-05-09 11:34:14

回答

0

你可以使用过程中了BlockInput USER32.DLL的

你可以试试这个(谨慎!):

procedure Bloqued(block:boolean); 
var 
    milib: THandle; 
    BlockInput : function(Block: BOOL): BOOL; stdcall; 
begin 
    milib := GetModuleHandle('USER32.DLL'); 
    if milib <> 0 then begin 
    @BlockInput := GetProcAddress(milib, 'BlockInput'); 
    if @BlockInput <> nil then begin 
     BlockInput(block); 
    end; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject) ; 
begin 
    Bloqued(true); 
    Sleep(1000); 
    Bloqued(false); 
end; 

版本不DINAMIC加载:

Function BlockInput (Block: BOOL): BOOL; stdcall; External 'USER32.DLL'; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    BlockInput(true); 
    Sleep(1000); 
    BlockInput(false); 
end; 
+0

这里绝对没有理由使用动态加载。 – 2013-05-09 16:29:37

+0

增加版本,没有动态加载。感谢@安德烈亚斯雷布兰德您的建议。 – 2013-05-10 06:34:13