如何在一个过程执行的过程中接收系统的消息?(100分)

  • 主题发起人 主题发起人 lb2000
  • 开始时间 开始时间
L

lb2000

Unregistered / Unconfirmed
GUEST, unregistred user!
; 我想在一个过程执行的过程中接收系统的消息,
例如点击一个按钮,来终止过程的执行,请问如何
实现?
 
把你的过程放在线程中,用resume执行,Suspend挂起,在resume又可以执行。
终止用Terminate
 
unit Unit1;

interface

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

const
MyWm=WM_USER+100;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure MyWM1(var message:Tmessage);message MyWm;
end;

var
Form1: TForm1;
cancel:Boolean;

implementation

{$R *.DFM}

procedure Tform1.MyWM1(var message:Tmessage);
begin
Cancel:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
msg:TMsg;
begin
i:=0;
Cancel:=true;
While Cancel do
begin
inc(i);
label1.Caption:=inttostr(i);
label1.Refresh;
if i=60000 then
i:=0;
while peekmessage(msg,0,0,0,PM_REMOVE) do
begin
if msg.message=MyWm then
Cancel:=false;
translatemessage(msg);
dispatchmessage(msg);
end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
postmessage(form1.handle,MyWm,0,0);
end;

end.
 
上面代码中的一下语句不需要
if msg.message=MyWm then
Cancel:=false;
 
接受答案了.
 
www的方法可行,把你的过程写成线程,在主Form 中接受系统消息
如 mouse, key 等等,然后在主form的消息处理中来控制你的
Thread的行为.Liu JZX的方法也可.
主要思想是,你的过程不接受系统消息,而由主Form来处理系统消息,
从而控制你的过程.

如要你的过程直接接受系统消息也可,不过比较麻烦.可以把你的
过程写成一个回调函数,来处理消息,具体做法可以看winowAPI的帮助.
或者, Application.OnMessage := 你的过程,进行处理.好像也可.
 
后退
顶部