delphi TreeView-создание узлов во время выполнения
может кто-нибудь сказать мне, как сделать следующее:
- Создать Узлы
- Включить / Отключить Отдельные Узлы
Я хочу знать, как это сделать во время выполнения приложения, например, в событии OnCreate формы.
3 ответов
добавление узлов:
function FindRootNode(ACaption: String; ATreeView: TTreeView): TTreeNode;
var LCount: Integer;
begin
result := nil;
LCount := 0;
while (LCount < ATreeView.Items.Count) and (result = nil) do
begin
if (ATreeView.Items.Item[LCount].Text = ACaption) and (ATreeView.Items.Item[LCount].Parent = nil) then
result := ATreeView.Items.Item[LCount];
inc(LCount);
end;
end;
...
var LDestNode: TTreeNode;
begin
LDestNode := FindRootNode('category', TreeView1);
if LDestNode <> nil then
begin
TreeView1.Items.AddChild(LDestNode, 'node1');
TreeView1.Items.AddChild(LDestNode, 'node2');
end;
end;
(см. также http://msdn.microsoft.com/en-us/library/70w4awc4.aspx)
Disabeling узле
насколько я знаю, нет способа отключить TreeNode. Единственное, что вы можете сделать, это перехватить событие beforeSelect и отменить выбор там. Не очень хорошо.
@Remus, здесь у вас есть простой пример добавления узлов.
добавление корневого узла (уровень 0)
Var
Node : TTreeNode;
begin
//function TTreeNodes.Add(Sibling: TTreeNode; const S: string): TTreeNode;
Node:=TreeView1.Items.Add(nil,'My Root Node') ;
Node.ImageIndex:=0;//now you can change any property of the node
end;
добавление дочернего узла (уровень > 0)
//in this case we add a child node in the current selected node.
Var
Node : TTreeNode;
begin
if TreeView1.Selected= nil then exit;
Node:=TreeView1.Items.AddChild(TreeView1.Selected,'My Child Node') ;
Node.ImageIndex:=0;//now you can change any property of the node
end;
добавление множества узлов
Если вы хотите добавить много узлов, используя loop или что - то еще, что вы должны использовать BeginUpdate перед внесением изменений к TreeView. Когда все изменения завершите, вызовите EndUpdate для показа изменения на экране. BeginUpdate и EndUpdate предотвратить чрезмерные перерисовки и ускорить время обработки, когда узлы добавляются, удаляются или вставляются.
Var
Node : TTreeNode;
i : Integer;
begin
TreeView1.Items.BeginUpdate;
try
for i:=1 to 100 do
begin
Node:=TreeView1.Items.Add(nil,'My Root Node '+IntToStr(i)) ;
Node.ImageIndex:=0;
end;
finally
TreeView1.Items.EndUpdate;
end;
end;
об отключении узла, не существует никакого свойства, как это.
вы можете отключить выделение в обработчике событий OnChanging. Это событие TTreeView.
procedure TForm.OnChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
begin
AllowChange := CheckSomePropertiesOfNode(Node);
end;