Пока не нашел свойство DisplayRect у TTreeNode, не знал как быть с чекбоксами, а то поставить то я их поставил, а вот работали они не совсем адекватно. То есть при нажатии на текст, скажем – нажимались и чекбоксы, а мне нужно было разделить область чекбокса и текста узла, да ещё и так, чтобы не переделывать компонент))) Немного покопавшись в свойствах TTreeNode, обнаружил свойство DisplayRect.
Теперь при нажатии на чекбокс нажимается только чекбокс, при нажатии на текст, фокусировка текста. Почти как обработка 2 разных компонентов! Но на самом деле это единый TTreeNode.
Начали!
Добавил пару глобальных переменных
1 2 |
MouseOnCheckBox:Boolean; NodeUnderMice:TTreeNode; |
Код на MouseMove
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
procedure TMainForm.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Node:TTreeNode; begin if TreeView1.GetNodeAt(X,Y)<>nil then NodeUnderMice:=TreeView1.GetNodeAt(X,Y); {СОБСТВЕННО ЗДЕСЬ И СТАВИМ ГРАНИЦУ} if X<NodeUnderMice.DisplayRect(true).Left then MouseOnCheckBox:=true else MouseOnCheckBox:=False; ... Остальной код MouseMove... |
Код на TreeViewClick
1 2 3 4 5 6 7 |
procedure TMainForm.TreeView1Click(Sender: TObject); begin if NotAllowed then exit else if Assigned(NodeUnderMice) and (MouseOnCheckBox) then DMDB.CheckBoxSelection(NodeUnderMice,TreeView1); // <<Пошла обработка чекбоксов end; |