不知道我的理解是不是正确 首先 你将所有的edit控件的hit 设置成你想显示的值(你的要求也需要给每一个edit设置值才可以)然后 选择一个edit 写 enter和exit事件 如下procedure TForm1.Edit1Enter(Sender: TObject); begin TEdit(Sender).Text:=TEdit(sender).Hint; end;procedure TForm1.Edit1Exit(Sender: TObject); begin TEdit(Sender).Text:=''; end; 然后再将所有的edit的enter和exit事件指向edit1的enter和exit事件
property OnEnter:TNotifyevent read FEnter write FEnter;{定义事件} procedure TForm.Enter(Sender: TObject); begin //实现你要的功能TEdit(Sender).Text:= end; //页面初始化时 for i := 0 to Self.ComponentCount - 1 do begin if Self.Components[i] is TEdit then begin TEdit (Self.Components[i]).OnEnter := Enter; //其他事件也在这里赋值比如Exit end; end;
如下procedure TForm1.Edit1Enter(Sender: TObject);
begin
TEdit(Sender).Text:=TEdit(sender).Hint;
end;procedure TForm1.Edit1Exit(Sender: TObject);
begin
TEdit(Sender).Text:='';
end;
然后再将所有的edit的enter和exit事件指向edit1的enter和exit事件
begin
//实现你要的功能TEdit(Sender).Text:=
end; //页面初始化时
for i := 0 to Self.ComponentCount - 1 do
begin
if Self.Components[i] is TEdit then
begin
TEdit (Self.Components[i]).OnEnter := Enter;
//其他事件也在这里赋值比如Exit
end;
end;
想要简单的话,也可以放一个一模一样的Edit控件叠在原来的Edit控件上,以达到类似的效果。
可以把相关的代码放在自己的新Class下(这里只是一个大致的代码):
TSuperEdit= class
protected
F_Owner: TEdit;
F_Mask: TEdit;
procedure OwnerExit(Sender:TObject);
procedure MaskEnter(Sender: TObject);
public
constructor Create(Owner: TEdit; DefaultValue: String);
destructor Destroy;
end ;...
constructor TSuperEdit.Create(Owner: TEdit; DefaultValue: String);
var
r,r1: TRect;
begin
Owner.Text := '';
F_Owner := Owner;
F_Mask := TEdit.Create(Owner.Owner);
F_Mask.Parent := Owner.Parent;
F_Mask.Visible := False;
F_Mask.Text := DefaultValue;
F_Mask.BorderStyle := Owner.BorderStyle ;
self.F_Mask.Font.Color := clGray;
r:= Owner.ClientRect;
F_Mask.SetBounds(F_Owner.Left, F_Owner.Top, F_Owner.Width , F_Owner.Height);
F_Mask.BringToFront;
F_Mask.Visible := True;
F_Mask.OnEnter := MaskEnter;
F_Owner.OnExit := OwnerExit;
end;destructor TSuperEdit.Destroy;
begin
F_Mask.OnEnter := nil;
F_Owner.OnExit := nil;
F_Owner.Free ;
end;procedure TSuperEdit.MaskEnter(Sender: TObject);
begin
F_Owner.SetFocus ;
F_Mask.SendToBack ;
F_Mask.Visible := False;
end;procedure TSuperEdit.OwnerExit(Sender: TObject);
begin
if F_Owner.Text = '' then
begin
F_Mask.BringToFront ;
F_Mask.Visible := True;
end ;
end;
...最后使用时可以用以下代码
...
superEdit: TSuperEdit;
...
SuperEdit := TSuperEdit.Create(YourEditComponent, 'Please Input Value');