1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
| // -----------------------------------------------------------------------------
// -
// -----------------------------------------------------------------------------
var
MouseNode: TTreeNode = nil;
CompteurFrere: Integer = 0;
CompteurEnfant: Integer = 0;
procedure TFrmTestDivers.PopupMenuTreePopup(Sender: TObject);
var
CursorPos: TPoint;
begin
GetCursorPos(CursorPos); // Mouse.CursorPos n'existe pas !
CursorPos := TreeView.ScreenToClient(CursorPos);
MouseNode:= TreeView.GetNodeAt(CursorPos.X , CursorPos.Y);
TreeView.Selected := MouseNode;
end;
procedure TFrmTestDivers.MINouveauClick(Sender: TObject);
begin
Inc(CompteurFrere);
if Assigned(MouseNode) then begin
TreeView.Items.Add(MouseNode, 'Frère N°'+IntToStr(CompteurFrere) + ' de ' + MouseNode.Text );
end else begin
TreeView.Items.Add(MouseNode, 'Frère N°'+IntToStr(CompteurFrere));
end;
end;
procedure TFrmTestDivers.MIAjouterClick(Sender: TObject);
begin
if Assigned(MouseNode) then begin
Inc(CompteurEnfant);
TreeView.Items.AddChild(MouseNode, 'Enfant N° '+IntToStr(CompteurEnfant) + ' de ' + MouseNode.Text );
end;
end;
procedure TFrmTestDivers.MISupprimerClick(Sender: TObject);
begin
if Assigned(MouseNode) then begin
TreeView.Items.Delete(MouseNode);
end;
end;
procedure InsertTreeViewLevel(TreeNodes: TTreeNodes; Parent: TTreeNode; S: string);
var
Nodes: TStringList;
InsertNode: TTreeNode;
I: Integer;
begin
Nodes := TStringList.Create();
try
for I := Parent.Count - 1 downto 0 do
begin
Nodes.AddObject(Parent.Item[I].Text, Parent.Item[I].Data);
Parent.Item[I].Delete();
end;
InsertNode := TreeNodes.AddChild(Parent, S);
for I := Nodes.Count - 1 downto 0 do
begin
TreeNodes.AddChildObject(InsertNode, Nodes[I], Nodes.Objects[I]);
end;
finally
Nodes.Free();
end;
end;
procedure TFrmTestDivers.MIInsererNiveauClick(Sender: TObject);
begin
if Assigned(MouseNode) then
InsertTreeViewLevel(TreeView.Items, MouseNode, 'Level');
end;
procedure TFrmTestDivers.MIRenameClick(Sender: TObject);
procedure RenameChildNode(ParentNode: TTreeNode);
var
iNode: Integer;
begin
for iNode := 0 to ParentNode.Count - 1 do
begin
ParentNode.Item[iNode].Text := Format('%s - Child Node %d', [ParentNode.Item[iNode].Text, iNode]);
RenameChildNode(ParentNode.Item[iNode]);
end;
end;
begin
if Assigned(MouseNode) then begin
RenameChildNode(MouseNode);
end;
end;
procedure TFrmTestDivers.TreeViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
DestNode: TTreeNode;
DragNode: TTreeNode;
begin
DestNode := TreeView.GetNodeAt(X , Y);
if Assigned(DestNode) then begin
if (Source is TTreeView) and (TTreeView(Source).Name = TreeView.Name) then begin
DragNode := TreeView.Selected;
if GetAsyncKeyState(VK_SHIFT) <> 0 then begin
if DragNode.Parent = nil then begin
TreeView.Items.Add(nil, DestNode.Text + ' Inversé');
end else begin
TreeView.Items.AddChild(DragNode.Parent, DestNode.Text + ' Inversé');
end;
if DestNode.Parent = nil then begin
TreeView.Items.Add(nil, DragNode.Text + ' Inversé');
end else begin
TreeView.Items.AddChild(DestNode.Parent, DragNode.Text + ' Inversé');
end;
TreeView.Items.Delete(DragNode);
TreeView.Items.Delete(DestNode);
end else begin
if GetAsyncKeyState(VK_CONTROL) <> 0 then begin
TreeView.Items.AddChild(DestNode, DragNode.Text + ' Recopié');
end else begin
TreeView.Items.AddChild(DestNode, DragNode.Text + ' Déplacé');
TreeView.Items.Delete(DragNode);
end;
end;
end;
end;
end;
procedure TFrmTestDivers.TreeViewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
var
DestNode: TTreeNode;
DragNode: TTreeNode;
begin
DestNode := TreeView.GetNodeAt(X , Y);
DragNode := TreeView.Selected;
Accept := not DragNode.HasAsParent(DestNode);
StatusBar1.SimpleText := 'Drag And Drop avec Déplacement';
if GetAsyncKeyState(VK_CONTROL) <> 0 then begin
StatusBar1.SimpleText := 'Drag And Drop avec Recopie';
end;
if GetAsyncKeyState(VK_SHIFT) <> 0 then begin
StatusBar1.SimpleText := 'Drag And Drop avec Inversion';
end;
end; |
Partager