unit Unit6;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, bsSkinData, BusinessSkinForm, bsSkinCtrls,
bsSkinBoxCtrls;type
TForm6 = class(TForm)
bsBusinessSkinForm1: TbsBusinessSkinForm;
bsSkinData1: TbsSkinData;
bsCompressedStoredSkin1: TbsCompressedStoredSkin;
bsSkinPasswordEdit1: TbsSkinPasswordEdit;
bsSkinPasswordEdit2: TbsSkinPasswordEdit;
procedure FormCreate(Sender: TObject);
procedure bsSkinPasswordEdit1KeyPress(Sender: TObject; var Key: Char);
procedure bsSkinPasswordEdit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
pw:string;
{ Public declarations }
end;
type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;var
Form6: TForm6;
hhk,hhkmouse: HHOOK;
implementation{$R *.dfm}
uses unit7;
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
p: PKBDLLHOOKSTRUCT;
y: Integer;begin
y:= 0;
if nCode = HC_ACTION then
begin
case WParam of
WM_KEYDOWN, WM_SYSKEYDOWN:
begin
p:= PKBDLLHOOKSTRUCT(Lparam); if p^.vkCode <> 0 then
Form7.Show
else
if not form7.bsskinpasswordedit1.Focused then y:=1;
end; WM_KEYUP, WM_SYSKEYUP:
begin
if not form7.bsskinpasswordedit1.Focused then y:=1;
end;
end;
end;
if y = 1 then Result:= 1 else Result:= CallNextHookEx(hHk, nCode, WParam, LParam);end;
function InstKeyBoard: Boolean; stdcall; begin
if (hhk <> 0) or (hhkmouse <> 0) then
begin
Result:= False;
Exit;
end;
hhk:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
Result:= hhk <> 0;
end;
procedure TForm6.FormCreate(Sender: TObject);
begin
Left:=Screen.Width-Self.Width;
Top:=Screen.Height-Self.Height-30;
end;
procedure TForm6.bsSkinPasswordEdit1KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
bsskinpasswordedit2.SetFocus;
end;procedure TForm6.bsSkinPasswordEdit2KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
begin
if bsskinpasswordedit1.Text = bsskinpasswordedit2.Text then
begin
pw:=bsskinpasswordedit2.Text;
form6.close;
InstKeyBoard;
end
else
bsskinpasswordedit2.Text:='';
end;
end;end.这段代码的缺点是,当我按下任何键后,能弹出一个窗体后,在窗体中的edit能输入,当焦点不在edit中时,不能输入.即锁住了
但我一但再次按下任何键时,就解锁了 我只希望当弹出窗体后,当焦点不在弹出窗体的edit中时,可以锁住键盘,当焦点在edit中时,可以输入密码
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, bsSkinData, BusinessSkinForm, bsSkinCtrls,
bsSkinBoxCtrls;type
TForm6 = class(TForm)
bsBusinessSkinForm1: TbsBusinessSkinForm;
bsSkinData1: TbsSkinData;
bsCompressedStoredSkin1: TbsCompressedStoredSkin;
bsSkinPasswordEdit1: TbsSkinPasswordEdit;
bsSkinPasswordEdit2: TbsSkinPasswordEdit;
procedure FormCreate(Sender: TObject);
procedure bsSkinPasswordEdit1KeyPress(Sender: TObject; var Key: Char);
procedure bsSkinPasswordEdit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
pw:string;
{ Public declarations }
end;
type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;var
Form6: TForm6;
hhk,hhkmouse: HHOOK;
implementation{$R *.dfm}
uses unit7;
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
p: PKBDLLHOOKSTRUCT;
y: Integer;begin
y:= 0;
if nCode = HC_ACTION then
begin
case WParam of
WM_KEYDOWN, WM_SYSKEYDOWN:
begin
p:= PKBDLLHOOKSTRUCT(Lparam); if p^.vkCode <> 0 then
Form7.Show
else
if not form7.bsskinpasswordedit1.Focused then y:=1;
end; WM_KEYUP, WM_SYSKEYUP:
begin
if not form7.bsskinpasswordedit1.Focused then y:=1;
end;
end;
end;
if y = 1 then Result:= 1 else Result:= CallNextHookEx(hHk, nCode, WParam, LParam);end;
function InstKeyBoard: Boolean; stdcall; begin
if (hhk <> 0) or (hhkmouse <> 0) then
begin
Result:= False;
Exit;
end;
hhk:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
Result:= hhk <> 0;
end;
procedure TForm6.FormCreate(Sender: TObject);
begin
Left:=Screen.Width-Self.Width;
Top:=Screen.Height-Self.Height-30;
end;
procedure TForm6.bsSkinPasswordEdit1KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
bsskinpasswordedit2.SetFocus;
end;procedure TForm6.bsSkinPasswordEdit2KeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then
begin
if bsskinpasswordedit1.Text = bsskinpasswordedit2.Text then
begin
pw:=bsskinpasswordedit2.Text;
form6.close;
InstKeyBoard;
end
else
bsskinpasswordedit2.Text:='';
end;
end;end.这段代码的缺点是,当我按下任何键后,能弹出一个窗体后,在窗体中的edit能输入,当焦点不在edit中时,不能输入.即锁住了
但我一但再次按下任何键时,就解锁了 我只希望当弹出窗体后,当焦点不在弹出窗体的edit中时,可以锁住键盘,当焦点在edit中时,可以输入密码
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货