这是一个老问题了,我以前也问过,也在网上搜索过,但一直没有找到答案,
希望高手回答。
也许有人说这个问题无聊,其实在实际中很多时候需要,否则设计的东西不好看。
希望高手回答。
也许有人说这个问题无聊,其实在实际中很多时候需要,否则设计的东西不好看。
解决方案 »
- 除了愤怒还能有什么
- 求救,明天就要用了,delphi+ado+access添加删除修改的语句怎么写啊.为什么跟连接SQLserver的不一样
- 菜问:delphi写的WEB Service 服务器端程序是否可以在IIS/Apache下运行?
- 帮忙看一下这个字段求合问题,提问者有点菜.
- 请问怎么将收藏夹中的精彩贴子下载到本地硬盘?
- Delphi 6.0到那里可以下载啊Delphi 6.0到那里可以下载啊Delphi 6.0到那里可以下载啊Delphi 6.0到那里可以下载啊Delphi 6.0到那里可以下载
- 请问哪里有delphi6.0的中文帮助下载啊
- 关于模糊查询的问题.急!
- 高分求教
- 请问在WIN2000下怎样屏蔽系统热键,如(CTRL+Alt+Del)
- 关于数据表转存于EXCEL的问题
- 这样的数据如何提取?
type
TDBEdit=class(DBCtrls.TDBEdit)//设置DBEdit的对齐问题
private
FAlignment:TAlignment;
procedure SetAlignment(Value:TAlignment);
protected
procedure CreateParams(var Params:TCreateParams);override;
public
property Alignment:TAlignment read FAlignment write SetAlignment;
end;implementation{ TDBEdit }procedure TDBEdit.CreateParams(var Params: TCreateParams);
const
Alignments:array[TAlignment] of LongWord=(ES_Left,ES_Right,ES_Center);
begin
inherited CreateParams(Params);
Params.Style:=Params.Style or Alignments[FAlignment];
end;procedure TDBEdit.SetAlignment(Value: TAlignment);
begin
if FAlignment<>Value then
begin
FAlignment:=Value;
RecreateWnd;
end;
end;
重载原来的,然后自己加个属性进去
根据朋友写的 ES_Left,ES_Right,ES_Center 这些属性,应该是左右居中的吧。
继续请教上下居中的方法。
begin
SetWindowLong(Edit1.Handle, GWL_STYLE,
GetWindowLong(Edit1.Handle, GWL_STYLE) Or ES_center);
Edit1.SetFocus;
end;测试OK。
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;
这个里面的Handle是Edit.Handle
edit1中的内容没有反映????
把Edit的自动大小设置为False
然后每次设置高度的时候,调用一下这个玩意
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
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(edit1.Handle, EM_SETRECT, 0, Integer(@Rct));
end;end.
Edit的自动大小设置为False
已设置,按下按钮后,还是没变化?
求解,高手
如果是memo或RichEdit控件的话,下面代码可简单实现:procedure TForm1.Button1Click(Sender: TObject);
var
Rect: TRect;
begin
SendMessage(RichEdit1.Handle, EM_GETRECT, 0, LongInt(@Rect));
Rect.Top :=Rect.Top+20;//这里要加多少自己算,随便加个20就可以下移。
Rect.Bottom := Rect.Bottom - 19;
SendMessage(RichEdit1.Handle, EM_SETRECT, 0, LongInt(@Rect));
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, 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;
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
Edt: TEdit;
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
ShowMessage('asdf');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Edt := TEdit.Create(self);
Edt.Parent := self;
Edt.AutoSize := False;
Edt.Height := 50;
end;{ TEdit }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;end.
不知我发的图能不能看见,难道该论坛不是所见所得模式??http://hi.csdn.net/attachment/200911/20/1795483_1258682154Rj7T.jpg
大家看清楚了,每行应有20个DBEdit,所以DBEdit控件宽度已经不能再宽了(增大字体的做法显然不行),高度如果能再高点就好看了。
如果分辨率是1024×768 ,那“一览表”的宽度基本正好,但高度就有点不够了,这时就需要增高DBEdit了,否则就太难看了。(这么多的DBEdit,难道得自己做个控件?)看超连接下的图:
http://hi.csdn.net/attachment/200911/20/1795483_1258688122bSX8.jpg