TCustomTreeView =
class
(TTreeView)
private
FCheckBox:
Boolean
;
FAutoCheck:
Boolean
;
procedure
SetCheckBox(
const
Value:
Boolean
);
public
function
GetChecked(Node: TTreeNode):
Boolean
;
procedure
SetChecked(Node: TTreeNode; Checked:
Boolean
);
published
property
CheckBox:
Boolean
read FCheckBox
write
SetCheckBox default
False
;
property
AutoCheck:
Boolean
read FAutoCheck
write
FAutoCheck default
False
;
end
;
Методы:
const
TVIS_CHECKED =
$2000
;
function
TCustomTreeView
.
GetChecked(Node: TTreeNode):
Boolean
;
var
Item :TTVItem;
begin
Item
.
Mask := TVIF_STATE;
Item
.
hItem := Node
.
ItemId;
TreeView_GetItem(Node
.
TreeView
.
Handle, Item);
Result := (Item
.
State
and
TVIS_CHECKED) = TVIS_CHECKED;
end
;
procedure
TCustomTreeView
.
SetCheckBox(
const
Value:
Boolean
);
var
FStyle:
Integer
;
begin
FCheckBox := Value;
FStyle := GetWindowLong(Handle, GWL_STYLE);
if
FCheckBox
then
FStyle := FStyle
or
TVS_CHECKBOXES
else
if
(FStyle
and
TVS_CHECKBOXES) = TVS_CHECKBOXES
then
FStyle := FStyle
and
not
TVS_CHECKBOXES;
SetWindowLong(Handle, GWL_STYLE, FStyle);
Repaint;
end
;
procedure
TCustomTreeView
.
SetChecked(Node: TTreeNode; Checked:
Boolean
);
var
Item :TTVItem;
begin
FillChar(Item, SizeOf(TTVItem),
0
);
with
Item
do
begin
hItem := Node
.
ItemId;
Mask := TVIF_STATE;
StateMask := TVIS_STATEIMAGEMASK;
if
Checked
then
Item
.
State :=TVIS_CHECKED
else
Item
.
State :=TVIS_CHECKED
shr
1
;
TreeView_SetItem(Node
.
TreeView
.
Handle, Item);
end
;
end
;