Q&A

  • ActiveForm 에 잔상이..ㅠ.ㅠ
안녕하세요

익스플로러에 추가시키고 스크롤을 밑으로 내리면 activeform 이 막 잔상이 일어납니다.(페이지가 넘어가서 스크롤이 생길때)
어찌해야 좋을까요?
도움 부탁드리겠습니다.
2  COMMENTS
  • Profile
    최석기 2002.08.14 01:20
    출처 : 마이크로소프트 2000년 6월호 Delphi Tip



    (질문) 델파이로 ActiveX 폼을 웹브라우저에서 로드해 사용할때 웹브라우저의 스크롤바위로 ActiveX 폼이 올라오는 현상등, ActiveX 위의 화면 단절 현상등 문제가 발생할때 해결방법??



    (답변전문)
    델파이 4에서는 ActiveForm이 웹브라우저 보다 클 경우 웹브라우저 보다 클 경우 웹브라우저의 스크롤바 위로 ActiveXForm이 올라오는 기이한 문제가 발생했었습니다.



    그래서 델파이5에서는 이 문제를 고치기 위한 코드를 추가됐는데요, 아쉽게도 이것에도 문제가 있습니다.
    웹페이지를 스크롤했을 경우 ActiveXForm의 painting에 문제가 생겨서 화면이 모두 깨지는 아주 심각한 문제 입니다.


    현재 나와 있는 델파이 5의 패치판에서도 이 문제점은 여전히 해결되지 않고 있는 실정입니다.

    인프라이즈에서 해결해주지 않는 이상 이 문제는 직접 해결을 해야 하는 문제가 되고 말았습니다.


    하지만 그리 어렵지 않게 이 Painting 오류를 수정할 수 있습니다.
    이 문제를 직접 해결하기 위해서는 델파이의 /Source 디렉토리에 있는 AxCtrls.pas를 직접 수정해줘야 합니다.


    AxCtrls.pas 에서 SetObjectRects란 함수를 찾아서 다음에 표시된 부분을 추가해 줍니다.





    function TActiveXControl.SetObjectRects(const rcPosRect: TRect;
          const rcClipRect: TRect) : HResult;
    var
          try
                IntersectRect(WinRect, rcPosRect, rcClipRect);
                // 여기서부터 추가할 부분
                WinRect := Bounds(rcPosRect.left,
                                  rcPosRect.Top,
                                  WinRect.Right-WinRect.Left+rcClipRect.Left-rcPosRect.Left,
                                  WinRect.Bottom-WinRect.Top+rcClipRect.Top-rcClipRect.Top);
                // 여기까지
                FWinControl.BoundsRect := WinRect;
                Result := S_OK;
          except
                Result := HandleException;
          end;
    end;



    추가가 끝나면 이 AxCtrls.pas 만 다시 컴파일해서 델파이의 /Lib 디렉토리에 넣어 둡니다. 이렇게 하면 델파이로 제작된 ActiveXForm이 있는 웹페이지를 스크롤했을 때 발생했던 문제를 해결할 수 있습니다.



    =============================================================



    이상이 원문입니다.


    AxCtrls.pas 파일을 재 컴파일 하는 방법을 정석은 아직 모르겠네요...  ^^;


    일단은 다른 방법으로 해도 문제가 없이 다시 적용이 되더군요..


    우선, /Source 아래에서 수정한 AxCtrls.pas 파일을 /Lib 디렉토리로 복사 합니다.
    그런뒤, /Lib 아래에 존재하는 AxCtrls.dcu 파일이 있으면 삭제해 줍니다.


    그런뒤, 기존에 있던, ActiveXFormProject 나 NewActiveXProject 를 하나 컴파일 하게 되면..
    델파이가 알아서 AxCtrls.pas 파일을 컴파일하여 주더군요...

    /Lib 디렉토리아래에 AxCtrls.dcu 파일이 새로 생성되어 있음을 확인할 수 있습니다.


    음.. 위의 파일은 원래 제공되는 VCL 파일에서 모든 프로젝트에 미치는 영향이 있어서 저렇게 해 주는거지만..

    특정한 프로젝트에서만 발생되는 경우라면,  해당 프로젝트 폴더에  수정한 pas 파일을 복사해서 컴파일 하면  우선은  소스 디렉토리에 있는 pas 를 읽기 때문에 적용이 될수도 있겠지요.......

    그럼.. 참고가 되었으면 좋겠네요........




  • Profile
    악마[영인] 2002.08.14 01:45
    답변에 너무나도 감사드립니다.
    사실 이런부분은 노하우가 없으면 정말 해결하기 힘든데...
    다시한번 진심으로 감사드립니다. 덕분에 프로젝트의 마지막을 잘 장식할수 있을것 같습니다.