一个窗体里面有许多Button按钮,当我想点击某一个Button时,我的鼠标则移动到该Button上,并按下我键盘中的确认键(此键可以自己设定,不关心这个),此功能就如果我想点击窗体里面任意一个button时,只需要把鼠标移动到该按钮上并点击鼠标左键一样!
按照简单的想法就应该是:当鼠标移动到我想按下的button上面时,我只需要按下键盘中的确认键,此键此时发送一个鼠标左键按下的消息给系统,系统便应该知道这个消息发送给哪个Button,哪个Button响应该消息!SendMessage函数中的第一个参数是句柄,如果知道现在需要向哪个button发送鼠标左键按下的消息的话,则只需要把该button的句柄做为参数传入,但问题就是不知道该怎么获得当前鼠标所指的是哪个Button。
现在疑惑的是:
怎么让系统知道当前鼠标所指的是哪个Button?
OnMouseDown所响应的是哪个消息?
通过OnMouseMove可以将当前所指的button设置为焦点,但是这样太不科学,而且有些控件根本无法设置焦点!请高手指点一下

解决方案 »

  1.   

    1.遍历窗体,记录所有的Button按钮的坐标
    2.在OnMouseMove中取得当前坐标
    3.比对坐标,获取Button句柄
      

  2.   


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Self.KeyPreview := True;
    end;procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = 'a' then     //在本Form上按下a键时模拟鼠标左键按下
      begin
        Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
      end;
    end;
      

  3.   

    呵呵,传递消息也可,如
    PostMessage(Handle,WM_LBUTTONDOWN,0,0)
    PostMessage(Handle,WM_LBUTTONUP,0,0)
      

  4.   

    但是6楼的问题就是要知道鼠标正在哪个button上,它的Handle是什么,如果真的没鼠标,就不存在什么“代替鼠标左键按下”了。