Q&A

  • Form에서 Toolbar/StatusBar등을 제외한 영역만 얻는 법?
안녕하십니까. 프로젝트가 너무 바쁘다보니 참여가 적어져서 죄송합니다.

Form에서 ToolBar/StatusBar등을 제외한 영역만 구하는 법을 같은

프로젝트 하시는 분이 물어봤는데, 알 듯 하면서 모르겠더군요.

물론 그냥 빼면 되긴 되겠죠... 그런데 UI가 동적으로 바뀌기 때문에

가급적이면 그런 작업 없이 알 수 있는 방법을 찾고자 합니다.

그러니까... Form안에 대각선을 그린다든지 하는 작업에 이용하려고 합니다.

그냥 ClientWidth/ClientHeight 등을 쓰면 StatusBar등이 있는 영역도

다 포함되기 때문에 그런 것들이 제외된 순수한 Form만의 영역은 아니게 됩니다.

Canvas.ClipRect도 있지만... 프로그램 내에서 InvalidateRect를 사용할

것이기 때문에 이 용도로는 곤란하군요...

아시는 분 꼭 좀 부탁드리겠습니다.

건강하세요.

2  COMMENTS
  • Profile
    최용일 2000.05.15 01:23
    안녕하세요. 최용일입니다.



    좀 다른 방법으로... Canvas를 가지고 있는 객체(예 - TImage)를 alClient로 정렬을



    하면 계산을 하지 않아도 이 객체의 영역이 클라이언트 영역이 되겠는데요.



    이러면 ToolBar/StatusBar의 영역을 제외한 영역만 할당이 되니까요. 그리고 Canvas를



    이용하면 그 객체에 직접 그리기도 할 수 있구요...



    ^^ 항상 즐코하세요.



    김일영 wrote:

    > 안녕하십니까. 프로젝트가 너무 바쁘다보니 참여가 적어져서 죄송합니다.

    > Form에서 ToolBar/StatusBar등을 제외한 영역만 구하는 법을 같은

    > 프로젝트 하시는 분이 물어봤는데, 알 듯 하면서 모르겠더군요.

    > 물론 그냥 빼면 되긴 되겠죠... 그런데 UI가 동적으로 바뀌기 때문에

    > 가급적이면 그런 작업 없이 알 수 있는 방법을 찾고자 합니다.

    > 그러니까... Form안에 대각선을 그린다든지 하는 작업에 이용하려고 합니다.

    > 그냥 ClientWidth/ClientHeight 등을 쓰면 StatusBar등이 있는 영역도

    > 다 포함되기 때문에 그런 것들이 제외된 순수한 Form만의 영역은 아니게 됩니다.

    > Canvas.ClipRect도 있지만... 프로그램 내에서 InvalidateRect를 사용할

    > 것이기 때문에 이 용도로는 곤란하군요...

    > 아시는 분 꼭 좀 부탁드리겠습니다.

    > 건강하세요.

  • Profile
    Mr.Q 2000.05.14 11:17
    김일영 wrote:

    > 안녕하십니까. 프로젝트가 너무 바쁘다보니 참여가 적어져서 죄송합니다.

    > Form에서 ToolBar/StatusBar등을 제외한 영역만 구하는 법을 같은

    > 프로젝트 하시는 분이 물어봤는데, 알 듯 하면서 모르겠더군요.

    > 물론 그냥 빼면 되긴 되겠죠... 그런데 UI가 동적으로 바뀌기 때문에

    > 가급적이면 그런 작업 없이 알 수 있는 방법을 찾고자 합니다.

    > 그러니까... Form안에 대각선을 그린다든지 하는 작업에 이용하려고 합니다.

    > 그냥 ClientWidth/ClientHeight 등을 쓰면 StatusBar등이 있는 영역도

    > 다 포함되기 때문에 그런 것들이 제외된 순수한 Form만의 영역은 아니게 됩니다.

    > Canvas.ClipRect도 있지만... 프로그램 내에서 InvalidateRect를 사용할

    > 것이기 때문에 이 용도로는 곤란하군요...

    > 아시는 분 꼭 좀 부탁드리겠습니다.

    > 건강하세요.



    4pixel은 border입니다.

    y:=MainForm.ClientHeight- Mainform.toolbar.height - Mainform.statusbar.height-4;

    x:=MainForm.ClientWidth - MainForm.Panel.width - 4;



    도움말에 나와있듯이, 클라이언트가 포함하는 영역은 statusbar, border등입니다.

    그러니까.. 클라이언트 영역에서.. 폼에 올려놓은 컨트롤의 크기를 제외하고,

    폼border의 크기 4픽셀을 빼면 확실히 됩니다.