Delphi7如何实现让Tedit显示文字垂直居中(上下居中)

通过下面的组件,可以在输入文字的时候自动垂直居中 
直接把下面代码保存到Unit1.pas即可
------------------------------------------

复制代码
 1 unit Unit1;
 2 
 3 interface
 4 
 5 uses
 6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 7   Dialogs, StdCtrls;
 8 
 9 type
10   TEdit = class(StdCtrls.TEdit)
11   protected
12     procedure CreateParams(var Params: TCreateParams); override;
13     procedure KeyPress(var Key: Char); override;
14     procedure WMSize(var msg: TWMSize);message WM_SIZE;
15     procedure SetParent(AParent: TWinControl);override;
16     procedure SetCenter;
17   end;
18   TForm1 = class(TForm)
19     Button1: TButton;
20     Edit1: TEdit;
21     procedure FormCreate(Sender: TObject);
22   private
23     { Private declarations }
24   public
25     { Public declarations }
26      Edt: TEdit;
27   end;
28 
29 var
30   Form1: TForm1;
31 
32 implementation
33 
34 {$R *.dfm}
35 { TEdit }
36 
37 procedure TForm1.FormCreate(Sender: TObject);
38 begin
39   Edt := TEdit.Create(self);
40   Edt.Parent := self;
41   Edt.AutoSize := False;
42   Edt.Height := 50;
43 end;
44 
45 procedure TEdit.CreateParams(var Params: TCreateParams);
46 begin
47   inherited;
48   Params.Style := Params.Style or ES_MULTILINE;
49 end;
50 
51 procedure TEdit.KeyPress(var Key: Char);
52 begin
53   inherited;
54   if Key = #13 then
55     key := #0;
56 end;
57 
58 procedure TEdit.WMSize(var msg: TWMSize);
59 begin
60   inherited;
61   SetCenter;
62 end;
63 
64 procedure TEdit.SetParent(AParent: TWinControl);
65 begin
66   inherited;
67   if Parent <> nil then
68   begin
69     SetCenter;
70   end;
71 end;
72 
73 procedure TEdit.SetCenter;
74 var
75 DC: HDC;
76 SaveFont: HFont;
77 Sin: Integer;
78 SysMetrics, Metrics: TTextMetric;
79 Rct: TRect;
80 begin
81 DC := GetDC(0);
82 GetTextMetrics(DC, SysMetrics);
83 SaveFont := SelectObject(DC, Font.Handle);
84 GetTextMetrics(DC, Metrics);
85 SelectObject(DC, SaveFont);
86 ReleaseDC(0, DC);
87 if Ctl3D then Sin := 8 else Sin := 6;
88 Rct := ClientRect;
89 Sin := Height - Metrics.tmHeight - Sin;
90 Rct.Top := Sin div 2;
91 SendMessage(Handle, EM_SETRECT, 0, Integer(@Rct));
92 end;
93 
94 
95 
96 
97 end.
复制代码

 




当这个保存成unit1.pas 后,然后通过delphi组件安装功能来安装组件,具体安装方法可以到网上查方法

posted on   天军  阅读(2691)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示