Уведомление о флажках JvTreeView и JvCheckTreeView
Я установил JvTreeView.CheckBoxes
в True
и флажки отображаются и работают как положено, но в Windows XP SP3 и ниже OnNodeCheckedChange
Событие не сработало. Я немного погуглил и обнаружил эту проблему на трекере проблем JVCL, но не могу применить ее к последней версии JVCL (версия 3.47). У кого-нибудь есть какое-либо исправление для события флажка?
Обновление: событие вызывается, когда я меняю флажок с помощью пробела, но не срабатывает, когда я нажимаю на флажок.
1 ответ
Из 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
.... ...