找到位置了, 不过后一步不愿意做了
当前可以得到焦点在字符串中的位置.
呵呵, 是个非常恶劣的方法(不好意思):
思路:
查遍了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就是焦点所在的字符位置.