![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CheckBox и TreeView [D5, Win95/98]
Alex Y © (2002-07-01 08:41:00)Подскажите пожалуйста, как в TreeView сделать множественный выбор, т.е. чтобы я мог бы галочками выбирать несколько узлов (Так как это реализоано в AVP и пр.).
Заранее благодарен.
Alex Y (2002-07-01 10:56:00) [1]Сделал, Спасибо!
MBo (2002-07-01 10:49:00) [2]>Alex Y
Пробуй, экспериментируй
Alex Y (2002-07-01 10:43:00) [3]А если делать через StateImages+StateIndex, то на какое событие вешаться?
OnChange при щелчке на одном и том же узле не вызывается, а OnClick некрасиво работает - узел меняет состояние при щелчке на белой области TReeView.
MBo (2002-07-01 10:42:00) [4]думаю, по MouseUp проверять наличие детей и состояние (изменение) и тогда обходить
Alex Y (2002-07-01 10:39:00) [5]Нет, я имею ввиду, когда я мышкой выделяю один узел, то по какому событию мне помечать дочерние узлы?
MBo (2002-07-01 10:31:00) [6]обходи их, делая
Procedure TVSetCheck(TV:TTreeView;n:integer);
var
item:tTVItem;
j:integer;
begin
item.hItem:=TV.Items[n].ItemId;
item.mask:= TVIF_STATE;
TV.Perform(TVM_GETITEM,0,integer(@item));
item.state:=(item.state or $2000) and DWORD(not $1000);
item.statemask:=$FFFFFFFF;
TV.Perform(TVM_SETITEM,0,integer(@item));
end;
Alex Y (2002-07-01 10:16:00) [7]А еще вопрос.
Как сделать, чтобы при этом помечались все дочерние узлы?
MBo (2002-07-01 10:13:00) [8]>Alex Y
можно работать и со StateImages+StateIndex
Alex Y (2002-07-01 10:09:00) [9]MBo
Спасибо! То что нужно.
MBo (2002-07-01 09:47:00) [10]uses commctrl
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(TreeView1.Handle, GWL_STYLE,
GetWindowLong(TreeView1.Handle, GWL_STYLE) or TVS_CHECKBOXES);
end;
function TVGetCheck(TV:TTreeView;n:integer):integer;
var
item:tTVItem;
begin
item.hItem:=TV.Items[n].ItemId;
item.mask:= TVIF_STATE;
TV.Perform(TVM_GETITEM,0,integer(@item));
Result:=(item.state and $2000) shr 13;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i:=0 to treeview1.Items.Count-1 do
memo1.lines.add(treeview1.Items[i].text+" "+
inttostr(TVGetCheck(TreeView1,i)));
end;
XShura (2002-07-01 09:13:00) [11]Используй свойство IndexState