Q&A

  • 화면 크기에 따라 컴포넌트 크기도 변하게..
안녕하세요..
질문이 있습니다.
프로그램의 폼 사이즈를 일반 모니터(1024*768)에 맞춰서 했는데 이 프로그램을 LCD 모니터(1280*1024)에서 실행했을경우에 폼크기와 컴포넌트 크기가 모니터 크기에 맞게 자동적으로 맞춰지는 그런 컴포넌트는 없나요?
1024*768로 맞춘 프로그램을 1280-*1024에 맞추려면 컴포넌트를 일일이 조정해야 하는 번거로움이 있네요... 몬가 방법이 없는가요?? 좀 알려주시면 감사하겠습니다.

1  COMMENTS
  • Profile
    이중철 2005.02.26 00:43
    그런 컴퍼넌트가 많이 있거든요
    FormSize (토리 또는 여기 자료실)
    Rx라이브러리 인가에도 해당 컴퍼넌트가 있고요
    상기 컴퍼넌트는 폼 리사이즈 할때 컨트롤 사이즈 조정이니 목적에 맞지 않을수 도 있네요
    일일히 맞추는 것도 그리 어렵지 않아요
    Components property 이용해서 일괄적으로 처리하면 되는데 ^^
    방법은 여러가지 있거든요
    가장 쉬운것은 리사이즈를 할수 있는 픔클래스를 만들고
    그것에서 상속받아 폼들을 만들면 되겠고요
    또하나는 전역으로 쓰는 유닛에 함수를 포함하고 생성시 콜해도  되겠죠
    Const  
      DefaultHPix = 1024;
      DefaultVPix = 768;
    .......
    Function(FM : TFORM);
    var i : integer;
        H , V : integer;
    begin
      H := GetDeviceCaps(FM.CANVAS.HANDLE, HORZRES);
      V := GetDeviceCaps(FM.CANVAS.HANDLE, VERTRES);
      for i := 0 to FM.ComponentCount - 1 do
      begin
        if FM.Components[i] is TControl then
        begin
          TControl(FM.Components[i]).Top := Round( (V / DefaultVPix) * TControl(FM.Components[i].Top));
          TControl(FM.Components[i]).Height := Round( (V / DefaultVPix) * TControl(FM.Components[i].Height));
          TControl(FM.Components[i]).Left := Round( (V / DefaultVPix) * TControl(FM.Components[i].Left));
          TControl(FM.Components[i]).Width := Round( (V / DefaultVPix) * TControl(FM.Components[i].Width));
        end;
      end;
    end;

    위Function은 테스트 안해보았지만 될것으로 추측합니다.
    개념적으로 알것이니 알아서 바꾸어 쓰세요
    그런데 님 여기서 3년전부터 계속 본것 같네요 ^^