C++ Builder 10.2 Tokyo > Width와 ClientWidth의 차이 on (Win7, Win8.1, Win10) > 똑같이 다르다 |

빌드 환경
RAD Studio 10.2 Tokyo Update 2 + Windows 10 Pro (v1709)

실행 환경
Windows 10 Pro (v1709)
Windows 8.1 Pro
Windows 7 Pro

C++ Builder 10.2 Tokyo > 폼의 좌표 위치 > Width 대신 ClientWidth 사용(Win10 대응)
에 신경이 쓰인 폼의 좌표 위치.

증상 (Width 사용시)
  • Windows 10 : 하위 폼 사이에 여유 공간이 생깁니다.
  • Windows 7, Windows 8.1 : 하위 폼 사이에 여유가 없습니다.

    Width와 ClientWidth의 정의가 다를 것이라고 추측해 보았다.

    Unit1.h
    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    #include <Vcl.ExtCtrls.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:    // IDE で管理されるコンポーネント
        TImage *Image1;
        TButton *Button1;
        void __fastcall Button1Click(TObject *Sender);
    private:    // ユーザー宣言
    public:     // ユーザー宣言
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    Unit1.cpp
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        TForm2 *form2 = new TForm2(this);
    
        Image1->Canvas->Brush->Color = clRed;
        Image1->Canvas->FrameRect(Rect(0, 0, form2->Width, form2->Height));
    
        Image1->Canvas->Brush->Color = clBlue;
        Image1->Canvas->FrameRect(Rect(0, 0, form2->ClientWidth, form2->ClientHeight));
    
        delete form2;
    }
    //---------------------------------------------------------------------------
    

    실행



    Windows 10 (빨간색이 자식 양식의 Width, 파란색이 ClientWidth).


    Windows 8.1


    Windows7


    Width와 ClientWidth의 차이에 대해서는 모두 함께했다.
    서두의 차이({Win7,Win8.1}와 {Win10}의 차이)는 다른 이유로부터 발생하고 있는 것 같다.

    별도로 눈치채는 점으로서, Windows 10의 경우, 상기의 화상으로부터도 볼 수 있듯이 「외측의 테두리」가 없다 (왼쪽, 오른쪽, 그리고 하측).
    이 프레임의 분만큼 Win7, Win8.1과는 다르다.

    htps : // m/7, f9/ ms/426360c66715d276bc0d
    에 보인 아이 폼간의 「빈」은 이 틀의 유무에 의한 것 같다.

    폼의 위치 조정을 하는 경우, ClientWidth, ClientHeight를 사용해 두면, 관련하는 문제는 회피할 수 있을 것이다.

    추가



    (2018/04/25)

    폼의 위치 조정을 하는 경우, ClientWidth, ClientHeight를 사용해 두면, 관련하는 문제는 회피할 수 있을 것이다.

    ClientHeight를 사용했을 경우, Caption의 높이가 고려되지 않는 높이 정보가 된다.
    ClientHeight를 사용하지 않는 것이 좋을지도 모른다.
  • 좋은 웹페이지 즐겨찾기