我是想在用户切换到我的程序的时候刷新我的某些窗体等,当然切换的方式可以为任何切换方式,比如Alt+Tab等
解决方案 »
- 通過ADO連接DEF數據庫無法連續查詢
- delphi输入关键字或函数的一部分如何显出全部名?
- 求文件保护工具
- 请问我用adoconnection和adoadodataset打开数据库,如何得到count,即共有多少条,
- 如何在选中DBGRID1里的一条计录后在DBGRID2里显示关于DBGRID1里计录的详细内容?
- 有关DELPHI(或C++ Builder)中TImage控件的问题?(请高手们帮帮忙,看看怎么解决!请指教!)
- 在同一个数据表中,如何将两条不同记录的相同字段进行比较?
- 程序显示不正常?
- 急救!请各位大侠帮帮忙!
- DataSnap TCP连接中如何将客户端的Socket连接与回叫标识绑定?
- XP下关机问题
- ◎◎◎◎◆◆请高手指点一下如何编写热血传奇2的私服登陆器◆◆◎◎◎◎◎◎◎◎◎
begin
//在这里写你的刷新代码
end;
b : boolean = false;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if GetForegroundWindow() = self.Handle then
begin
if not b then
begin
b := true;
Edit1.Text('Hello');
end;
end
else
b := false;
end;
另外你看一看从application对象中有没有可以使用的属性...
当开始做那一个超大循环(登录数据库)的时候,在此期间切换到其它应用程序,然后再切换回我们的程序,我们看见的将是一片空白,而所有刷新窗体代码将不会执行。另外,我还试着用用钩子(Hook)来实现我的愿望,可是不行。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AppEvnts;type
TForm1 = class(TForm)
Button1: TButton;
ApplicationEvents1: TApplicationEvents;
Edit1: TEdit;
Memo1: TMemo;
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
protected
procedure WndProc(var Message: TMessage); override;
end;var
Form1: TForm1;
g_iText: Integer;implementation{$R *.dfm}procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = ? then
begin
Refresh; //如果这句代码执行,将会报异常
end; inherited WndProc(Message); {其他消息交父辈wndproc处理}
end;procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = ?) or (Msg.wParam = ?) or (Msg.lParam = ?) then
begin
g_iText := g_iText + 1;
Memo1.Lines.Add(IntToStr(g_iText));
Refresh;
end;
end;{-----------------------------------------------------------------------------
过程名: TForm1.Button1Click
作者: 黄仁光
日期: 2004年01月20日
参数: Sender: TObject
结果: None
目的: 大家就将这儿认为是登录数据库的代码,
当然下面的循环将会执行几分钟没问题。
-----------------------------------------------------------------------------}procedure TForm1.Button1Click(Sender: TObject);
var
iLoop: Integer;
begin
try
Screen.Cursor := crHourGlass;
for iLoop := 0 to 20000000 do
begin
Edit1.Text := IntToStr(i);
Edit1.Refresh;
end;
finally
Screen.Cursor := crDefault;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
g_iText := 0;
Memo1.Clear;
end;procedure TForm1.FormActivate(Sender: TObject);
begin
Refresh;
end;end.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getactivewindow=0 then
showmessage('Not Active');
end;
Application.ProcessMessages
就可以了。
Application.OnDeactivate 程序去活