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 사용시)
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를 사용하지 않는 것이 좋을지도 모른다.
Reference
이 문제에 관하여(C++ Builder 10.2 Tokyo > Width와 ClientWidth의 차이 on (Win7, Win8.1, Win10) > 똑같이 다르다 |), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/810a174e9dd7d66367d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)