如何让TDateTimePicker变平,也就是相当于TEdit的Ctl3D:=False up 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TEdit和TDataTimePicker都是从TWinControl派生下来的。Edit的而3D属性是从TWinControl下面的TCustomEdit才有的属性。TDataTimePicker的祖先类TCommonCalendar没有这个属性。想直接设置它的3D属性,是办不到的。 TWinControl ___________|______________ | | TCustomEdit(3D属性) TCommonCalendar(没有3D属性) | | Edit TCommonCalendar 提供两种解决办法:1:这种办法比较简单,容易实现。就是在界面上放一个Edit或者ComboBox将它的Ctl3D改为false。然后放一个MonthCalendar,设置Visible为false,当ComboBox 相应OnClick事件时MonthCaloendar的Visible := True; ComboBox.Text = DateToStr(MonthCalendar1.Date);等等....你自己琢磨吧。2:写一个控件自己直接从TWinControl继承下来,写它的3D属性。这个比较复杂,相对比较难。可以先参考有关资料。 发现好多人问这个,我看了一下,发现edit的3d效果是delphi画出来的,所以比较方便的改成非3d的,可是日期控件是windows的"SysDateTimePick32"窗口类生成的默认就是3d的,好像是改不了。不过我在wm_paint的消息中把3d的颜色覆盖掉了,效果还可以,就是那个按钮没有作成3d的,自己该吧。1. 找到 TDateTimePicker 的源代码,增加wm_paint的消息处理函数。 procedure wmpaint(var message: tmessage); message wm_paint;procedure TDateTimePicker.wmpaint(var message: tmessage);var dc: hdc; Rec: TRect; BtnFaceBrush, WindowBrush: HBRUSH;begin inherited; BtnFaceBrush := CreateSolidBrush(ColorToRGB(clwhite)); WindowBrush := CreateSolidBrush(ColorToRGB(clBlack)); Rec.TopLeft := ClientToScreen(ClientRect.TopLeft); Rec.BottomRight := ClientToScreen(ClientRect.BottomRight); dc := getdc(0); InflateRect(Rec, 1, 1); FrameRect(dc, Rec, BtnFaceBrush); InflateRect(Rec, 1, 1); FrameRect(dc, Rec, WindowBrush); releasedc(0, dc); DeleteObject(WindowBrush); DeleteObject(BtnFaceBrush);end;重新编译一下可以看看效果。 SQL 语句错误 怎样在INTRAWEB中使用FASTREPORT? fast report 使用哪个函树 可以求这一列的和啊 呵呵,简单问题可是没有资料查找,来问兄弟们了,快来啊 怎样向一个动态连接库里面传送一个数据集??? 如何通过ADOCommand的Parameter输入Datetime字段 急:有谁知道哪儿能下载得到autocad2000的?? class TKYDateEdit not found 本人出售大型软件源程序代码. 老调重谈用Twebbrowser做浏览器 请问一个fastreport中的设置问题??? 小女子有问题请教各位大侠
TWinControl
___________|______________
| |
TCustomEdit(3D属性) TCommonCalendar(没有3D属性)
| |
Edit TCommonCalendar
提供两种解决办法:
1:这种办法比较简单,容易实现。
就是在界面上放一个Edit或者ComboBox将它的Ctl3D改为false。然后放一个MonthCalendar,设置Visible为false,当ComboBox 相应OnClick事件时MonthCaloendar的Visible := True; ComboBox.Text = DateToStr(MonthCalendar1.Date);
等等....你自己琢磨吧。
2:写一个控件自己直接从TWinControl继承下来,写它的3D属性。这个比较复杂,相对比较难。可以先参考有关资料。
1. 找到 TDateTimePicker 的源代码,增加wm_paint的消息处理函数。 procedure wmpaint(var message: tmessage); message wm_paint;procedure TDateTimePicker.wmpaint(var message: tmessage);
var
dc: hdc;
Rec: TRect;
BtnFaceBrush, WindowBrush: HBRUSH;
begin
inherited;
BtnFaceBrush := CreateSolidBrush(ColorToRGB(clwhite));
WindowBrush := CreateSolidBrush(ColorToRGB(clBlack));
Rec.TopLeft := ClientToScreen(ClientRect.TopLeft);
Rec.BottomRight := ClientToScreen(ClientRect.BottomRight);
dc := getdc(0);
InflateRect(Rec, 1, 1);
FrameRect(dc, Rec, BtnFaceBrush);
InflateRect(Rec, 1, 1);
FrameRect(dc, Rec, WindowBrush);
releasedc(0, dc);
DeleteObject(WindowBrush);
DeleteObject(BtnFaceBrush);
end;重新编译一下可以看看效果。