在Lazarus中要实现
在需要的unit添加EditCenter单元。
注意:EditCenter单元一定要放StdCtrls后面,否则无效果。
TEdit
组件的文本垂直居中,可以通过自定义TEdit
组件并重写其CreateParams
方法来设置编辑框的样式为多行,然后通过SetCenter
方法来调整文本的垂直位置。在需要的unit添加EditCenter单元。
注意:EditCenter单元一定要放StdCtrls后面,否则无效果。
unit EditCenter; {$mode ObjFPC}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Messages, LCLType, LCLIntf; Type TEdit = class(StdCtrls.TEdit) protected procedure CreateParams(var Params: TCreateParams); override; procedure KeyPress(var Key: Char); override; procedure WMSize(var msg: TWMSize); message WM_SIZE; procedure SetParent(AParent: TWinControl); override; procedure SetCenter; end; implementation procedure TEdit.CreateParams(var Params: TCreateParams); begin inherited; Params.Style := Params.Style or ES_MULTILINE; end; procedure TEdit.KeyPress(var Key: Char); begin inherited; if Key = #13 then key := #0; end; procedure TEdit.WMSize(var msg: TWMSize); begin inherited; SetCenter; end; procedure TEdit.SetParent(AParent: TWinControl); begin inherited; if Parent <> nil then begin SetCenter; end; end; procedure TEdit.SetCenter; var DC: HDC; SaveFont: HFont; Sin: Integer; SysMetrics, Metrics: TTextMetric; Rct: TRect; begin DC := GetDC(0); GetTextMetrics(DC, SysMetrics); SaveFont := SelectObject(DC, Font.Handle); GetTextMetrics(DC, Metrics); SelectObject(DC, SaveFont); ReleaseDC(0, DC); Rct := ClientRect; Sin := Height - Metrics.tmHeight - Sin; Rct.Top := Sin div 2; SendMessage(Handle, 180, 0, Integer(@Rct)); end; end.
使用范例:
unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, EditCenter; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; private public end; var Form1: TForm1; implementation {$R *.lfm}
编译运行的效果:
这个方面windows和linux都有效。
注意:要设置控件的AutoSize:=false;
分类:
Lazarus
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~