找回密码
 立即注册
查看: 476|回复: 0

DELPHI EDIT控件 使文字 垂直居中

[复制链接]

194

主题

0

回帖

986

积分

管理员

积分
986
发表于 2024-6-15 17:23:38 | 显示全部楼层 |阅读模式
以下代码实现居中有如下弊端。密码格式隐藏失效。


  1. USES StdCtrls;
  2. type
  3. TEdit = class(StdCtrls.TEdit)

  4. protected
  5. procedure CreateParams(var Params: TCreateParams); override;

  6. procedure KeyPress(var Key: Char); override;

  7. procedure WMSize(var msg: TWMSize);message WM_SIZE;

  8. procedure SetParent(AParent: TWinControl);override;

  9. procedure SetCenter;

  10. end;

  11. procedure TEdit.CreateParams(var Params: TCreateParams);
  12. begin
  13.   inherited;
  14.   Params.Style := Params.Style or ES_MULTILINE;
  15. end;
  16. procedure TEdit.KeyPress(var Key: Char);
  17. begin
  18.   inherited;
  19.   if Key = #13 then
  20.      key := #0;
  21. end;
  22. procedure TEdit.SetCenter;
  23. var
  24. DC: HDC;
  25. SaveFont: HFont;
  26. Sin: Integer;
  27. SysMetrics, Metrics: TTextMetric;
  28. Rct: TRect;
  29. begin
  30. DC := GetDC(0);
  31. GetTextMetrics(DC, SysMetrics);
  32. SaveFont := SelectObject(DC, Font.Handle);
  33. GetTextMetrics(DC, Metrics);
  34. SelectObject(DC, SaveFont);
  35. ReleaseDC(0, DC);
  36. if Ctl3D then Sin := 8 else Sin := 6;
  37. Rct := ClientRect;
  38. Sin := Height - Metrics.tmHeight - Sin;
  39. Rct.Top := Sin div 2;
  40. SendMessage(Handle, EM_SETRECT, 0, Integer(@Rct));
  41. end;
  42. procedure TEdit.SetParent(AParent: TWinControl);
  43. begin
  44.   inherited;
  45.   if Parent <> nil then
  46.   begin
  47.     SetCenter;
  48.   end;
  49. end;
  50. procedure TEdit.WMSize(var msg: TWMSize);
  51. begin
  52.   inherited;
  53.   SetCenter;
  54. end;

复制代码


商务合作
业务洽谈
Wechat:S3-SH-CN  
QQ群:128669090
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|S3软件

GMT+8, 2026-6-6 09:34 , Processed in 0.051611 second(s), 19 queries .

Powered by S3

©2001-2025 S3 Team.

快速回复 返回顶部 返回列表