请教一个窗口激活的问题!(66分)

  • 主题发起人 主题发起人 xyching
  • 开始时间 开始时间
X

xyching

Unregistered / Unconfirmed
GUEST, unregistred user!
运行环境:delphi6,win2000 server
问题描述:如何判断运行的程序被鼠标、键盘或者其他方式激活了,我需要在激活的时候做一点事情。或者能够判断我在任务栏上点了这个程序,这样即使已经打开其他窗口,主窗口无法获得焦点也能执行我要做的事情。
要求:程序第一次运行的时候不执行我需要在激活的时候要做的事情。
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure MyProcessMsg( var Msg: TMsg; var Handled: boolean );
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.MyProcessMsg(var Msg: TMsg; var Handled: boolean);
begin
if msg.message=45056 then
ShowMessage('Form Activate');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
application.onmessage:= MyProcessMsg;
end;

end.
 
TForm1 = class(TForm)
Edit1: TEdit;
private
{ Private declarations }
public
procedure MyProcessMsg( var message:TWMACTIVATEAPP); message WM_ACTIVATEAPP;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.MyProcessMsg(var message: TWMACTIVATEAPP);
begin
if Message.Active then
ShowMessage('Form Active');
end;
 
你的激活是个什么概念
 
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
CanDo : boolean;
procedure FormActivateEvent(Sender: TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
CanDo := False;
Application.OnActivate := FormActivateEvent;
end;

procedure TForm1.FormActivateEvent(Sender: TObject);
begin
if CanDo then
begin
{此处写你要的代码,下面一句是我的测试代码}
Caption := FormatDateTime('hh:nn:ss', Now);
end
else
CanDo := True;
end;
 
激活就是获得焦点阿,或者说把这个程序调到前台
 
那你可以在程序里定义一个变量,选择让程序在第N次激活的时候执行自己的代码
 
我就是想知道如何判断激活了
谢谢大家的回复!
 
后退
顶部