uses Windows, Messages, SysUtils, Classes, Controls,Commctrl,ComCtrls; const TVIS_CHECKED = $2000; type TCheckTreeview = class(TTreeView) private { Private declarations } protected { Protected declarations } procedure CreateParams(var Params: TCreateParams); override; public { Public declarations } function IsChecked(Node :TTreeNode) :Boolean; procedure SetChecked(Node :TTreeNode; Checked :Boolean); published { Published declarations } end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('Standard', [TCheckTreeview]); end;
{ TCheckTreeview }
procedure TCheckTreeview.CreateParams(var Params: TCreateParams); begin inherited; Params.Style:=Params.Style or TVS_CHECKBOXES; end;
function TCheckTreeview.IsChecked(Node: TTreeNode): Boolean; var TvItem :TTVItem; begin TvItem.Mask := TVIF_STATE; TvItem.hItem := Node.ItemId; TreeView_GetItem(Node.TreeView.Handle, TvItem); Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED; end;
procedure TCheckTreeview.SetChecked(Node: TTreeNode; Checked: Boolean); var TvItem :TTVItem; begin FillChar(TvItem, SizeOf(TvItem), 0); with TvItem do begin hItem := Node.ItemId; Mask := TVIF_STATE; StateMask := TVIS_STATEIMAGEMASK; if Checked then TvItem.State :=TVIS_CHECKED else TvItem.State :=TVIS_CHECKED shr 1; TreeView_SetItem(Node.TreeView.Handle, TvItem); end; end; end.