c++ builder XE4, 10.2 Tokyo > TImage > 다른 크기의 TImage 위치 정렬 > 좌우 방향 센터/오른쪽 가장자리 정렬

동작 확인
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)

다음 파일이 있다고 가정합니다.
  • 001_110x110.jpg : W110 x H110의 이미지
  • 002_90x90.jpg : W90 x H90 이미지

  • 좌우 중앙에서 정렬



    양자를 세로로 늘어놓았을 때, 센터(정의:좌우의 중앙의 것)로 가지런히 하고 싶다.

    ClientWidth 당을 사용하면 좋을 것 같다.

    code



    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;
        TImage *Image2;
        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 <Jpeg.hpp>
    #include <memory>
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        String file1 = L"001_110x110.jpg";
        String file2 = L"002_90x90.jpg";
    
        // 1. Load Images
        std::unique_ptr<TPicture> pict(new TPicture);
    
        pict->LoadFromFile(file1);
        Image1->Width = pict->Width;
        Image1->Height = pict->Height;
        Image1->Picture->LoadFromFile(file1);
    
        pict->LoadFromFile(file2);
        Image2->Width = pict->Width;
        Image2->Height = pict->Height;
        Image2->Picture->LoadFromFile(file2);
    
        // 2. Align with the center position
        int img1center = Image1->ClientWidth / 2 + Image1->Left;
        Image2->Left = img1center - Image2->ClientWidth / 2;
    }
    //---------------------------------------------------------------------------
    

    결과





    ScaleBy() 사용 시



    this->ScaleBy(140,100);
    이와 같이 하여 폼의 표시 배율을 변경하고 있는 경우, 상기의 코드에서는 좌우의 어긋남이 발생한다.

    이하의 대응을 하면 「어긋남」은 해소하는 것 같다.
  • TImage 속성 "Center"를 True로 설정

  • 오른쪽 끝에서 정렬



    판독 화상이 다양한 가로 폭의 경우에 대응할 수 있다.

    계산식으로는
  • Image2->Left = Image1->Left + Image1->Width - Image2->Width

  • Utni1.cpp
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include <Jpeg.hpp>
    #include <memory>
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
    
        String file1 = L"001_110x110.jpg";
        String file2 = L"002_90x90.jpg";
    
        // 1. Load Images
        std::unique_ptr<TPicture> pict(new TPicture);
    
        pict->LoadFromFile(file1);
        Image1->Width = pict->Width;
        Image1->Height = pict->Height;
        Image1->Picture->LoadFromFile(file1);
    
        pict->LoadFromFile(file2);
        Image2->Width = pict->Width;
        Image2->Height = pict->Height;
        Image2->Picture->LoadFromFile(file2);
    
        // 2. Align with the center position
        Image2->Left = Image1->Left + Image1->ClientWidth - Image2->ClientWidth;
    }
    //---------------------------------------------------------------------------
    

    결과



    좋은 웹페이지 즐겨찾기