|
|
以下代码实现居中有如下弊端。密码格式隐藏失效。
- USES StdCtrls;
- 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;
复制代码
|
|