View Issue Details

IDProjectCategoryView StatusLast Update
0001992JEDI VCL00 JVCL Componentspublic2004-07-22 11:32
ReporterstudiolucAssigned ToAHUser 
PrioritynormalSeveritytrivialReproducibilityalways
Status resolvedResolutionfixed 
Product Version 
Target VersionFixed in Version 
Summary0001992: SetChecked( node: TTreenode, value: boolean )
DescriptionDesigntime:
jvTreeview1.CheckBox property Set true

in FormCreate or FormShow:
begin
     Node := jvTreeview1.Items.Add( nil, 'TEST' );
     jvTreeview1.SetChecked( Node, True );
end

won't change the Checkbox state...

Note:
put a button on the Form with OnClick:
begin
     jvTreeview1.SetChecked( jvTreeview1.Items[0], True );
end

run
click button

WORKS...

Calling the OnClick from the FormCreate or Show:
NOT WORKS...

mmm... a tricky one?
TagsNo tags attached.

Activities

AHUser

2004-07-22 08:23

developer   ~0004793

The problem is that Checked is not stored by VCL's TTreeNode.WriteData and reloaded by ReadData. So after a Recreation of the TreeView's handle the checked property is set to the default (=false).
It looks like that we need a hack to solve this because ReadData and WriteData are not virtual/dynamic.

studioluc

2004-07-22 08:28

reporter   ~0004794

I don't think this is the problem,
i fixed the issue by starting a new thread ( a timer ) in the formcreate,
and from out there, it works.

so:

FormCreate()...
   ...create Treeview entries...
   Timer1.Enabled := true;

TimerEvent():
   jvTreeview1.SetChecked( jvTreeview1.Items[0], True )

will check the setbox.

I noticed the SetChecked uses an imported Header from
Comobjects.

Perhaps somewhere a bug with early/late binding or some
stuff in the Comobject?
(Asynchrone stuff)

AHUser

2004-07-22 08:55

developer   ~0004795

You can do a SetChecked followed by a GetChecked and the value is correct /(JvTreeNode does not return FChecked but instead it calls the API function).
But after some time (it is not the ReadData/WriteData what I had assumed) the node is reset.

anonymous

2004-07-22 09:01

viewer   ~0004796

It is a very interesting matter ;-)
I found some more:
I putted 3 treeviews on 3 tabsheets on a frame on a form (hehe)
I can let it function, IF:

0000001: I set the frame's parent to the form (or a control on it)
#2: I set the PageControl1.ActivePageIndex to the page
    on which the treeview is lying when i want to "check" the boxes on the
    items
#3: The form is already visible.

so, it is obviously a problem with the handles from the from, frame, etc...

I noticed the same effect you noticed. They get resetted...

AHUser

2004-07-22 09:31

developer   ~0004797

Last edited: 2004-07-22 09:37

I tracked it down to the first WM_PAINT message. The treenode remains checked until the DefWindowProc's WM_PAINT generates a WM_NOTIFY for NM_CUSTOMDRAW.

My bugfix for it is to set the checked property to the FChecked field the first time when NM_CUSTOMDRAW is triggered. This seems to work in both test cases.

bearbeitet am: 07-22-04 09:37

AHUser

2004-07-22 09:38

developer   ~0004798

Fixed in CVS

AHUser

2004-07-22 09:48

developer   ~0004799

Fix does not work for XP Themes

AHUser

2004-07-22 11:32

developer   ~0004801

Fixed in CVS.

Issue History

Date Modified Username Field Change
2004-07-22 06:46 studioluc New Issue
2004-07-22 08:23 AHUser Note Added: 0004793
2004-07-22 08:28 studioluc Note Added: 0004794
2004-07-22 08:55 AHUser Note Added: 0004795
2004-07-22 09:01 anonymous Note Added: 0004796
2004-07-22 09:31 AHUser Note Added: 0004797
2004-07-22 09:37 AHUser Note Edited: 0004797
2004-07-22 09:38 AHUser Status new => resolved
2004-07-22 09:38 AHUser Resolution open => fixed
2004-07-22 09:38 AHUser Assigned To => AHUser
2004-07-22 09:38 AHUser Note Added: 0004798
2004-07-22 09:48 AHUser Status resolved => feedback
2004-07-22 09:48 AHUser Resolution fixed => reopened
2004-07-22 09:48 AHUser Note Added: 0004799
2004-07-22 11:32 AHUser Status feedback => resolved
2004-07-22 11:32 AHUser Resolution reopened => fixed
2004-07-22 11:32 AHUser Note Added: 0004801