我在Tstringgrid 嵌入了一个TCOMBOBOX ,我在Tstringgrid的ONKEYDOWN 的事件
写了如下焦点移动的代码:
postmessage((sender as Tstringgrid).handle,Wm_keydown,vk_tab,0);
问题就是,当我在TCOMBOBOX选择某个条目的时候,上面那条语句就不起作用了。必须再
点击第二次才能下移到另一个网格. 如果是这样会给用户带来不便就是自己用也觉得不爽各位大侠怎么解决??
写了如下焦点移动的代码:
postmessage((sender as Tstringgrid).handle,Wm_keydown,vk_tab,0);
问题就是,当我在TCOMBOBOX选择某个条目的时候,上面那条语句就不起作用了。必须再
点击第二次才能下移到另一个网格. 如果是这样会给用户带来不便就是自己用也觉得不爽各位大侠怎么解决??
可以这样吗??
TO:(数字蛋糕)wndproc 这个窗口过程是怎么处理,给详细点好吗??
我在TCOMBOBOX 的Onkeydown 的处理是这样的:
postmessage(combobox1.handle,Wm_killfocus,0,0);
postmessage(stringgrid1.handle,Wm_setfocus,0,0);
postmessage(stringgrid1.handle,Wm_keydown,vk_tab,0);
其结果是下移了但输入焦点还在Tcombobox,也就是说下移到下一网格,但你输入时还在Tcombobox 里面,要用 鼠标点过才能转移输入焦点.
输入焦点不下移的情况(也就是按回车键);
我在TCOMBOBOX 的Onkeydown 的处理是这样的:
postmessage(combobox1.handle,Wm_killfocus,0,0);
postmessage(stringgrid1.handle,Wm_setfocus,0,0);
postmessage(stringgrid1.handle,Wm_keydown,vk_tab,0);
其结果是下移了但输入焦点还在Tcombobox,也就是说下移到下一网格,但你输入时还在Tcombobox 里面,要用 鼠标点过才能转移输入焦点.
你这一行代码,就是向StringGrid1 发送一个键盘消息,键值是vk_tab
那么这一句的作用相当于在StringGrid1由焦点的时候,你敲了tab键,那么默认的操作就是将焦点移给可以接受焦点的下一个控件,所以你的StringGrid1肯定不能获得焦点啊
去掉这句试试
我是模拟了TAB 键,既然Tcombobox 是一个可以接受焦点的控件,Tstringgrid 也是一个可以接受
焦点的控件,那么当我在Tstringgrid 里面重画的时候,并对Tcombobox选择条目的时,候应该说焦点已经转移到Tcombobox,所以我在进行一次模拟TAB键可以的吧! 按你的分析就是Tstringgrid不是下一控件,所以不能获得焦点,这个有道理.
因为你的问题是在ComboBox正在下拉的时候,此时拥有焦点的并不是ComboBox,而是它的下拉的窗口,所以你Post到ComboBox的消息没有得到处理。因为我上次接触到这个问题也有段时间了,所以一时没有办法给你一个确定的答案,望包涵。此外,个人人为有别的方法来解决这个问题。你也可以在Grid的选择事件中移动ComboBox呀。
ARow: Integer; var CanSelect: Boolean);
var
rc: TRect;
begin
rc := StringGrid1.CellRect(ACol, ARow);
rc.Left := rc.Left + StringGrid1.Left + 2;
rc.Right := rc.Right + StringGrid1.Left;
rc.Top := rc.Top + StringGrid1.Top + 2;
rc.Bottom := rc.Bottom + StringGrid1.Top;
ComboBox1.BoundsRect := rc;
ComboBox1.SetFocus;
end;procedure TMainForm.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
begin
PostMessage(StringGrid1.Handle, WM_KEYDOWN, VK_TAB, 0);
PostMessage(StringGrid1.Handle, WM_KEYUP, VK_TAB, 0);
Key := 0;
end;
end;
那我说清楚一点吧!比如说: 我在Tstringgrid 嵌入了一个TCOMBOBOX,TCOMBOBOX是在Tstringgrid 的第五列嵌入, 当我在第五列重画Tcombobox 时,进行选择条目的时候,就会发生
输入焦点不下移的情况(也就是按回车键);
我在TCOMBOBOX 的Onkeydown 的处理是这样的:
postmessage(combobox1.handle,Wm_killfocus,0,0);
postmessage(stringgrid1.handle,Wm_setfocus,0,0);
postmessage(stringgrid1.handle,Wm_keydown,vk_tab,0);
其结果是下移了但输入焦点还在Tcombobox,也就是说下移到下一网格,但你输入时还在Tcombobox 里面,要用 鼠标点过才能转移输入焦点.
不好意思,才看到,不用谢
哎,我太笨了,不是很懂。
你能不能简单的弄个例子程序
发到我邮箱里
[email protected]
我看看