DLL中的窗体上Action的Update事件失效。只有当用户鼠标点击Action所对应的按钮时,才触发UpDate事件。在Dll中有代码如下:
procedure TForm1.Action1Update(Sender: TObject);
begin
  Action1.Enabled := length(Edit1.Text) <> 0;
end;Edit1.Text的变化并不会触发上面的事件。只有当用户鼠标点击Action所对应的按钮时,才触发UpDate事件。

解决方案 »

  1.   

    注意动态库的窗体生成时,一定要传递应用程序的句柄.
    这是一个动态库中的函数,供主程序调用.
    function CreateForm(AHandle:THandle;MainFrm:TMainFrm):TForm;stdcall;
    begin
      Application.Handle:=AHandle;//这一句不可少
      FmExample:=TFmExample.Create(Application);
      result:=FmExample;
    end;看看这样行不行.
      

  2.   

    试过了。还是不行。
    Action1是和按钮Button1相对应的。
      

  3.   

    procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      Action1.OnUpdate(Action1);
    end;
      

  4.   

    进行上面的消息处理,当然可以。
    但是在Application里,不需要这样的消息处理就可以正确运行。而在Dll里却不能,Why???