高手们,C++ builder中的Edit怎么实现文字垂直居中

xinjingrushui008 2017-05-13 11:00:03
高手们,C++ builder中的Edit怎么实现文字垂直居中,谢谢
...全文
1854 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongss 2017-07-11
  • 打赏
  • 举报
回复
2楼的应该是水平居中吧?
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
垂直居中的话,自绘应该是可以的,不过就麻烦了点。
华山沦贱 2017-07-11
  • 打赏
  • 举报
回复
好几年前妖哥回复过的。 借花献佛一下:
DWORD dwStyle = GetWindowLong(Edit1->Handle, GWL_STYLE);
// ES_LEFT: 左对齐, ES_CENTER: 居中, ES_RIGHT: 右对齐
dwStyle = dwStyle | ES_CENTER;
SetWindowLong(Edit1->Handle, GWL_STYLE, dwStyle);
Edit1->Invalidate();
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
引用 6 楼 hongss 的回复:
[quote=引用 5 楼 u010165006 的回复:] 好奇楼主截图是怎么截的?
Alt+Print Screen~~~[/quote] 我用360极速浏览器看图片外沿有一像素的框,保存下来发现图片上没有。
hongss 2017-07-11
  • 打赏
  • 举报
回复
引用 5 楼 u010165006 的回复:
好奇楼主截图是怎么截的?
Alt+Print Screen~~~
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
引用 4 楼 hongss 的回复:
以前用的一个例子,供参考

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "RzButton.hpp"
#include "RzEdit.hpp"
#include <Vcl.Mask.hpp>
//---------------------------------------------------------------------------
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);
};
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TRzBitBtn *Btn_1;
	TRzBitBtn *Btn_2;
	TRzBitBtn *Btn_3;
	TEdit *Edt_1;
	TRzEdit *RzEdn_1;
	TRzBitBtn *Btn_Style;
	TRzBitBtn *Btn_Win;
	void __fastcall Btn_1Click(TObject *Sender);
	void __fastcall Btn_2Click(TObject *Sender);
	void __fastcall FormCreate(TObject *Sender);
	void __fastcall Btn_3Click(TObject *Sender);
	void __fastcall Btn_StyleClick(TObject *Sender);
	void __fastcall Btn_WinClick(TObject *Sender);
private:	// User declarations
public:		// User declarations
	TMyEdit *myedt[3];

	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RzEdit"
#pragma link "RzButton"
#pragma link "RzEdit"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(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 TForm1::Btn_1Click(TObject *Sender)
{
    // 起作用
    // 首先把控件的属性设置为多行
    RECT rect;
    rect = myedt[0]->ClientRect;

    // 设置内容的,左边距与上边距
    ::OffsetRect(&rect, 0, 5);
    ::SendMessage(myedt[0]->Handle, EM_SETRECT, 0, (LPARAM)&rect);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_2Click(TObject *Sender)
{
    SetWindowLong(myedt[0]->Handle, GWL_STYLE, GetWindowLong(myedt[0]->Handle, GWL_STYLE) | ES_CENTER);
}
//---------------------------------------------------------------------------
TColor ShsFColor[3] = { clRed, clNavy, clYellow };
TColor ShsBColor[3] = { clLime, clInfoBk, clGreen };
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    for(int i=0; i<3; i++)
    {
		myedt[i] = new TMyEdit(this);
		myedt[i]->AutoSize = false;
		myedt[i]->Height = 50;
		myedt[i]->Parent = this;
		myedt[i]->Alignment = taCenter;

		myedt[i]->Text = IntToStr(i+1) + " 中国China";
		myedt[i]->Left = 120;
		myedt[i]->Top  = 16 + ( 8 + myedt[0]->Height ) * i;
		myedt[i]->Font->Style = TFontStyles() << fsBold;
		myedt[i]->Font->Color = ShsFColor[i];
		myedt[i]->Color = ShsBColor[i];
		myedt[i]->ReadOnly = false;

		myedt[i]->SetCenter(); // 起作用
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_3Click(TObject *Sender)
{
	for(int i=0; i<3; i++)
	{
		myedt[i]->SetCenter(); // 起作用
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_StyleClick(TObject *Sender)
{
	TStyleManager::SetStyle( "Metro Blue" );

	Btn_3->Click();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_WinClick(TObject *Sender)
{
	TStyleManager::SetStyle( "Windows" );

	Btn_3->Click();
}
//---------------------------------------------------------------------------
好奇楼主截图是怎么截的?
hongss 2017-07-11
  • 打赏
  • 举报
回复
以前用的一个例子,供参考


//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include "RzButton.hpp"
#include "RzEdit.hpp"
#include <Vcl.Mask.hpp>
//---------------------------------------------------------------------------
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);
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
TRzBitBtn *Btn_1;
TRzBitBtn *Btn_2;
TRzBitBtn *Btn_3;
TEdit *Edt_1;
TRzEdit *RzEdn_1;
TRzBitBtn *Btn_Style;
TRzBitBtn *Btn_Win;
void __fastcall Btn_1Click(TObject *Sender);
void __fastcall Btn_2Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall Btn_3Click(TObject *Sender);
void __fastcall Btn_StyleClick(TObject *Sender);
void __fastcall Btn_WinClick(TObject *Sender);
private: // User declarations
public: // User declarations
TMyEdit *myedt[3];

__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RzEdit"
#pragma link "RzButton"
#pragma link "RzEdit"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(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 TForm1::Btn_1Click(TObject *Sender)
{
// 起作用
// 首先把控件的属性设置为多行
RECT rect;
rect = myedt[0]->ClientRect;

// 设置内容的,左边距与上边距
::OffsetRect(&rect, 0, 5);
::SendMessage(myedt[0]->Handle, EM_SETRECT, 0, (LPARAM)&rect);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_2Click(TObject *Sender)
{
SetWindowLong(myedt[0]->Handle, GWL_STYLE, GetWindowLong(myedt[0]->Handle, GWL_STYLE) | ES_CENTER);
}
//---------------------------------------------------------------------------
TColor ShsFColor[3] = { clRed, clNavy, clYellow };
TColor ShsBColor[3] = { clLime, clInfoBk, clGreen };
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0; i<3; i++)
{
myedt[i] = new TMyEdit(this);
myedt[i]->AutoSize = false;
myedt[i]->Height = 50;
myedt[i]->Parent = this;
myedt[i]->Alignment = taCenter;

myedt[i]->Text = IntToStr(i+1) + " 中国China";
myedt[i]->Left = 120;
myedt[i]->Top = 16 + ( 8 + myedt[0]->Height ) * i;
myedt[i]->Font->Style = TFontStyles() << fsBold;
myedt[i]->Font->Color = ShsFColor[i];
myedt[i]->Color = ShsBColor[i];
myedt[i]->ReadOnly = false;

myedt[i]->SetCenter(); // 起作用
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_3Click(TObject *Sender)
{
for(int i=0; i<3; i++)
{
myedt[i]->SetCenter(); // 起作用
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_StyleClick(TObject *Sender)
{
TStyleManager::SetStyle( "Metro Blue" );

Btn_3->Click();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Btn_WinClick(TObject *Sender)
{
TStyleManager::SetStyle( "Windows" );

Btn_3->Click();
}
//---------------------------------------------------------------------------


604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧