| Anonymous | Login | Signup for a new account | 2013-05-23 09:59 CEST |
| Main | My View | View Issues | Change Log | Roadmap | Docs |
| Viewing Issue Simple Details [ Jump to Notes ] | [ View Advanced ] [ Issue History ] [ Print ] | ||||||
| ID | Category | Severity | Reproducibility | Date Submitted | Last Update | ||
| 0005119 | [JEDI VCL] 00 JVCL Components | major | always | 2010-01-22 21:09 | 2011-06-10 16:09 | ||
| Reporter | tetardd | View Status | public | ||||
| Assigned To | AHUser | ||||||
| Priority | normal | Resolution | fixed | ||||
| Status | resolved | Product Version | 3.39 | ||||
| Summary | 0005119: TjvTreeView does not fire OnNodeCheckedChange on Windows XP | ||||||
| Description |
Hi, TJvTreeView does not fire OnNodeCheckedChange on Windows XP SP3 latest update. I think the bug comes from the following (see comments marked ***): procedure TJvTreeView.CNNotify(var Msg: TWMNotify); ... NM_TVSTATEIMAGECHANGING: // ComCtrls 6+ *** Wrong here: it's not ComCtrls 6+, it's ComCtrls 6+ AND Vista. My lastest Windows XP SP3 HAS ComCtrls 6 but this notification is NOT sent so we still need the emulation (see below) *** begin if CheckBoxes and (GetComCtlVersion >= ComCtlVersionIE6) then begin Node := Items.GetNode(PNMTVStateImageChanging(Msg.NMHdr).hti); PostCheckStateChanged(Node); end; end; NM_CLICK, NM_RCLICK: begin Node := GetNodeAt(Point.X, Point.Y); if Assigned(Node) and not MultiSelect then Selected := Node; if (Node <> nil) and (Msg.NMHdr.code = NM_RCLICK) then if Assigned(TJvTreeNode(Node).PopupMenu) then // Popup menu may not be assigned TJvTreeNode(Node).PopupMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); *** Original code: here, XP SP3 should have this emulation performed but as the GetComCtlVersion < ComCtlVersionIE6 returns False in my XP SP3 with latest updates, the PostCheckStateChanged is not called *** if Checkboxes and (GetComCtlVersion < ComCtlVersionIE6) and (Node <> nil) and // emulate missing notify message (htOnStateIcon in GetHitTestInfoAt(Point.X, Point.Y)) then PostCheckStateChanged(Node); *** Modifications proposed by David Tetard *** if Checkboxes and ((GetComCtlVersion < ComCtlVersionIE6) Or CheckWin32Version(5)) and (Node <> nil) and // emulate missing notify message (htOnStateIcon in GetHitTestInfoAt(Point.X, Point.Y)) then PostCheckStateChanged(Node); end; |
||||||
| Additional Information | Note that this proposed fix is only for the click on the check boxes, there are other places that call PostCheckStateChanged that may need fixing too. | ||||||
| Tags | No tags attached. | ||||||
| Attached Files |
|
||||||
|
|
|||||||
| Mantis 1.1.6[^] Copyright © 2000 - 2008 Mantis Group |