Возьми обычный ShellTreeView и поехали:
| Код | procedure TForm1.FormShow(Sender: TObject); begin SetWindowLong(ShellTreeView1.Handle, GWL_STYLE, GetWindowLong(ShellTreeView1.Handle, GWL_STYLE) or TVS_CHECKBOXES); //применяем стиль end;
|
Так проверяем состояние:
| Код | function IsCheckedNode(Node: TTreeNode): boolean; //Проверяем var TVItem: TTVItem; begin Result := false; if not Assigned(Node) then Exit; with TVItem do begin mask := TVIF_STATE or TVIF_HANDLE; hItem := Node.ItemId; stateMask := TVIS_STATEIMAGEMASK; TreeView_GetItem(Node.Handle, TVItem); if state = 8192 then result := true else result := false; end; end;
|
Соответственно так устанавливаем состояние:
| Код | procedure CheckNode(Node: TTreeNode; Value: boolean); //Устанавливаем var TVItem: TTVItem; begin if not Assigned(Node) then Exit; with TVItem do begin mask := TVIF_STATE or TVIF_HANDLE; hItem := Node.ItemId; stateMask := TVIS_STATEIMAGEMASK; if value then state := INDEXTOSTATEIMAGEMASK(2) else state := INDEXTOSTATEIMAGEMASK(1); end; TreeView_SetItem(Node.Handle, TVItem); end;
|
Вот так все это вызывается:
| Код | procedure TForm1.Button1Click(Sender: TObject); begin CheckNode(ShellTreeView1.Items[1], True); //Ставим галку на первый итем end;
procedure TForm1.Button2Click(Sender: TObject); var b: Boolean; begin b:=IsCheckedNode(ShellTreeView1.Items.Item[1]); If b = False then MessageBox(0, Pchar('False'), 'Uncheck', mb_ok) //смотрим что там в первом итеме else MessageBox(0, Pchar('True'), 'Check', mb_ok); end;
|
|