Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda con Treeview (https://www.clubdelphi.com/foros/showthread.php?t=67977)

Chewitta 17-05-2010 21:29:36

Ayuda con Treeview
 
Hola

estoy manejando un Treeview y estoy lo que necesito es check si chekeo el padre se debe de poner lo mismo tanto en los hijos como los nietos , estoy actualmente usando este codigo, pero solo lo hace con los hijos como lo acomodod para que queden tambien los nietos
Código Delphi [-]
procedure TFrmSeguridad.TreeView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var node_sel,f:TTreeNode;
    p:tpoint;
    b:boolean;
begin
 getcursorpos(p);
 if (TreeView1.GetNodeAt(X, Y) <> nil) then
  begin
   node_sel:=TreeView1.GetNodeAt(x,y);
   b:=TreeView1.GetChecked(node_sel);
   f:=node_sel.getFirstChild;
     while (f<>nil) do
      begin
       TreeView1.SetChecked(f,b);
       f:=f.GetNextChild(f);
      end;
    end;
end;
de antemano gracias... por su ayuda

delphi.com.ar 17-05-2010 21:37:25

¿Existen los métodos GetChecked y SetChequed en el TTreeView?....
¿No puedes utilizar la propiedad Selected para evitar buscar el Item por posición?...

Lo que haría sería lo siguiente: crearía un método recursivo tipo SetChecked(ANode: TTreeNode; AValue: Boolean; ALevel: Integer; AMaxLever: Integer) donde cada vez que se llame se incremente el valor ALevel y solo se vuelva a llamar si el valor ALevel es menor que AMaxLevel!

Saludos!

maeyanes 17-05-2010 21:43:21

Hola...

Tienes que hacer que el método sea recursivo. Algo como:

Código Delphi [-]
procedure TFrmSeguridad.TreeView1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Node := TreeView1.GetNodeAt(X, Y);
  if Assigned(Node) then
    CheckNodes(Node)
end;

procedure TFrmSecuridad.CheckNodes(Node: TTreeNode);
var 
  F: TTreeNode;
  p: TPoint;
  b: Boolean;

begin
  b := TreeView1.GetChecked(Node);
  for I := 0 to Pred(Node.Count) do
  begin
    TreeView1.SetChecked(Node[i], b);
    if Node[i].HasChildren then
      CheckNodes(Node[i])
  end
end;

Este código lo hice de memoria y no lo he probado, pero te puede dar una idea de cómo lo debes hacer.


Saludos...

Chewitta 18-05-2010 00:24:20

Ayuda TreeView
 
Muchas gracias Maeyanes... ya lo probe como lo pusiste y va bien... quedo de lujo.

delphi.com.ar 18-05-2010 00:45:34

Si lo de maeyanes es correcto, entonces te interpreté mal. Las instrucciones que te dí eran para que no supere mas de dos niveles en la jerarquía... (Hijos y nietos, pero no biznietos y tataranietos).

Saludos!


La franja horaria es GMT +2. Ahora son las 07:44:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi