我已将 a 设置JvTreeView.CheckBoxes
为True
,复选框显示并按预期工作,但在 Windows XP SP3 及更低版本上,OnNodeCheckedChange
不会触发该事件。我用谷歌搜索了一下,在 JVCL 问题跟踪器上发现了这个问题,但我无法将它应用到最新的 JVCL 版本(版本 3.47)。有没有人修复复选框事件?
更新:当我使用空格键更改复选框时会触发该事件,但当我单击复选框时不会触发该事件。
我已将 a 设置JvTreeView.CheckBoxes
为True
,复选框显示并按预期工作,但在 Windows XP SP3 及更低版本上,OnNodeCheckedChange
不会触发该事件。我用谷歌搜索了一下,在 JVCL 问题跟踪器上发现了这个问题,但我无法将它应用到最新的 JVCL 版本(版本 3.47)。有没有人修复复选框事件?
更新:当我使用空格键更改复选框时会触发该事件,但当我单击复选框时不会触发该事件。
从discussion
我们了解到的情况下,我知道您已经使用 RTL 阅读,JvTreeView
并且我补充说您还应该将TVS_RTLREADING
样式包含到控件样式中。所以,这里是如何在后期控制样式(你已经使用过)中做到这一点:
procedure TForm1.FormShow(Sender: TObject);
begin
SetWindowLong(JvTreeView1.Handle, GWL_STYLE, GetWindowLong(
JvTreeView1.Handle, GWL_STYLE) or TVS_RTLREADING);
SetWindowLong(JvTreeView1.Handle, GWL_EXSTYLE, GetWindowLong(
JvTreeView1.Handle, GWL_EXSTYLE) or WS_EX_LAYOUTRTL or WS_EX_RIGHT);
end;
控制通知的问题在于坐标映射(看看this answer
为什么会发生)。作为对JvComCtrls.pas
源的修复,您可以将第ScreenToClient
3094 行的点映射替换为以下内容:
MapWindowPoints(0, Handle, Point, 1);
在方法的JvComCtrls.pas
单元中,CNNotify
它看起来像:
3071 procedure TJvTreeView.CNNotify(var Msg: TWMNotify);
.... ...
3091 inherited;
3092 if Windows.GetCursorPos(Point) then
3093 begin
3094 MapWindowPoints(0, Handle, Point, 1);
3095 case Msg.NMHdr.code of
.... ...