编程资料集中营
 | 网站首页 | 文章中心 | 编程资料2 | 软件下载 | BT下载 | 八卦星闻 | 音乐在线 | 在线游戏 | 免费电影 | 进入问吧 | 
Delphi中日期输入法二则,在Windows95中,日期的显示格式和输入格式有好几种,如:yyyy-m-d、m-d-yyyy等,这可以在控制面板的区域设置中设置。因此,不同计算机上的日期格式很可能不一样,在输入日期值时,年、月、日的输入顺序就可能随机器的不同而发生变化,这往往会把用户弄糊涂。另外,日期值的有效性也是一个值得注意的问题。为此,笔者介绍两种既可以避免日期格式不一致,又可以保,
您现在的位置: 编程资料,学习资料,c,c++,vc,vc++,java,jsp,j2ee,j2me,asp,php >> 文章中心 >> delphi >> 文章正文
【字体:
Delphi中日期输入法二则   进入问吧

本站地址:http://www.bajiao123.com

作者:佚名    文章来源:不详    点击数:    更新时间:2007-8-1    

Delphi中日期输入法二则

  在Windows 95 中, 日 期 的 显 示 格 式 和 输 入 格 式 有 好 几 种, 如:yyyy-m-d、m-d-yyyy 等, 这 可 以 在 控 制 面 板 的 区 域 设 置 中 设 置。 因 此, 不 同 计 算 机 上 的 日 期 格 式 很 可 能 不 一 样, 在 输 入 日 期 值 时, 年、 月、 日 的 输 入 顺 序 就 可 能 随 机 器 的 不 同 而 发 生 变 化, 这 往 往 会 把 用 户 弄 糊 涂。 另 外, 日 期 值 的 有 效 性 也 是 一 个 值 得 注 意 的 问 题。 为 此, 笔 者 介 绍 两 种 既 可 以 避 免 日 期 格 式 不 一 致, 又 可 以 保 证 日 期 有 效 性 的 日 期 输 入 方 法。

一、 使 用TdateTimePicker 控 件

  TdateTimePicker 控 件 在Delphi 名 为Win32 的 控 件 面 板 中。 它 提 供 了 一 个 象 日 历 一 样 的 日 期 选 择 界 面, 可 以 从 中 选 择 一 个 日 期 值, 选 中 的 日 期 值 存 放 在 名 为Date 的 属 性 中。TdateTimePicker 控 件 的 使 用 比 较 简 单, 读 者 不 妨 亲 自 去 体 验 一 下。 需 要 注 意 的 是, 其 属 性Kind 的 值 为dtkDate 时 输 入 日 期, 为dtkTime 时 输 入 时 间, 时 间 值 存 放 在 名 为Time 的 属 性 中。TdateTimePicker 控 件 使 用 方 便 并 能 保 证 输 入 的 是 有 效 的 日 期 值, 但 日 期 的 输 入 采 用 选 择 的 方 式, 因 此 输 入 的 速 度 较 慢。

二、 定 制 日 期 输 入 窗 口

  定 制 自 己 的 日 期 输 入 窗 口 可 以 较 快 地 输 入 日 期 值, 同 时 也 可 以 保 证 输 入 有 效 的 日 期 值, 但 需 要 编 程 来 控 制。 下 面 逐 步 介 绍 日 期 输 入 示 例 程 序 的 编 制 过 程。

1.建 立 一 个 应 用 程 序( 项 目), 在 窗 体(Form) 中 放 置 三 个 编 辑 框, 名 字 分 别 为EditYear、EditMonth 和EditDay, 分 别 用 来 输 入 年、 月 和 日。 清 除 它 们 的Text 属 性 中 的 字 符。
2.为 了 保 证 只 能 在 编 辑 框 中 输 入 数 字, 在EditYear 的OnKeyPress 事 件 中, 加 入 如 下 所 示 的 代 码:

procedure TForm1.EditYearKeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9',#8,#13]) then

//输入的不是数字键、删除键或回车键

begin

Beep; //发声警告

Key:=#0; //删除输入的非法字符

end;

end;

3.把EditMonth 和EditDay 的OnKeyPress 事 件 指 定 为EditYearKeyPress。
4.在 窗 体 中 放 入 一 个 按 钮, 取 名 为BitBtnCheck, 把 其 属 性Caption 改 为" 检 验", 在BitBtnCheck 的OnClick 事 件 中, 加 入 代 码 后 如 下 所 示:

procedure TForm1.BitBtnCheckClick(Sender: TObject);

var Year,Month,Day,ErrorCode:Integer;

Datetime:TDatetime;

begin

Val(EditYear.Text,Year,ErrorCode);

Val(EditMonth.Text,Month,ErrorCode);

Val(EditDay.Text,Day,ErrorCode);

try

Datetime:=EncodeDate(Year,Month,Day);

//把年月日合成日期值

ShowMessage('输入的日期为:'+DatetimeToStr(Datetime));

except

on EConvertError do //若日期值无效,则执行以下代码

begin

ShowMessage('输入的日期无效,请检查!');

EditYear.SetFocus;

end;

end;

end;

5.在 窗 体 中 再 加 入 一 个 按 钮, 取 名 为BitBtnClose, 把 其 属 性Caption 改 为" 关 闭", 在BitBtnClose 的OnClick 事 件 中, 添 加 如 下 代 码:

procedure TForm1.BitBtnCloseClick(Sender: TObject);

begin

Close;

end;

6.运 行 本 程 序, 输 入 日 期 值, 按" 检 验" 按 钮 进 行 测 试。
7.单 击 按 钮" 关 闭", 退 出 运 行。

  本 程 序 在Delphi 3.0 下 调 试 通 过。

  根 据 第 二 种 方 法 的 思 想, 可 以 编 制 一 个 输 入 日 期 值 的 控 件。 把 它 注 册 到Delphi 的 控 件 面 板 后, 就 可 以 象TEdit 等 标 准 控 件 那 样 使 用 它 了。 实 现 的 大 致 思 路 是: 以TPanel 类( 控 件) 为 父 类 创 建 一 个 名 为TDatePanel 的 类, 在 类TDatePanel 中 加 入 三 个 编 辑 框, 分 别 用 来 输 入 年 月 日, 并 在 类TDatePanel 的 实 现(implementation) 中 对 输 入 的 日 期 进 行 有 效 性 检 查。 感 兴 趣 的 读 者 不 妨 试 一 试。

yuqing yq_buaa@263.net

1.Mail.txt: 本 文 件, 信 函 文 件
2.issue.rtf:Word 文 件, 稿 件
3.DatePanl.pas:TdatePanel 控 件 的 实 现 单 元( 其 使 用 请 见 该 单 元 开 头 部 分 的 注 释)
4.Project1.dpr : 测 试TdatePanel 控 件 的 项 目 文 件
5.Project1.res: 项 目 的 资 源 文 件
6.demo.dfm:TdatePanel 控 件 的 测 试 单 元 对 应 的Form 文 件
7.demo.pas:TdatePanel 控 件 的 测 试 单 元 对 应 的 源 程 序
 

   

进入问吧

本站地址:http://www.bajiao123.com

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 高级搜索
    编程资料集中营