Q&A

  • EditBox의 절대적 위치
안녕하세요.

과연 방법이 있을까 고민하다가 적어봅니다.

다름이 아니라, Form위에 PageControl이 하나 있고, 그 위에 Panel이 있고,

Panel위에 EditBox가 있습니다.

이 때, EditBox의 Top속성을 살펴보면 그 직계부모인 Panel위에서의 EditBox의 Top위치로 나타납니다.

이것을 Form위에서의 위치, 즉 절대적인 위치를 알고싶으면 어떻게 해야합니까?

방법이 있을 것도 같은데.. 알쏭달쏭~~

무슨 얘긴지 아시겠죠...

아시는 분은 꼭 답변 주세요.

오늘도 어느새 하루 해가 다 졌군요.

내일이면 태풍이 북상한다고 하니 모두들 조심하시기 바랍니다.

감사합니다.

3  COMMENTS
  • Profile
    구창민 1999.08.03 16:56
    궁금이 께서 말씀하시기를...

    > 안녕하세요.

    > 과연 방법이 있을까 고민하다가 적어봅니다.

    > 다름이 아니라, Form위에 PageControl이 하나 있고, 그 위에 Panel이 있고,

    > Panel위에 EditBox가 있습니다.

    > 이 때, EditBox의 Top속성을 살펴보면 그 직계부모인 Panel위에서의 EditBox의 Top위치로 나타납니다.

    > 이것을 Form위에서의 위치, 즉 절대적인 위치를 알고싶으면 어떻게 해야합니까?

    > 방법이 있을 것도 같은데.. 알쏭달쏭~~

    > 무슨 얘긴지 아시겠죠...

    > 아시는 분은 꼭 답변 주세요.

    > 오늘도 어느새 하루 해가 다 졌군요.

    > 내일이면 태풍이 북상한다고 하니 모두들 조심하시기 바랍니다.

    > 감사합니다.



    궁금이님 안녕하세요?



    ShowMessage(IntToStr(Panel1.Top + Edit1.Top));

    이러면 될거 같네요.



    그럼..즐거운 프로그래밍 되세요~

  • Profile
    궁금이 1999.08.03 20:00
    안녕하세요. 구창민님.

    답변주셔서 정말 감사합니다. ^.^

    제가 질문을 좀 잘못 드렸군요.

    물론 부모의 Top에 EditBox의 Top을 더하면 되는데요.

    부모가 Panel이 될 때도 있고, PageControl이 될 때도 있고....

    그래서, 부모와 상관없이 EditBox만으로 Form위에서의 절대적 위치를 알 수 있을까요?

    꼭 좀 답변 부탁합니다.



    다시한번 감사드리며, 구창민님도 즐거운 프로그래밍 하시길...





    구창민 께서 말씀하시기를...

    > 궁금이 께서 말씀하시기를...

    > > 안녕하세요.

    > > 과연 방법이 있을까 고민하다가 적어봅니다.

    > > 다름이 아니라, Form위에 PageControl이 하나 있고, 그 위에 Panel이 있고,

    > > Panel위에 EditBox가 있습니다.

    > > 이 때, EditBox의 Top속성을 살펴보면 그 직계부모인 Panel위에서의 EditBox의 Top위치로 나타납니다.

    > > 이것을 Form위에서의 위치, 즉 절대적인 위치를 알고싶으면 어떻게 해야합니까?

    > > 방법이 있을 것도 같은데.. 알쏭달쏭~~

    > > 무슨 얘긴지 아시겠죠...

    > > 아시는 분은 꼭 답변 주세요.

    > > 오늘도 어느새 하루 해가 다 졌군요.

    > > 내일이면 태풍이 북상한다고 하니 모두들 조심하시기 바랍니다.

    > > 감사합니다.

    >

    > 궁금이님 안녕하세요?

    >

    > ShowMessage(IntToStr(Panel1.Top + Edit1.Top));

    > 이러면 될거 같네요.

    >

    > 그럼..즐거운 프로그래밍 되세요~





  • Profile
    구창민 1999.08.04 00:07
    궁금이 께서 말씀하시기를...

    > 안녕하세요. 구창민님.

    > 답변주셔서 정말 감사합니다. ^.^

    > 제가 질문을 좀 잘못 드렸군요.

    > 물론 부모의 Top에 EditBox의 Top을 더하면 되는데요.

    > 부모가 Panel이 될 때도 있고, PageControl이 될 때도 있고....

    > 그래서, 부모와 상관없이 EditBox만으로 Form위에서의 절대적 위치를 알 수 있을까요?

    > 꼭 좀 답변 부탁합니다.

    >

    > 다시한번 감사드리며, 구창민님도 즐거운 프로그래밍 하시길...



    궁금이님 구창민입니다.

    부모가 누가되든 Edit1.Parent로 부모를 알아내실수 있습니다.

    또한 부모의 이름은 Parent.Name로 알아낼수 있습니다.

    그러므로 Panel의 부모가 PageControl이라면 역시 부모는 TabSheet가

    되겠지요.

    말씀하시는 영역을 상위 부모로 부터 연산해 가시면

    구해내실수 있을거 같습니다.

    간단히 예를 들면 아래처럼 ..



    procedure TForm1.Button1Click(Sender: TObject);

    var

    PComponent: TComponent;

    EditTop: integer; //Edit의 Top을 구하기 위한 변수

    //부모의 상위부모가 있을때 마다 누적

    begin

    EditTop:= 0;

    PComponent:= Edit1.Parent;



    if PComponent is TPanel then

    begin

    EditTop:= EditTop + TPanel(PComponent).Top;

    PComponent := TPanel(PComponent).Parent;

    end;



    if PComponent is TPageControl then

    begin

    EditTop:= EditTop + TPageControl(PComponent).Top;

    PComponent := TPanel(PComponent).Parent;

    end;

    //...

    //...

    EditTop:= EditTop + Edit1.Top;

    ShowMessage(IntToStr(EditTop));

    end;

    어쩐지 쓰고 보니 꽁수 같이 되었네요..에궁..^^;;

    응용하셔서 즐거운 프로그래밍 되세요~~