delphi中edit控件內容上下居中


  

關於delphi中edit控件內容上下居中問題,在網上找了很多,大多介紹的是左右居中,edit左右居中在delphi的高版本里已經增加了一個Alignment屬性,設置為taCenter即可,最終在網上找到了上下居中的解決辦法,在type加入如下代碼:

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;

然后在程序代碼中分別加入以下過程代碼:

 

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.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);
  if Ctl3D then Sin :=  8  else Sin :=  6;
 Rct := ClientRect;
 Sin := Height - Metrics.tmHeight - Sin;
 Rct.Top := Sin div  2;
 SendMessage(Handle, EM_SETRECT,  0, Integer(@Rct));
end;

procedure TEdit.SetParent(AParent: TWinControl);
begin
  inherited;
   if Parent <> nil then
  begin
    SetCenter;
  end;
end;

procedure TEdit.WMSize( var msg: TWMSize);
begin
  inherited;
  SetCenter;
end;

運行后,界面上的edit內容均上下居中了。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM