|
폼 속성중에 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될수있도록 설정해주고싶습니다.
:
: 창은 최대화, 컴포넌트들은 비율에 맞게 적용되도록이요.
:
: 리사이징 소스를 통해 해보려했는데 오류가납니다.
:
: 다른방법이있으면 답변부탁드립니다!
|