Q&A

  • 퀵리포트 출력할때 ZoomTofit 이나 100%로할수있게 하는방법좀
1.델파이 퀵리포트로 출력을 하려고 합니다.
   여러 출력물을 합쳐서 보여주기위해 컴포지트 컴포넌트를 사용했구요.
   그리고 미리보기했을때 초기화면을 ZoomTofit 이나 100%로 하고싶습니다.
   자료를 찾아본바 FindWindow, FindWindowEx 와 SendMessage를 사용하기로함.

문제1. 컴포지트 컴포넌트를 사용했기때문에 미리보기를 할때 FindWindow, FindWindowEx 와
          SendMessage 구현을 어느위치(이벤트)에 해야하는지 궁금하구요.
          (Preview 하기 전에 해야할거같은데)

문제2. 아래 예시처럼 'TToolBar' 핸드까지 찾고나서 ZoomTofit 이나 100%의 ToolButton을 찾아
          클릭하게해야하는데 막힙니다.

  a_hwnd:= FindWindow('TQRStandardPreview',nil);
  b_hwnd:= FindWindowEx(a_hwnd,0,'TToolBar',nil);
                            ?????

  SendMessage(c_hwnd, WM_LBUTTONDOWN, 0, 0);
  SendMessage(c_hwnd, WM_LBUTTONUP  , 0, 0);


//----------참로고 미리보기 클릭 이벤트시 소스입니다.---------------------------------------------------------
begin
    if not Assigned(KSJTR086F) then
      KSJTR086F := TKSJTR086F.Create(self);    //1.서두 내용

    if not Assigned(KSJTR086_1F) then
       KSJTR086_1F := TKSJTR086_1F.Create(self);    //2.본문 내용

    if not Assigned(KSJTR086_2F) then
       KSJTR086_2F := TKSJTR086_2F.Create(self);    //3.결론 내용

   //컴포지트리포트에 출력물 추가
   QRCompositeReport2.Reports.Clear;
   QRCompositeReport2.Reports.Add(KSJTR086F.QuickRep1);
   QRCompositeReport2.Reports.Add(KSJTR086_1F.QuickRep1);
   QRCompositeReport2.Reports.Add(KSJTR086_2F.QuickRep1);

   //미리보기
   QRCompositeReport2.preview;
end;
2  COMMENTS
  • Profile
    장성호 2008.05.15 21:53
    저도 이것땜시 좀 ... 했었는데요

    1. FindWindow시점

    FindWindow로 ''TQRStandardPreview'를 찾으려면 폼이 떠있어야 겠지요
    그러므로 QRCompositeReport2.preview 가 호출된 뒤에 FindWindow를 해야 합니다.

    preview 가 호출된 뒤에 FindWindow하려면
               -  timer를 사용하던가
               -  쓰레드를 이용하시면 될것 입니다.

    2. 'TToolBar' 에 Toolbutton이 클릭되게 하려면?
        2.1 첫번째 방법은 mouse_event 로 정확히 좌표 계산해서  down 과 up 을 날려주면 될것이구요
        2.2 두번째 방법은 SendMessage로 하는 방법으로서
                 WM_LBUTTONDOWN ,  WM_LBUTTONUP만 날려서는 안되구요

                 WParam에는 MK_LBUTTON을
                 LParam에는  버튼의 위치(toolbar기준으로)를 날려줘야 합니다.


            아래는 c소스 입니다.
            MyParam mp;
            mp.ParamHi=8;
            mp.ParamLo=46; // 21 , 46 , 67

            SendMessage(hToolWnd,WM_LBUTTONDOWN,MK_LBUTTON,mp.Param);
            Sleep(100);
            SendMessage(hToolWnd,WM_LBUTTONUP,MK_LBUTTON,mp.Param);


    또다른 방법은?

    QRCompositeReport에 private멤버인 FQRPrinter가 있는데
    이  QRPrinter의 private멤버인 PreviewControl이 입 바로 'TQRStandardPreview' 입니다.
    PreviewControl의 Controls을 ControlCount만큼 돌리면 TToolBar를 찾을수 있구요
    TToolBar를 찾았으면 ToolButton을 안보이게 한다거나 Disable시키거나 할수도 있습니다.

    private 멤버이기때문에 쉽게 접근이 안되겠죠
    그건 알아서....

    그럼..


  • Profile
    김중인 2008.05.16 22:30
    네..답변 정말 감사드립니다.
    열심히 해보아야겠습니다.