怎样设置时间字段的editmask属性?(100分)

  • 主题发起人 主题发起人 mender2002cn
  • 开始时间 开始时间
M

mender2002cn

Unregistered / Unconfirmed
GUEST, unregistred user!
在ADOTABLE为日期字段建立固定字段对象,在其DISPLAYFORMAT属性中设置
为[yyyy'年'mm'月'dd'日'],editmask属性设置为[9999年99月99日],在显示日期字段时,
显示正确,但在把光标移到DBEDIT控件准备修改日期时,原来的日期值却变了:
如:数据库中日期字段值为1999/12/11
在DBEDIT控件中显示1999年12月11日(显示正确)
在将光标移到该控件中准备修改时,其日期却变为 1999年 月 日,
月和日都变为空了。
 
是不是应该将editmask属性设置为[9999年12月31日],我没有去试过,
但我认为应该是这样的,去试试吧!
 
到底是啥原因造成此問題我不知,
但可以用別的方法實現你要的效果。
假設你的日期字段名為startdate,
設置其editmask屬性為[9999年99月99日],
DISPLAYFORMAT屬性不要設,讓其為空。
在onstartdateSetText事件與onstartdategetText
事件中寫代碼。
procedure TForm1.ADOTable1startdateGetText(Sender: TField;
var Text: String; DisplayText: Boolean);
begin
if sender.asstring<>'' then
text:=formatdatetime('yyyy''年''mm''月''dd''日''',sender.asdatetime);
end;

procedure TForm1.ADOTable1startdateSetText(Sender: TField;
const Text: String);
var str:string;
begin
Try
str:=stringreplace(text,'年','/',[rfIgnoreCase]);
str:=stringreplace(str,'月','/',[rfIgnoreCase]);
sender.asstring:=stringreplace(str,'日','',[rfIgnoreCase]);
Except
showmessage('日期格式錯!');
abort;
end;
end;
 
要按你那样的做法恐怕是不行了。这跟EDITMASK属性有关,因为汉字占两字节宽。
 
接受答案了.
 
后退
顶部