问题呢?难道你要我们猜问题?确实高难度!┏━┯━┓
┃竹  副┃
┠ BCB  ┨
┃印  斑┃
┗━┷━┛

解决方案 »

  1.   

    不好意思,我按错按钮了.
    问题是这样的:
    我做了一个VCL控件
    在其中声明一个自定义消息,
    然后定义一个回调函数,这个回调函数由一个API函数调用
    请回如何在这个回调函数中发送mymsg消息,sendmessage和postmessage可以吗,如果可以,
    第一个参数应传谁的handle,如下:
    interface
    const
      Mymsg=5000
    tmyvcl=class(tcomponent)
    public
      procedure msg1(var msg:tmessage);message Mymsg;
      procedure myfunction;
    end;
    implement
    {此函数不属于tmyvcl类}
    procedure mycallback;
    begin
      {my code...........}
    end;
    procedure tmyvcl.msg1(var msg:tmessage);
    begin
      {my code..........}
    end;
    procedure tmyvcl.myfunction;
    begin
      {myapi函数为调用回调函数的API函数名}
      myapi(@mycallback);
    end;
      

  2.   

    在你的类中加一个Handle属性
    type
      TMyClass = class(TComponent)
      private
        FHandle: THandle;
        function GetHandle: THandle;
        procedure WndProc(var Msg: TMessage);
      public
        property Handle: THandle read GetHandle;
      end;
    proceudre TMyClass.GetHandle;
    begin
      if FHandle = 0 then
        FHandle := AllocateHWnd(WndProc);
      Result := FHandle;
    end;
    procedure TMyclass.WndProc(var Msg: TMessage);
    begin
      ...
    end;
      

  3.   

    忘了加: uses forms, AllocateHWnd是在forms单元中的。
    以上的WndProc不知能不能从Form或Application接收到msg,我还没试了。:)
      

  4.   

    如果你要在控件中接受消息的话,必须是从以TWinControl为主先的类继承下来,因为从TWinControl开始才有Handle.
      

  5.   

    用copy_paste(木石三)到是行,但我的callback函数不在tmyvcl中,而是一个独立的函数,如何用tmyvcl.handle啊.
      

  6.   

    定义一个Obj: TMyVCL;就像var Form1: TForm1procedure mycallback;
    begin
      SendMessage(Obj.Handle, WM_Message...) 
    end;