Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
recuperando rutas de directorios

Hola buenas noches.

Tengo un problemilla con un TTreeView donde se cargan los directorios de una determinada unidad según la seleccione en un comboBox, hasta ahí todo bien, el problema viene cuando en un TEdit, quiero que se escriba la ruta de ese directorio o digamos, el padre, hijo y nieto del TTreeview. Es decir imaginemos esto...
Cita:
DIRECTORIO 1, DIRECTORIO 2, DIRECTORIO 3, DIRECTORIO 4

Donde cada item, forma parte del anterior, lo que necesito es que quede de esta manera en el TEdit: C:\DIRECTORIO1\DIRECTORIO2\DIRECTORIO3\DIRECTORIO4
Puedo acceder a cada nivel, pero en el TEdit sólo me muestra lo que sería el padre o el hijo o el nieto, pero nunca los tres al mismo tiempo y esto en el evento OnClick del TTreeView.
He mirado en el foro, pero no he encontrado ningún caso parecido al mio.

¿Alguna sugerencia?

Muchas gracias y un saludo a todos/as.
Responder Con Cita
  #2  
Antiguo 01-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola danielmj.

Código Delphi [-]
function GetBranchNodes(TV: TTreeView; ndSelect: TTreeNode): string;
var
  nd: TTreeNode;
begin
  nd := ndSelect;
  while nd.Level <> 0 do nd := nd.GetPrev;
  while nd.HasChildren do
  begin
    Result := Result + nd.Text + '\';
    nd := nd.GetNext;
  end;
  Result := Result + nd.Text
end;


procedure TForm1.TreeView1Click(Sender: TObject);
var
  nd: TTreeNode;
  P : TPoint;
begin
  with TTreeView(Sender) do
  begin
    P  := TreeView1.ScreenToclient(Mouse.CursorPos);
    nd := TreeView1.GetNodeAt(P.X, P.Y);
    if nd <> nil then
    begin
      Edit1.Text := '';
      Edit1.Text := GetBranchNodes(TreeView1, nd);
    end
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-06-2013 a las 02:23:01.
Responder Con Cita
  #3  
Antiguo 01-06-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Buenos dias ecfisa,

Lo primero de todo, agradecerte una respuesta tan rapida, en cuanto la he visto, me he puesto con ello, pero el problema persiste, me explico:
Si hago clic en lo que vendría a ser el elemento padre, en el TEdit me muestra lo que sería toda la ruta hasta el primero de los sub elementos, pero mejor una imagen y así es mas fácil de ver.



En el ejemplo de la imagen, había seleccionado el nodo principal NVidia, pero en el TEdit me muestra toda la ruta hasta el sub elemento Display.Driver, cuando debería de mostrar en cada clic de raton pues los directorios sobre el que haga ese clic, concatenando sucesivamente los niveles en su caso. Es decir:
Cita:
Caso 1. Si pulso sobre NVidia
En el TEdit aparecería esto: NVidia

Caso2. Si pulso sobre 314.22
En el TEdit aparecería esto: NVidia\DisplayDriver\314.22
...
Caso 6. Si pulso sobre HDAudio
En el TEdit aparecería esto: NVidia\DisplayDriver\314.22\Win8_WinVista_Win7_64\International\HDAudio
En el TEdit, no se aprecia pero habiendo hecho clic sobre NVidia, me mostró toda la ruta hasta el sub elemento Display.Driver de igual modo, si pulso sobre NV3DVision, no mostraría este directorio, sino que el último en mostrar en el TEdit, seguiría siendo Display.Driver.

Otra cosa que me pasa es que cuando en el TTreeview se van a cargar todos los directorios de una unidad, la aplicación se cuelga por unos segundos hasta que han sido cargados en el TTreeview y la barra de progreso que puse a proposito para que se vaya rellenando a medida que va cargando la estructura de directorios, no muestra progreso al colgarse la aplicación, solo se rellena de una vez cuando la carga de las carpetas ha terminado y la verdad, se ve feo. He pensado en refrescar el TTreeview, ahora me pondre con eso a ver si funciona, sino ¿de que otro modo podría hacerlo que resultase en una carga de directorios mas "suave"? ¿Existe alguna función o comando que evite el cuelge por uso excesivo de la memoria?

Espero haberme explicado correctamente. Saludos y una vez más, mil gracias.
Responder Con Cita
  #4  
Antiguo 01-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por danielmj Ver Mensaje
...
Si hago clic en lo que vendría a ser el elemento padre, en el TEdit me muestra lo que sería toda la ruta hasta el primero de los sub elementos
Si era la idea... por que eso era precisamente lo que había interpretado que deseabas:
Cita:
Cita:
DIRECTORIO 1, DIRECTORIO 2, DIRECTORIO 3, DIRECTORIO 4

Donde cada item, forma parte del anterior, lo que necesito es que quede de esta manera en el TEdit: C:\DIRECTORIO1\DIRECTORIO2\DIRECTORIO3\DIRECTORIO4
Puedo acceder a cada nivel, pero en el TEdit sólo me muestra lo que sería el padre o el hijo o el nieto, pero nunca los tres al mismo tiempo y esto en el evento OnClick del TTreeView.

No tengo Delphi en este momento como para probarlo pero supongo que debería bastar con este cambio:
Código Delphi [-]
function GetBranchNodes(TV: TTreeView; ndSelect: TTreeNode): string;
var
  nd: TTreeNode;
begin
  nd := ndSelect;
  while nd.Level <> 0 do nd := nd.GetPrev;
  while nd <> ndSelect do  // <==
  begin
    Result := Result + nd.Text + '\';
    nd := nd.GetNext;
  end;
  Result := Result + nd.Text
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 04-06-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola ecfisa, tu como siempre dando soluciones

lo primero de todo, disculparme por no haberte dado las gracias antes, pero no tengo tiempo para nada, (hoy entre a currar a las 6:30 de la mañana y he salido hace un rato asi que...). Tu código funcionó perfectamente, ahora estoy con otros problemillas como mover archivos de una carpeta a otra, pero como tienen distinta extension, el movefile, no me soluciona nada, por que movería todos los archivos de la carpeta, en fin, tratare de renombrar el archivo que no quiero mover y asi lo intento y luego vuelvo a renombrarlo para que vuelva a llamarse de igual modo que antes.

Un saludo y gracias.
Responder Con Cita
  #6  
Antiguo 04-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Preguntas distintas en hilos distintos, gracias.
Responder Con Cita
  #7  
Antiguo 05-06-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Sé que cada pregunta va en su sitio casimiro, pero lo que comenté en mi último mensaje no era una pregunta, era un simple comentario que le hice a ecfisa sin pretender nada mas.

Saludos.
Responder Con Cita
  #8  
Antiguo 05-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
.............


.............
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
recuperando muchos registros con StoredProc R0M3R0 Varios 3 15-01-2009 14:39:44
Obtener Rutas de RED RebeccaGL Redes 1 21-01-2008 23:40:00
Recuperando mysql decimal con tipo single Migmam2 SQL 3 27-08-2007 16:53:36
Recuperando imagenes desde Oracle MarioATamborini Oracle 4 14-07-2005 21:52:14
Recuperando imagenes desde Oracle vmladino Gráficos 1 11-11-2004 17:23:35


La franja horaria es GMT +2. Ahora son las 04:48:26.


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