起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: etqxq

请问怎么让日期手动录入,而不是选择呢?**

[复制链接]
发表于 2008-11-12 09:23:51 | 显示全部楼层
对于日期的输入格式的校验同样的需要自己代码控制。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-12 12:33:25 | 显示全部楼层
请把代码贴出来吧,谢谢
回复 支持 反对

使用道具 举报

发表于 2008-11-12 12:55:04 | 显示全部楼层
字段类型为日期,表现为字符串,然后在字段的这两个事件上写这样的代码(录入时:2008年11月01日;保存的是:2008-01-11):
procedure TB.BizFieldDef_aSetAsString(Field: TDataField; const Value: string);
var
  lYear,lMonth,lDay : String;
  lStr : String;
begin
//
  try
    lStr := Value;
    lYear := Copy(lStr,1,Pos('年',lStr) - 1);
    lStr := Copy(lStr,Pos('年',lStr) + 1,Length(lStr));
    lMonth := Copy(lStr,1,Pos('月',lStr) - 1);
    lStr := Copy(lStr,Pos('月',lStr) + 1,Length(lStr));
    lDay := Copy(lStr,1,Pos('日',lStr) - 1);
    Field.AsString := lYear + '-' + lDay + '-' + lMonth;
  except
    Dialogs.ShowMessage('输入日期不合法!');
    Field.AsVariant := nil;
  end;
end;

procedure TB.BizFieldDef_aGetAsString(Field: TDataField; var Value: string);
var
  lYear,lMonth,lDay : String;
  lStr : String;
begin
//
  lStr := Field.AsString;
  lYear := Copy(lStr,1,Pos('-',lStr) - 1);
  lStr := Copy(lStr,Pos('-',lStr) + 1,Length(lStr));
  lDay := Copy(lStr,1,Pos('-',lStr) - 1);
  lStr := Copy(lStr,Pos('-',lStr) + 1,Length(lStr));
  lMonth := lStr;
  Value := lYear + '年' + lMonth + '月' + lDay + '日';
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-12 16:43:44 | 显示全部楼层
我把代码修改成这样:


procedure TGWYLCS.FieldKYSJSetAsString(Field: TDataField; const Value: string);
var
  lYear,lMonth,lDay : String;
  lStr : String;
begin
  try
    lStr := Value;
    if Length(lStr)<>8 then
    begin
      jsDialogs.ShowMsg('日期长度必须是12位!','提示');
      Field.AsString:=EmptyStr;
      Field.FocusControl;
      exit;
    end;
    lYear := Copy(lStr,1,4);
    lMonth := Copy(lStr,5,2);
    lDay := Copy(lStr,7,2);
    try
      StrToDateTime(lYear + '-' + lMonth + '-' + lDay);
    except
      jsDialogs.ShowMsg('日期校验不正确!','提示');
      Field.AsString:=EmptyStr;
      Field.FocusControl;
      exit;
    end;
    Field.AsString := lYear + '-' + lMonth + '-' + lDay;
  except
    Dialogs.ShowMessage('输入日期不合法!');
    Field.AsVariant := nil;
  end;
end;

procedure TGWYLCS.FieldKYSJGetAsString(Field: TDataField; var Value: string);
var
  lYear,lMonth,lDay : String;
  lStr : String;
begin
//
  lStr := Field.AsString;
  lYear := Copy(lStr,1,Pos('-',lStr) - 1);
  lStr := Copy(lStr,Pos('-',lStr) + 1,Length(lStr));
  lMonth := Copy(lStr,1,Pos('-',lStr) - 1);
  if Length(lMonth)=1 then lMonth:='0'+lMonth;
  lStr := Copy(lStr,Pos('-',lStr) + 1,Length(lStr));
  lDay := lStr;
  if Length(lDay)=1 then lDay:='0'+lDay;
  Value := lYear + '年' + lMonth + '月' + lDay + '日';
end;

把校验加进去了。
不过这个SETFOCUS不行,请问有其它方法让这个FIELD获得焦点吗??
回复 支持 反对

使用道具 举报

发表于 2008-11-12 16:45:05 | 显示全部楼层
这个好象没有好办法了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-27 06:07 , Processed in 0.038994 second(s), 13 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表