我出300大洋悬赏关于日期输入的一个疑难问题。(300分)

  • 主题发起人 主题发起人 reedblue
  • 开始时间 开始时间
R

reedblue

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi中有一个控件TDateTimePicker,当它的属性设置为以下时:
DateFormat = dfLong
DateMode = dmComboBox
Kind = dtkDate
ParseInput = False
在输入过程中我想知道当前的光标焦点在哪个位置,是“年”呢,还是“月”,
还是“日”,还是无位置?这个问题已经困扰我 n 个月了,所以才不惜重金,
天价求解。
 
恐怕不行吧? 这个控件是mscomctrl封装的.
 
正是因为比较难,所以我才吐血大放送,出价300大洋。
 
也许有办法, 正在实验中, 过会告诉你
 
知道当前的光标焦点在哪个位置很难吗?
当DateTimePicker有焦点时年、月、日其中之一是反相显示的。
 
他是要程序实现,不是用眼睛看
 
对,程序取得其位置。不行的话我再加100分,等问题结束时另发一张帖子分配这100分,我实在是急了。
 
等着吧!eyes会有好消息的. :-)
 
试了一下, 不行, 看eyes了:-)
 
学习学习,估计可能不大,除非自己从头实现个DATETIMEPICKER:-)
 
找到位置了, 不过后一步不愿意做了
当前可以得到焦点在字符串中的位置.
呵呵, 是个非常恶劣的方法(不好意思):
思路:
查遍了msdn也没有发现有消息可以得知具体的焦点位置, 所以用了一个
变通的办法--取焦点的颜色. 思路有了, 可实现起来还有一些不满意的地方,
我花了2小时也没有找到定义selected text颜色的地方 :(
只好用默认的(兰色, 是个很奇怪的兰色, rgb(0,0,132)?!).
现在程序容易了(为了加快速度, 我用了scanline):
type
T24Color = record
b, g, r: byte;
end;
P24Color = ^T24Color;

var
i, j: integer;
bmp: TBitmap;
dc: HDC;
p: p24color;
pos: Integer;
begin
bmp := TBitmap.Create;
bmp.pixelformat := pf24bit;
bmp.width := datetimepicker.width;
bmp.height := datetimepicker.height;
dc := getdc(datetimepicker.handle);
bitblt(bmp.canvas.handle, 0, 0, bmp.width, bmp.height,
dc, 0, 0, SRCCOPY);
releasedc(datetimepicker.handle, dc);
bmp.canvas.font := datetimepicker.font;
for i := 0 to bmp.height - 1 do
begin
p := bmp.scanline;
for j := 0 to bmp.width - 1 do
if (p^.r = 0) and (p^.g=0) and (p^.b <> 0) then
begin
pos := j div bmp.canvas.textwidth('9') + 1;
bmp.free;
exit;
end;
end;
end;

pos就是焦点所在的字符位置.
 
漏了一句
for ... do
begin
for .... do
begin
....
p := pointer(integer(p)+3);
end;
end;
 
喂, 后面分析字符串很容易呀, 不需要再写了吧?
 
其实DateTimePicker并不实用。
 
有意思 ,我也想玩一把.........
 
<font color="red">警告</font>
你应该在IE5环境下实验一下你的程序,因为,你这样写, 很有可能会出错,在IE5
下,如果其他设置和你现在一样,但是Kind= dtkTime,会出错,会将日期显示在时
间格子里。
 
eyes还是厉害!

不过,这样作有意义吗?
 
我也怀疑这样做的意义,还不如把DatetimePicker的年月日分开输。
 
已取的任意显示模式下类似edit的text属性!
 
后退
顶部