zoukankan      html  css  js  c++  java
  • XE6 c++builder Edit垂直居中

    class TMyEdit : public Vcl::Stdctrls::TEdit
    {
        virtual void __fastcall CreateParams(TCreateParams& Params);
        void __fastcall WMSize(TWMSize &Message);
        virtual void __fastcall SetParent(TWinControl *AParent);
    
    
    public:
        __fastcall TMyEdit(TComponent* Owner);
        void __fastcall SetCenter(void);
        inline __fastcall virtual ~TMyEdit(void)      {      }
    
        inline __fastcall TMyEdit(HWND ParentWindow) : Vcl::Stdctrls::TEdit(ParentWindow)     {        }
        BEGIN_MESSAGE_MAP
            MESSAGE_HANDLER(WM_SIZE, TWMSize, WMSize);
        END_MESSAGE_MAP(TEdit);
    };
    // ---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit26.h"
    #include "Unit27.hpp"
    
    // ---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "RzEdit"
    #pragma resource "*.dfm"
    TForm25 *Form25;
    
    // ---------------------------------------------------------------------------
    __fastcall TForm25::TForm25(TComponent* Owner)
        : TForm(Owner)
    {
    }
    
    __fastcall TMyEdit::TMyEdit(TComponent* Owner) : TEdit(Owner)
    {
    
    }
    
    void __fastcall TMyEdit::CreateParams(TCreateParams& Params)
    {
        TEdit::CreateParams(Params);
        Params.Style = Params.Style | ES_MULTILINE;
    
    }
    
    void __fastcall TMyEdit::SetParent(TWinControl *AParent)
    {
        TEdit::SetParent(AParent);
        if (AParent != NULL)
            SetCenter();
    
    }
    
    // ---------------------------------------------------------------------------
    void __fastcall TMyEdit::WMSize(TWMSize &Message)
    {
        TEdit::Dispatch(&Message);
        SetCenter();
    
    }
    
    void __fastcall TMyEdit::SetCenter(void)
    {
        HDC DC;
        HFONT SaveFont;
        int Sin;
        TTextMetric SysMetrics, Metrics;
        TRect Rct;
    
        DC = GetDC(0);
        GetTextMetrics(DC, &SysMetrics);
        SaveFont = (HFONT) SelectObject(DC, Font->Handle);
        GetTextMetrics(DC, &Metrics);
        SelectObject(DC, SaveFont);
        ReleaseDC(0, DC);
        if (Ctl3D)
            Sin = 8;
        else
            Sin = 6;
        Rct = ClientRect;
        Sin = Height - Metrics.tmHeight - Sin;
        Rct.Top = Sin / 2;
        SendMessage(Handle, EM_SETRECT, 0, (LPARAM)(&Rct));
    }
    
    // ---------------------------------------------------------------------------
    
    void __fastcall TForm25::Button7Click(TObject *Sender)
    { // 起作用
        // 首先把控件的属性设置为多行
        RECT rect;
        rect = myedt->ClientRect;
    
        // 设置内容的,左边距与上边距
        ::OffsetRect(&rect, 0, 5);
        ::SendMessage(myedt->Handle, EM_SETRECT, 0, (LPARAM)&rect);
    }
    
    // ---------------------------------------------------------------------------
    void __fastcall TForm25::Button1Click(TObject *Sender)
    {
        SetWindowLong(myedt->Handle, GWL_STYLE,
            GetWindowLong(myedt->Handle, GWL_STYLE) | ES_CENTER);
    }
    // ---------------------------------------------------------------------------
    
    void __fastcall TForm25::FormCreate(TObject *Sender)
    {
        myedt = new TMyEdit(this);
        myedt->AutoSize = false;
        myedt->Height = 50;
        myedt->Parent = this;
    
        myedt->Text = "hello";
        myedt->Alignment = taCenter;
    }
    
    // ---------------------------------------------------------------------------
    void __fastcall TForm25::Button4Click(TObject *Sender)
    {
        myedt->SetCenter(); // 起作用
    }
    // ---------------------------------------------------------------------------

    原帖是delphi的,转自http://www.cnblogs.com/ntearn/archive/2012/07/25/2607570.html

    控件创建后不起作用,没有效果。显示调用SetCenter函数就有效果了。

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/cb168/p/3922156.html
Copyright © 2011-2022 走看看