delphi中有日期控件吗?

night_cat 2004-07-05 03:39:32
各位在侠您好:
我想在输入日期时,点击edit1,自动弹出一个窗口供选择日期(包括年,月,日),我见过别的程序可以实现,只不过我没有发现这样的控件,我是delphi的菜鸟,帮帮我好吗?
在上,小弟先谢了!
...全文
1150 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
HWHuang 2004-07-05
  • 打赏
  • 举报
回复
可以在delphi中用qreport啦,和以前的版本一样!
night_cat 2004-07-05
  • 打赏
  • 举报
回复
介绍一个,当然要好用的!
我的报表并不复杂!
mmhhllRen 2004-07-05
  • 打赏
  • 举报
回复
第三方控件多的是。
night_cat 2004-07-05
  • 打赏
  • 举报
回复
其实delphi7里有一个报表工具,Rave
只不过不知道怎么的用的, 外语的界面看的我似懂非懂的,干脆是不懂得了!
谁能帮我啊!
wj964124 2004-07-05
  • 打赏
  • 举报
回复
fei19790920(饭桶的马甲) ,你也不要这么欺负楼主嘛!嘿嘿!
h2yang 2004-07-05
  • 打赏
  • 举报
回复
win32页中Tdatetimepicket
cctv6012cn 2004-07-05
  • 打赏
  • 举报
回复
Win32 页,DateTimePicker !!! 这个就是啦
night_cat 2004-07-05
  • 打赏
  • 举报
回复
即使这样,也不是我所想要的,我所想要的是在Edit中点击后,出现控件,供选择的那种!
night_cat 2004-07-05
  • 打赏
  • 举报
回复
我又了找了一篇文章,大家看看吧!
Delphi中的日期输入


日 期 输 入 虽 然 是 小 事, 但 却 几 乎 每 一 个 程 序 里 都 会 碰 到, 处 理 不 好 也 会 惹 出 许 多 麻 烦(2000 年 问 题 即 是 日 期 引 起 的 世 界 性 麻 烦)。 现 谈 一 谈 笔 者 在Delphi 编 程 中 对 日 期 处 理 的 一 些 经 验 和 感 受, 请 大 家 指 正。

---- 在 程 序 中 使 用 现 成 的 控 件 是 现 在 编 程 的 一 种 趋 势, 其 实,DateTimePicker 就 是 一 个 很 好 的 控 件, 关 键 是 如 何 灵 活 变 通 地 运 用。DateTimePicker 是Microsoft 向Windows95 通 用 控 件 库 新 添 的 控 件, 是 输 入 日 期 和 时 间 的 简 单 工 具, 具 有 良 好 的 图 形 界 面。 该 控 件 在Delphi 名 为Win32 的 控 件 面 板 中, 对 其kind 属 性 的 选 择 可 以 确 定 是 输 入 时 间 还 是 日 期, 在 日 期 输 入 中 又 有 一 些 属 性 可 供 不 同 的 选 择, 其 中Datamode 有dmUpDown 和dmComboBox 两 个 选 项, 选 择 前 者, 就 可 以 在 输 入 日 期 时, 用 鼠 标 点 激 向 上 或 向 下 按 钮, 从 而 可 以 非 常 方 便 地 对 年、 月、 日 进 行 递 增 或 递 减; 选 择 后 者, 在 运 行 时 用 鼠 标 点 激, 就 会 弹 出 一 个 界 面 友 好 的 对 话 框, 从 而 可 以 从 中 选 取 日 期, 这 时 日 是 从 相 应 的 月 历 表 中 选 取, 年 和 月 则 仍 是 通 过 按 箭 头 按 钮 递 增 或 递 减。 但 不 管 是dmUpDown 还 是dmComboBox, 都 可 以 在 其 上 直 接 输 入 年 月 日 的 值, 并 且 自 动 地 保 证 日 期 的 有 效 性( 如 闰 年 问 题 等), 因 此 完 全 涵 盖 了《Delphi 中 日 期 输 入 法 二 则》 一 文 中 自 己 定 制 的 日 期 输 入 窗 口 的 功 能 和 速 度。Dateformat 属 性 有dfLong 和dfShort 两 种 选 择, 前 者 为 长 日 期 型( 如1999 年2 月16 日, 如 果 得 到 的 不 是 理 想 的 形 式, 可 调 整Windows 控 制 面 板 上 区 域 设 置 中 的 日 期 格 式 以 及DateTimePicker 的Font 属 性 的Charset 值, 一 般 情 况 取DEFAULT_CHARSET 或GB2312_CHARSET 即 可), 后 者 为 短 日 期 型( 如99-2-16), 考 虑 到 跨 世 纪 问 题, 短 日 期 要 慎 用。 但 长 日 期 型 的 值 不 可 直 接 作 为 日 期 值 赋 给 日 期 型 的 变 量, 要 做 一 点 转 换 工 作, 举 例 如 下:

procedure Tform1.DateTimePicker1CloseUp(Sender: TObject);
var
Year, Month, Day: Word;
Datetime:TDatetime;
begin
//将DateTimePicker1的年月日的值分别赋给 Year, Month, Day
DecodeDate(DateTimePicker1.datetime, Year, Month, Day);

// EditDATE为TDBEdit型的编辑框,对应一个日期型的数据表字段
EditDATE.Text:=inttostr(year)+'-' +inttostr(Month)+'-'+inttostr(Day);

//若将其变为短日期型的,可以发现Delphi把短日期即00--99年都解释为1900--1999年, 而不受Windows控制面板中区域设置中格式的控制

//把年月日合成为日期值
Datetime:=EncodeDate(Year,Month,Day);
end;

---- 上 面 这 个 小 程 序 中,form1 的DateTimePicker1 的Dateformat 属 性 为dfLong,Datamode 的 属 性 为dmComboBox。 DateTimePicker1CloseUp 为 日 期 输 入 对 话 框 缩 起 时 发 生 的 事 件, 也 可 以 用OnChang 事 件, 即DateTimePicker 发 生 变 化 时 触 发, 则Datamode 属 性 无 论 取 何 值 都 可 使 用。

---- 可 见 对DateTimePicker 控 件 只 要 稍 加 处 理 即 可 美 观 快 捷 地 解 决 日 期 输 入 问 题。, 默 许 状 态 下 日 期 只 能 在1752 年9 月14 日 至2999 年12 月31 日 之 间, 但 可 以 通 过 对 其mindate 和maxdate 赋 值 扩 大 选 择 范 围。

---- 但 是 该 控 件 也 有 一 点 缺 憾, 对1899 年12 月30 日 以 前 的 数 值 录 入 须 小 心, 容 易 出 错。 这 倒 引 入 了 另 一 个 话 题, 即Delphi 中 的 日 期 型( 即Tdate 型 ) 的 定 义 为:type TDate = type TDateTime; 而TdateTime 型 的 定 义 为:type TDateTime = type Double; 可 见 日 期 型 归 根 到 底 是 双 精 度 浮 点 型(Double 型),Delphi 规 定 其 整 数 部 分 为1899 年12 月30 日 以 来 的 天 数, 小 数 部 分 则 为24 小 时 按 比 例 分 割 存 储, 例 如:
0 12/30/1899 12:00 am 2.75 1/1/1900 6:00 pm
-1.25 12/29/1899 6:00 am 35065 1/1/1996 12:00 am

(12:00 am 即 为 凌 晨0 点,11:00 am 即 为 早 晨11 点,12:00 pm 即 为 中 午12 点,1:00 pm 即 为 中 午1 点)

---- 而 在Delphi1.0 中, 其 整 数 部 分 为 公 元1 年 以 来 的 天 数, 之 所 以 这 样 改 动 是 为 了 更 好 地 与OLE2.0 相 兼 容。 对 于 日 期 的 运 算 一 定 得 注 意 类 型 的 匹 配, 而 且 由 于 日 期 型 实 则 为Double 型, 所 以 可 对 其 进 行 加 减 乘 除 运 算, 现 举 例 如 下:
procedure TForm1.Table1CalcFields(DataSet: TDataset);
var
t1, t2: tDateTime;
begin
table1d1.asDateTime := Date + 2; {or table1d1.value := date + 2;} // Date为系统日期
table1d2.asDateTime := Date - 2;

//d1,d2为表table1中date or dateTime型字段。
t1 := table1d1.asDateTime;
t2 := table1d2.asDateTime;

// trunc为取整函数,d3为表table1中integer型字段,结果为日期d1和d2的差。
table1d3.asInteger := trunc(double(t1) - double(t2));
end;

---- 另 外, 在Delphi 中 可 以 方 便 地 显 示 系 统 时 间, 只 要 利 用DateToStr(Date) 及TimeToStr(Time) 函 数 即 可 实 现。 也 可 以 通 过 调 用WindowsAPI 函 数 来 实 现 对 系 统 时 间 的 设 置, 具 体 方 法 如 下:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:='1998-12-12 12:00 am';
end;

//可在运行时,也可在Edit1中重新键入日期, 但须注意格式。
procedure TForm1.Button2Click(Sender: TObject);
var
systemtime:Tsystemtime;
DateTime:TDateTime;
begin
DateTime:=StrToDateTime(Edit1.text);
DateTimeToSystemTime(DateTime,systemtime);
SetLocalTime(SystemTime);
GetLocalTime(SystemTime);//读取北京东8区时间
DateTime:=SystemTimeToDateTime(SystemTime);
Edit2.Text:=DateTimeToStr(DateTime);
end;
//Button2点激后,系统时间就变为Edit1中的时间了。


--------------------------------------------------------------------------------

中国计算机世界出版服务公司版权所有
night_cat 2004-07-05
  • 打赏
  • 举报
回复
TO:fei19790920(饭桶的马甲)
你错了,我肯定知道的,结帖都不会,我也太菜了吧!
我是学VC的,去年刚毕业,
因为快速开发的需要,不得不临时学delphi
呵呵,,打开编译器,还没有把控件看一遍呢,
我打算用dbexpress,串口通信,还有多信程,后台msserver,这四者结合起来,
大概四个月后,两个半月后,要交货的!
今天让大家笑话了!
不好意思!
fhuibo 2004-07-05
  • 打赏
  • 举报
回复
有,在Win32而中!

DateTimePicker.date
Arockroll 2004-07-05
  • 打赏
  • 举报
回复
哈哈,顶
fei19790920 2004-07-05
  • 打赏
  • 举报
回复
请问,DELPHI中有控件吗?

楼主太菜了吧,我敢说楼主一定不知道怎么结贴!!
vavyboyleon 2004-07-05
  • 打赏
  • 举报
回复
多新鲜,肯定有阿
Sunniness 2004-07-05
  • 打赏
  • 举报
回复
有,在Win32而中!

TDateTimePicker
ziqing 2004-07-05
  • 打赏
  • 举报
回复
TDATATIMEPICKET
jacket008 2004-07-05
  • 打赏
  • 举报
回复
打错win32页中Tdatetimepicker
myy 2004-07-05
  • 打赏
  • 举报
回复
Win32 页,DateTimePicker
jacket008 2004-07-05
  • 打赏
  • 举报
回复
win32页中Tdatetimepicket

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧