2

を に設定するJvTreeView.CheckBoxesTrue、チェック ボックスが表示され、期待どおりに動作しますが、Windows XP SP3 以前では、OnNodeCheckedChangeイベントが発生しません。少しググったところ、JVCL issue trackerでこの問題を見つけましたが、最新の JVCL リリース (バージョン 3.47) には適用できません。チェックボックスイベントの修正はありますか?


更新:スペースバーを使用してチェックボックスを変更するとイベントが発生しますが、チェックボックスをクリックしても発生しません。

4

1 に答える 1

3

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なぜ起こるのかを見てください)。ソースの修正として、3094 行目JvComCtrls.pasのポイント マッピングを次のように置き換えることができます。ScreenToClient

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
....  ...
于 2012-10-22T19:54:09.487 に答える