//点击一个按钮然后把其他的按钮禁用掉,等检索完数据后再把它们解开,但是在它们被禁用期间竟然能
//相应鼠标的点击时间,我百思不得其解,大家来帮我看看.
//代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, Buttons, StdCtrls,
ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ds1: TDataSource;
dbgrd1: TDBGrid;
btn1: TButton;
btn2: TButton;
btn3: TBitBtn;
btn4: TSpeedButton;
edt1: TEdit;
ADOQuery1: TADOQuery;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
edt1.SetFocus;
btn1.Enabled:=False;
btn2.Enabled:=False;
btn3.Enabled:=False;
btn4.Enabled:=False;
ADOQuery1.Close;
ADOQuery1.Open;
btn1.Enabled:=True;
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=True;
end;procedure TForm1.btn2Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'btn2Click';
end;procedure TForm1.btn3Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'btn3Click';
end;procedure TForm1.btn4Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'btn4Click';
end;procedure TForm1.btn2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
edt1.Text:=edt1.Text+'btn2MouseDown';
end;end.
//相应鼠标的点击时间,我百思不得其解,大家来帮我看看.
//代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, Buttons, StdCtrls,
ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ds1: TDataSource;
dbgrd1: TDBGrid;
btn1: TButton;
btn2: TButton;
btn3: TBitBtn;
btn4: TSpeedButton;
edt1: TEdit;
ADOQuery1: TADOQuery;
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
begin
edt1.SetFocus;
btn1.Enabled:=False;
btn2.Enabled:=False;
btn3.Enabled:=False;
btn4.Enabled:=False;
ADOQuery1.Close;
ADOQuery1.Open;
btn1.Enabled:=True;
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=True;
end;procedure TForm1.btn2Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'btn2Click';
end;procedure TForm1.btn3Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'btn3Click';
end;procedure TForm1.btn4Click(Sender: TObject);
begin
edt1.Text:=edt1.Text+'btn4Click';
end;procedure TForm1.btn2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
edt1.Text:=edt1.Text+'btn2MouseDown';
end;end.
ADOQuery1.Close;
ADOQuery1.Open;
所用的时间太短了, 要不你在
ADOQuery1.Close;
ADOQuery1.Open;
Sleep(5000);
Self.UpdateControlState;
这样试试看
ADOQuery1.Open;
所用的时间所用的时间足够长了,在检索的这段时间里你点击其他按钮看看,它们仍然能相应鼠标点击事件
btn1.Enabled:=False;
btn2.Enabled:=False;
btn3.Enabled:=False;
btn4.Enabled:=False;
在这之后加入
Self.UpdateControlState;
试试
咱们优秀的程序员解决问题不能只走一条路嘛。
在Implementation部分,或者这个窗体的Private区,声明一个变量mBtnClickRunning: Boolean;
将其初始化为false。procedure TForm1.btn1Click(Sender: TObject);
begin
if not mBtnClickRunning then
begin
mBtnClickRunning := true;
edt1.SetFocus;
btn1.Enabled:=False;
btn2.Enabled:=False;
btn3.Enabled:=False;
btn4.Enabled:=False;
ADOQuery1.Close;
ADOQuery1.Open;
btn1.Enabled:=True;
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=True;
mBtnClickRunning := false;
end;
end;
btn1.Enabled:=False;
btn2.Enabled:=False;
btn3.Enabled:=False;
btn4.Enabled:=False; Application.ProcessMessages; //加上这句 ADOQuery1.Close;
ADOQuery1.Open;
btn1.Enabled:=True;
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=True;
回 chuchu(维他命C)大人的话,你做法是可行的,但是这种情况不是我想要的,我要的是在检索过程中,所有的按钮都不能点击执行。
不管能不能解决,我都谢谢各位大人了。希望大家继续帮忙,小弟万分感谢。
说句实话我现在用鼠标钩子屏蔽点击事件,但是仍然不行。这是一个很诡异的问题。
以下是波兰公司帮助文档的Enabled说明,它说得很清楚,是否相应鼠标\键盘和时间的事件,可是事情偏偏不是这样.我希望大家能把我的例子用在你们的机子上调试看看,是不是我的系统出了问题.如果再不能解决,我只好去找波兰公司了(说说而已,我那敢去找波兰啊,因为我用的是盗版的delphi7啊!).
=============革命尚未成功,筒子仍须努力!===============
VCL Reference
Enabled property (TControl)TControl See also
Controls whether the control responds to mouse, keyboard, and timer events. Delphi syntax:property Enabled: Boolean;C++ syntax:__property bool Enabled = {read=GetEnabled, write=SetEnabled, stored=IsEnabledStored, default=1};DescriptionUse Enabled to change the availability of the control to the user. To disable a control, set Enabled to false. Disabled controls appear dimmed. If Enabled is false, the control ignores mouse, keyboard, and timer events.To re-enable a control, set Enabled to true. The control is no longer dimmed, and the user can use the control.
在ADOQuery1的AfterOpen事件中把按钮状态置过来!
btn1.Enabled:=True;
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=True;
begin
edt1.SetFocus;
btn1.Enabled:=False;
btn2.Enabled:=False;
btn3.Enabled:=False;
btn4.Enabled:=False;
ADOQuery1.Close;
ADOQuery1.Open;
btn1.Enabled:=True;
btn2.Enabled:=True;
btn3.Enabled:=True;
btn4.Enabled:=True;
end;
你这么写不就是瞎掰吗。
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('a');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Button1.Click;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Enabled:=false;
end;自己试试效果就知道了最直接的解决方法:不要在代码里调用