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函数就有效果了。

XE6 c++builder Edit垂直居中

时间: 2024-10-19 23:00:41

XE6 c++builder Edit垂直居中的相关文章

XE6 c++builder 设置 font size GetPropInfo SetOrdProp

TObject* objTemp; objTemp = GetObjectProperty(this, "Font"); if (objTemp) { PPropInfo ppi; ppi = GetPropInfo(objTemp->ClassType(), "Size"); if (ppi && (*ppi->PropType)->Kind == tkInteger) SetOrdProp(objTemp, ppi, 12);

c++builder 代码模板 code templates

c++builder6.0  MENU:Tools>Editor Options>Code Insight>Code templates XE6 c++builder D:\Program Files (x86)\Embarcadero\Studio\14.0\ObjRepos\en\Code_Templates\c D:\Users\Administrator\Documents\Embarcadero\Studio\code_templates\C 可参考系统目录的例子 for循环

Java SWT 做计算器。

java  --  swt  - -  计算器 环境搭建 安装java.eclipse.以及对应的swt插件. 开始工程 建立工程: 在java下建立一个在其他 —- WindowsBuilder —- SWTdesigner —- SWT/JFrame Java Project.建立好以后运行将得到一个swt窗口. 设计界面 : 点击代码下的Design选项卡 —- 拖动一个布局到窗口里 —- 然后自定义界面 如果没有发现Design选项卡的话在代码编辑窗口内右击 选择打开方式为: Windo

c++builder XE6 Remote Debuger 远程调试

1.远程目标机器 安装D:\Program Files (x86)\Borland\Remote Debugger\20,没有光盘从已安装的xe6电脑上Bin目录下拷贝文件 bccide.dll bordbk200.dll bordbk200N.dll comp32x.dll DCC32200.dll rmtdbg200.exe 注册dll文件 regsvr32 bordbk200.dllregsvr32 bordbk200N.dll 运行rmtdbg200.exe启动后处于监听状态 2.开发环

发布 Victor 串口控件, 版本 1.5.0.6 VCL/FMX for C++ Builder 10.2 Tokyo, 10.1 Berlin, 10.0 Seattle, XE8, XE7, XE6 包括源码、演示程序

本次发布的 Victor 串口控件 1.5.0.6 包括 VCL 和 FMX (Firemonkey), 支持 C++ Builder 10.2 Tokyo, 10.1 Berlin, 10.0 Seattle, XE8, XE7, XE6 - Win32/Win64 支持其他版本 C++ Builder 的控件的发布和更新进度请关注网站主页的内容. Victor 串口控件 1.5.0.6 VCL/FMX 更新内容: ? 增加支持 FMX (Firemonkey) Win32/Win64,控件包

Victor 串口控件 1.5.0.6 VCL/FMX for C++ Builder 10.2 Tokyo, 10.1 Berlin, 10.0 Seattle, XE8, XE7, XE6 已经发布

Victor 串口控件 1.5.0.6 更新内容: ? 增加支持 FMX (Firemonkey) Win32/Win64,控件包含 VCL 和 FMX 两个框架版本的,可以同时安装  ? 增加 FSM (Finite State Machine) 控件,包括 TVictorFSM 控件和 TVictorFsmStateT 模板,用于结构化处理跳转多而复杂的程序  ? 重新整理和编写例子程序,包括接收和发送二进制数据.收发字符串或文本.收发文件.通过调制解调器拨号和收发数据.枚举串口  ? 新版

DevExpress VCL 2014.1.2 for C++BUILDER XE6

DevExpress VCL 2014.1.2 for C++BUILDER XE6 1)资源下载 DevExpress VCL 2014.1.2下载地址:http://pan.baidu.com/s/1hqpImiS DevExpress VCL 自动安装器下载地址:http://pan.baidu.com/s/1o61bqXG 2)编译和安装 运行DxAutoInstaller,选择DevExpress VCL 2014.1.2所在路径,最后两个复选框选上,单机install 3)应用 拖放

c++builder XE6 线程

class TSleepFunc : public TCppInterfacedObject<TProc> { public: TSleepFunc(TForm28* Form) : FForm(Form) { } virtual void __fastcall Invoke(void) { for (FForm->ClientDataSet1->First(); !FForm->ClientDataSet1->Eof; FForm->ClientDataSet1

c++builder 泛型

http://docwiki.embarcadero.com/RADStudio/XE6/en/How_to_Handle_Delphi_Generics_in_C%2B%2B 这个泛型是为delphi编写的,c++builder不能直接使用,非要用的话按下面的例子,先建立个delphiunit,集成新类,然后再c++builder引用此单元头文件,就可以了.真麻烦. How to Handle Delphi Generics in C++ Go Up to Handling Delphi Fe