Automation object 事件(100分)

  • 主题发起人 主题发起人 tty0819
  • 开始时间 开始时间
T

tty0819

Unregistered / Unconfirmed
GUEST, unregistred user!
在tlb中定义了一个事件,需要在设计的Automation的窗口的一个按键事件对应。
在应用端,如果Automation的窗口的一个按键事件发生,则tlb的事件能响应。
(Automation某个键点击后,调用端能体现。)
问题类似于http://www.delphibbs.com/delphibbs/dispq.asp?lid=105040
 
Override 窗口的WinProc获取键盘消息后想做什么都可以了.
 
用消息来解决问题也考虑过。
但需要做成Automation。
//
procedure start; safecall;
begin
if FEvents <> nil then FEvents.onstart;
end;
//
调用端XXX.start
onstart事件能响应,但把onstart事件同窗体的某个事件对应起来就搞不明白了。在调用端可以一直等待窗体的对应事件发生,但调用端会等到事件发生才会响应其它事情,用线程也不行。
请高手支支招。
 
这种问题得看一下是窗体的那个事件..
例如下面是以一下按钮的事件来说明..
procedure TButton.CreateParams(var Params: TCreateParams);
const
ButtonStyles: array[Boolean] of DWORD = (BS_PUSHBUTTON, BS_DEFPUSHBUTTON);
begin
inherited CreateParams(Params);
CreateSubClass(Params, 'BUTTON');//通过BUTTON得到WindowClass的各个参数
Params.Style := Params.Style or ButtonStyles[FDefault];//改变Style的类型。
end;

procedure TButton.CreateWnd;
begin
inherited CreateWnd;
FActive := FDefault;//
end;

procedure TButton.CNCommand(var Message: TWMCommand);//当收到WM_COMMAND消息时,响应CLICK.
begin
if Message.NotifyCode = BN_CLICKED then Click;
end;
如果这个时候你要在调用CLICK后影应你的onstart,你要么重写一下更改一下DELPHI源程序,后编译一下,或者继承一下这个组件,然后的话,再OVERRIDE这个消息。。。
 
to hzjone:
不明白你的解决方法,能再详细一些吗。:(
  水平低,看不大明白。
 
按照你的說法。用線程應該是可以的。

if FEvents <> nil then
begin
設置信號變量為1
FEvents.onstart;
end;

调用端開一個線程啟動 用WaitSingleObject函數等待信號為1就開始運行你要處理的事件
處理完後就把信號量設回0 理論上是可以的
 
这么久时间,没有高手帮助解决这个问题吗?还是分太少????

不用消息,不能处理这种异步处理的问题吗?
 
后退
顶部