1。请问能不能截取FastReport打印预览时点击打印按纽后的消息
这个按钮不是平时我们常用的按钮,它直接是从TControl继承下来的,大侠帮忙
能不能告诉我点击后触发了什么消息,我尝试截获WM_COMMAND消息一般按钮会触发
但是直接从TControl继承下来的却没有触发?
2。能不能一个窗体内的控件触发的消息在本窗体内不处理也不截获,而在另外的窗体中截获
消息然后再处理?
急呀。。

解决方案 »

  1.   

    1,那个按钮是个SPEEDBUTTON? 如果它不是从TWinControl直接或者间接继承下来,
    那它其实应该看作‘画’出来的按钮,你只能拦它所在winControl的WM_LBUTTONUP消息,
    拦截时候,判断是否点在了按钮区域。
    2,可以,但我不知道你想干什么。。
      

  2.   

    我拦截WM_LBUTTONUP消息,但是我怎么是什么控件触发的消息
    我如何能够获得该控件的句柄呀?
      

  3.   

    那个控件是GRAPHIC控件,它本身没有WINDOW句柄,找它容器控件的句柄。比如PANEL,FORM之类的句柄
      

  4.   

    我现在的问题是当FastReport预览窗体生成后,预览的时候有边框但是打印的时候就要
    把边框去掉,由于预览窗体是被封装在FastReport中的FR_View中不方便该里面的代码
    我想能不能当用户点击打印按钮时拦截WM_LBUTTONUP消息我不能在预览窗体中写拦截消息
    代码所以我想知道怎么通过另外一个窗体来拦截这个消息把边框去掉?
      

  5.   

    我写了个小程序当点击Form2中的SpeedButton1时在Form1中拦截然后使Form1.Edit1.text:='111'
    这样不行我点击后不会执行。
    procedure TForm1.WndProc(var Message: TMessage);
    begin
      if Message.Msg = WM_LBUTTONUP then
        if PtInRect(Form2.SpeedButton1.ClientRect, SmallPointToPoint(TWMLBUTTONUP(Message).Pos)) then
          Edit1.Text:='111111';
      inherited;end;
      

  6.   

    有个笨办法,拦截整个应用程序的消息,幸好有TApplicationEvents这组件,在它的OnMessage里面处理..procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    var
      px,py:Integer;
      x1,y1,x2,y2:integer;
    begin
      if Msg.message=WM_LBUTTONUP then
      begin
        if msg.hwnd=Form2.Handle then
        begin
          px:=LOWORD(msg.lparam);
          py:=HIWORD(msg.lParam);      with Form2.SpeedButton1 do
          begin
            x1:=left;y1:=top;
            x2:=left+Width;y2:=top+height;
            if (x1<px)and(x2>px) and (y1<py) and (y2>py) then//判断是否点在那个BUTTON上.
                                                            //呵呵,我写得笨些,不过意思差不多
            begin
              Handled:=true;
              ShowMessage('FORM2 SPeedbutton1 click');
            end
          end;    end  end;
    end;