procedure bclick(var msg:TWMLBUTTONDOWN);message WM_LBUTTONDOWN;
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
             毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
  I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”等';
I.Desire := '加不加分随你';
—————————————————————————————————
       

解决方案 »

  1.   

    BN_CLICKED不是一个消息,而是WM_COMMAND的一个子消息.
    procedure WMCommand(var msg:TMessage);message WM_COMMAND;
    函数体:
    procedure TMyform.WMCommand(var msg:TMessage);
    begin
        if msg.WParam = BN_CLICKED then
        ShowMessage('Clicked')
      else
        inherited;
    end;
    注意:
    TButton是被VCL subclass过的,不会向父窗口发送BN_CLICKED等消息.只有如下创建的Button才会向父窗口发送该消息:
    var
      wnd:HWND;
    begin
      wnd := CreateWindow('BUTTON','test',WS_CHILD,20,20,200,40,Handle,0,hInstance,nil);
      ShowWindow(wnd,SW_SHOW);
    end;
      

  2.   

    十分赞同plainsong(轻风) 
    他的方法是最简单的
    当然,这也得归功于delphi
    另外,你也可以用SetWindowLong 用自己的程序来替换button的窗口函数,从而获得更多的控制
    这就比较复杂了,但却是比较标准的做法
      

  3.   

    作了试验,发现:
    如果是手工书写的API建立的窗体上的按钮事件,
    不管这个按钮是
     wnd :=CreateWindow('BUTTON','test',WS_CHILD,20,20,200,40,Handle,0,hInstance,nil);
    还是:
      wnd := CreateWindow('BUTTON','test',WS_CHILD,20,20,200,40,Handle,0,0,nil);
    的语句建立的,都可以正确响应bn_clicked消息。
    但对VCL建立的按钮,没有响应bn_clicked消息的。
      

  4.   

    我已经说过了:
    VCL的TButton类对BUTTON窗口进行了Sub Class,BUTTON的缺省窗口函数并没有接收到鼠标消息,而是被VCL的窗口函数截获,并传给了TButton类,该类并没有向其父窗口发送BN_CLICK通知消息,而是调用OnClick事件了,所以就没有BN_CLICK消息,也没无从响应了。
      

  5.   

    procedure TFrom1.CNCommand(var Message: TWMCommand);
    begin
      if Message.NotifyCode = BN_CLICKED then
      /////
    end;================================================================
    一颗红心向前看,为了革命两茫然,不好意思才囊尽,只能说上一点点。
    ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
    ★    我踢  我踢   我踢  我踢  我踢  我踢  我踢  我踢  我踢   ★
    ★    你UP  你UP   你UP  你UP  你UP  你UP  你UP  你UP  你UP   ★
    ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
    ================================================================