Q&A

  • TForm에 관한 질문입니다.
폼이 있습니다..
그위에 Notebook을 놓고 그안에
GroupBox를 놓고 그안에 BitBtn 버튼을 놓았습니다..

문제는 여기에 있습니다..
이 버튼의 실제 Left 값을 계산하려고 합니다..
버튼의 Left 값에다가 GroupBox의 Left 및 Notebook의 Left를 더해줘야
실제로의 버튼의 Left 값이 되는거 잖아요..

그래서.. 이렇게 계산을 하거든요..
(Sender as TBitBtn).Parent.Left + (Sender as TBitBtn). Parent.Parent.Left
+ (Sender as TBitBtn). Parent.Parent.Parent.Left 식으로 계산을 합니다..

문제는 여기에 있습니다..

if (Sender as TBitBtn).HasParent and
  ((Sender as TBitBtn).Parent.ClassType <> TForm) then
   sLeft := sLeft + (Sender as TBitBtn).Parent.Left;
if (Sender as TBitBtn).Parent.HasParent and
  ((Sender as TBitBtn).Parent.Parent.ClassType <> TForm) then
   sLeft := sLeft + (Sender as TBitBtn).Parent.Parent.Left;
if (Sender as TBitBtn).Parent.Parent.HasParent and
  ((Sender as TBitBtn).Parent.Parent.Parent.ClassType <> TForm) then
   sLeft := sLeft + (Sender as TBitBtn).Parent.Parent.Left;

대충 이런식인데.. 분명이 Parent가 TForm인데도 값을 더해서 계산을 합니다..

Parent가 Form인지 아닌지 구분을 달리해야 하는지.. 아니면.. 다른방법이
있는지.. 아시는 분은 답좀해주세요..

그럼 즐프하세요..

2  COMMENTS
  • Profile
    프리맨 2003.04.30 07:54
    그냥 ClientToScreen을 쓰시지요..

    var p:TPoint;

    p:=Button1.ClientToScreen(Point(0,0));

    이렇게 하면 버튼의 실제 화면상의 위치(x,y)가 반환됩니다.

    폼에서 버튼의 위치를 구하려면 여기에다 폼의 위치만 빼주면 됩니다.

    p.x:=p.x-Form1.left;
    p.y:=p.y-Form1.Top;

    폼의 클라이언트 좌표를 기준으로 한다면 ClientOrigin을 뺍니다.

    p.x:=p.x-Form1.ClientOrigin.X;
    p.y:=p.y-Form1.ClientOrigin.Y;



  • Profile
    꿈의대화 2003.04.30 02:17
    .