C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[731] [Controls] 폼위에 Control의 포지션 맨앞 or 맨뒤 가 아닌 정확히 원하는 위치에 배치
장성호 [nasilso] 8637 읽음    2007-12-31 01:47
폼이나 Panel들 컨테이너 컨트롤들은 컨트롤위에 Control들이 있는데..

그 배치순서를

- BringToFront 로 맨앞으로 가져올수있고
- SendToBack으로 맨뒤로 보낼수 있습니다.

그런데 혹시 폼(또는 컨테이너 컨트롤)위에 배치되는 전체순서를 알고 있나요?

그 선제순서는 Controls[0]가 맨 뒤이고  Controls[ControlCount-1] 이  맨앞입니다.

어떤 Control을
   - SendToBack하면 Panrent->Control[0]에 배치되고
   - BringToFront하면  Panrent->Control[Parent->ControlCount-1]에 배치됩니다.


그런데 컨트롤을 배치를 맨앞이나 맨뒤가 아닌  중간어딘가에 특정위치로 보내려면 어떻게 하면 될까요?
그것은 SetZOrderPosition 이라는 함수를 쓰면 됩니다. ==> 오늘 팁

VCL SendToBack, BringToFront 함수도 코드를 보면  SetZOrderPosition 함수를 호출하고 있죠..
//-------------------------------------------------------------------------------
procedure TControl.BringToFront;
begin
  SetZOrder(True);
end;
//-------------------------------------------------------------------------------
procedure TControl.SendToBack;
begin
  SetZOrder(False);
end;
//-------------------------------------------------------------------------------
procedure TControl.SetZOrder(TopMost: Boolean);
begin
  if FParent <> nil then
    if TopMost then
      SetZOrderPosition(FParent.FControls.Count - 1) else
      SetZOrderPosition(0);
end;
//-------------------------------------------------------------------------------

VCL에 원래 있는 함수인데.. 아는사람도 쓰는사람도 별로 없는것같구해서 함 올려 봅니다.

그럼..
장성호 [nasilso]   2008-12-01 12:57 X
이팁에는 문제가 있습니다.
SetZOrderPosition 함수에는 쉽게 접근이 안되네요
아래링크를 참조하세요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=55000

+ -

관련 글 리스트
731 [Controls] 폼위에 Control의 포지션 맨앞 or 맨뒤 가 아닌 정확히 원하는 위치에 배치 장성호 8637 2007/12/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.