Q&A

  • ActiveForm에서 잔상이 계속 나는 문제좀 자세하게 알려주세요
여기저기 뒤져보니 다 공통적으로 나와있더군요

parent로 어쩌구 저쩌구 하면 된다고 하는데 잘 안되더군요

자세하게 좀 알려주세요 부탁드립니다(왕 초짜에요)

2  COMMENTS
  • Profile
    Larson 2001.02.21 18:39
    정확한 답변이 될지는 모르겠지만 참고해보세요.



    ---------------------------------------------------------------------------------



    (질문) 델파이로 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
    이승욱 2001.02.23 18:12
    감사합니다.