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

C++빌더 Q&A
C++Builder Programming Q&A
[72486] [답변] Scale속성을 이용해 보는 것도 생각해 보세요
정성훈.해미 [sage5nor] 5234 읽음    2015-03-26 10:35
폼 속성중에 Scaled속성이 있습니다.
기본값이 Scaled = true;인데

이것은 해당 폼에 있는 비주얼 콤포넌트의 크기를 비율적으로 변경하기 위한 것입니다.

ScaleBy()함수를 이용하면 해당 폼에 속해 있는 모든 비주얼 콤포넌트의 크기를 해당 비율로 변경할 수 있습니다.
비율 조정된 것이 생각한 것 처럼 깔끔한 레이아웃이 아닐 수도 있습니다.

void __fastcall ScaleBy(int M, int D);
함수 인자는 2가지입니다.

M -> 곱해지는 값
D -> 나눌 값

보통 D는 100으로 주고 M에 배율을 입력합니다.

예)

현재 크기의 50%   ->  ScaleBy(50, 100);
현재 크기의 120%  ->  ScaleBy(120, 100);   

폼에 있는 모든 비주얼 콤포넌트들이 레이아웃을 유지한 채 크기가 변할 것입니다.

단, 주의할 점.
처음 크기의 몇%가 아니고 현재 크기의 몇%이기 때문에
계산해야 할 부분이 생깁니다.

예)
50%로 변경 후 200%로 변경할 경우

처음 크기가 1000px일 때
50%로 변경 -> ScaleBy(50, 100);      //크기 = 1000px * 50% = 500px로 됨
이후
200%로 변경 -> ScaleBy(200, 100);   //크기 = 500px * 200% = 1000px로 됨

처음 크기의 200%로 생각해서 2000px가 될거라고 보면 안됩니다.

이것만 주의하여 비율 계산을 해주면 될 것입니다.

아래는 간단하게 만든 스케일 조정 함수입니다.
참고하세요.

//전역 변수
double DefaultD  = 100.;
double ScaledM = DefaultD;

// 스케일 조정 함수, Ratio는 백분율(50%일 경우 50.)
// 최초 원본에 해당하는 비율로 조정해 줍니다.
ChangeScale(double Ratio)
{
    ScaledM = Ratio*DefaultD/ScaledM;
    ScaleBy((int)ScaledM, (int)DefaultD);  
}

// 사용
int DefaultWidth;    //전역 번수
// 폼 생성시 디자인 폼의 크기를 가져옵니다.
__fastcall TForm1::TForm1(TComponent* Owner)  : TForm(Owner)
{
    DefaultWidth = Width;
}
// 폼 리사이즈시 비율을 변경합니다.
void __fastcall TForm1::FormResize(TObject *Sender)
{
    ChangeScale(Width*100./DefaultWidth);
}








해상도 님이 쓰신 글 :
: 제가 제작한 프로그램을 환경이 다른 모티터들의 해상도에 맞게
:
: View될수있도록 설정해주고싶습니다.
:
: 창은 최대화, 컴포넌트들은 비율에 맞게 적용되도록이요.
:
: 리사이징 소스를 통해 해보려했는데 오류가납니다.
:
: 다른방법이있으면 답변부탁드립니다!

+ -

관련 글 리스트
72481 환경이 다른 모니터들의 해상도를 어떻게해줘야할까요? 해상도 3930 2015/03/24
72486     [답변] Scale속성을 이용해 보는 것도 생각해 보세요 정성훈.해미 5234 2015/03/26
72485     Re:환경이 다른 모니터들의 해상도를 어떻게해줘야할까요? 둘리.CSIEDA 4059 2015/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.