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;
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 멤버이기때문에 쉽게 접근이 안되겠죠
그건 알아서....
그럼..