Уведомление о флажках 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
....  ...
Другие вопросы по тегам