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

C++빌더 FAQ
C++Builder Programming FAQ
[24] [COMPONENT] TEdit 에서 정렬을 위한 간단한 트릭
박지훈.임프 [cbuilder] 20676 읽음    2001-03-24 13:49
전병수 님이 쓰신 글 :
: 에디트박스에서 가운데 정렬을 하고 싶은데....
: 알수가 없네요.. 비쥬얼 씨 에서는 간단하게 하던데.. 쩝.
: 어떻게 방법이 없나요?....
:
: 메모장의 경우 SetTextAlign이란 함수가 TCustomMemo로 부터 상속되어 있던데..
: 에디트이 경우는 TCustomEdit인가요.. 뭐.. 여기서 갈라져서.. 물론 위의 메모는 에디트로 부터 상속이고. 쩝..
: 여튼.
:
:
: 부탁드립니다... 에디트박스에서 문자를 오른쪽이나.. 가운데 정렬을 하고 싶습니다.



임펠리테리입니다.

TEdit에서는 원래 안됩니다. 안되는 것은 Win32 자체의 기능 때문입니다.
TEdit와 TMemo는 둘 다 Win32 EDIT 컨트롤을 쓴 건데, Win32 EDIT 컨트롤은 싱글라인과 멀티라인 두가지 모드가 있고
이것은 처음 윈도우가 생성될 때 지정하고 나면 변경할 수가 없습니다.

싱글라인과 멀티라인의 기능이 꽤 많이 다르기 때문에, 사용하기 편하게 설계한 VCL에서는 똑같은 Win32 EDIT 컨트롤을
싱글/멀티라인 별도로 TEdit와 TMemo로 만들어놓은 것입니다. 그런데 Win32에서 싱글라인 에디트 컨트롤은 원래!
정렬(align)이 안먹게 되어있습니다. (반대로 멀티라인에서는 PasswordChar같은 속성이 안먹습니다)

그래서 보통 서드파티 컨트롤들로서 에디트에서 정렬이 되는 것은 모두 멀티라인 에디트로 구현하고는 엔터키를 가로채서
싱글라인인 것처럼 보이게 만듭니다.

그런데.. 저도 왜 이런 게 가능한지 원인은 잘 모르겠습니다만, 다음의 무식한 트릭 하나를 쓰면이런 Win32의 제한을
너무도 허무하게 넘어서버립니다. 방법은 간단합니다. TEdit의 BorderStyle 속성에 엉뚱한 정수값을 집어넣는 겁니다.

아래와 같이 하면 가운데 정렬이 됩니다.
Edit1->BorderStyle = 20;
또, 아래와 같이 하면 오른쪽 정렬이 됩니다.
위와 같이 하면 텍스트가 가운데 정렬이 됩니다.
Edit1->BorderStyle = 19;

단, 이 트릭을 쓰면 정렬은 원하는 대로 되지만 대신에 BorderStyle 프로퍼티를 조작한 만큼 border가 사라져버립니다.
그러니까, border가 필요하시면 TPanel이나 TBevel위에 올려서 꾸미든지 해야겠지요.

그럼 참고하시길...

+ -

관련 글 리스트
24 [COMPONENT] TEdit 에서 정렬을 위한 간단한 트릭 박지훈.임프 20676 2001/03/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.