Carga de ListBox con archivos de directorio

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Carga de ListBox con archivos de directorio

Mensaje por Chelo2 »

Con el siguiente código cargo en un ListBox de un cuadro de diálogo todos los archivos que se encuentran en una carpeta del disco y con el segundo código, me permite seleccionar de ese ListBox el archivo que deseo y lo abre con el programa de pdf predeterminada en la pc.

Código: Seleccionar todo

'=======================================================================
'VISOR DE ARCHIVOS
'=======================================================================


Dim Lista As Object
Dim mDatos As String
Dim sInfo As String

Sub Abre_Visor
Dim oDialogo as Object
Dim oControl as Object
Dim mDatos () As String

'CARGA EL DIALOGO
	
	DialogLibraries.LoadLibrary("Standard")
	oDialogo=Createunodialog(DialogLibraries.Standard.Dg_Visor)
	Call Lee_Ruta
	
'CARGA EL CONTROL		
	Lista = oDialogo.getcontrol ("ListBox1")
		
'CARGA EL LISTBOX CON LOS DATOS DEL DIRECTORIO			
	sInfo = Dir("D:\AOOSUR\",0)
	Do While sInfo>""
		'MsgBox cArchivo
		sInfo=Dir
		Lista.addItem( sInfo, Lista.ItemCount)	
	Loop
	'MsgBox "No quedan más archivos"
	Lista.addItem( sInfo, Lista.ItemCount)
	
	oDialogo.Execute()

End Sub

'SELEECIONA EL ARCHIVO Y LO ABRE
Sub Selec_Arch
dim Ruta As String 
	
		sSeleccionado = Lista.getSelectedItem()
		Ruta = Camino & "\" & sSeleccionado 
		
	'Abre el documento en el visor predeterminado
		sys = CreateUnoService("com.sun.star.system.SystemShellExecute")
		sys.execute( Ruta, "", 0)
		
End Sub



Hasta ahora funcionó de maravillas, pero a medida que fueron creciendo los archivos pdf dentro de la carpeta, se fue haciendo mucho más lenta la carga.

Mi consulta es la siguiente: ¿hay alguna forma de cargar de manera más ágil el ListBox??

Desde ya muchas gracias a quien pueda ayudarme con este tema.

Un saludo desde Buenos Aires, Argentina.

Chelo2
OpenOffice 4.1.3 en Windows 7
Longi
Mensajes: 804
Registrado: Dom Ene 20, 2013 9:05 pm
Ubicación: Ourense, Galicia, España

Re: Carga de ListBox con archivos de directorio

Mensaje por Longi »

Buenas!

Echa un vistazo a esto:

https://forum.openoffice.org/es/forum/v ... 31&t=13426

Creo que era lo que en un principio buscabas, pero encontraste ese otro camino, que va muy bien, pero consume recursos. Esto es un filepicker que sí que va a una dirección concretada previamente.

Un saludo!
Openoffice 4.1.7, en Windows 10
Libreoffice 6.4.2, en Windows 10
Chelo2
Mensajes: 103
Registrado: Mié Ago 14, 2013 4:25 am
Ubicación: Lomas de Zamora, Buenos Aires, Argentina

Re: Carga de ListBox con archivos de directorio

Mensaje por Chelo2 »

 Editado:  
Muchas gracias Longi por tu respuesta.
Lo he probado y funciona muy bien. Como se trataba de archivos pdf, los abría con Writer y se mostraba raro, pero reemplacé la fila:

Código: Seleccionar todo

'Y lo abrimos
'oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
por:

Código: Seleccionar todo

'Abre el documento en el visor pdf predeterminado
      oDoc = CreateUnoService("com.sun.star.system.SystemShellExecute")
      oDoc.execute( sRuta, "", 0)
Y funcionó perfecto.
Pero en realidad trataba de evitar el filepicker y lo hacía cargando los archivos en el cuadro de lista porque quiero evitar que el usuario pueda manipular o eliminar involuntariamente alguno de los archivos.

Dejo abierto el hilo por si surge alguna otra posibilidad, o alguna manera de limitar el FilePicker para sólo abrirlo y que no se pueda borrar. Sino, utilizaré tu sugerencia que hace lo que necesito y de manera rápida.

Un saludo desde buenos Aires, y nuevamente muchas gracias.
OpenOffice 4.1.3 en Windows 7
Avatar de Usuario
gustavodiaz00
Mensajes: 64
Registrado: Mié Abr 26, 2017 1:29 am
Ubicación: Argentina, San Nicolás de los Arroyos

Re: Carga de ListBox con archivos de directorio

Mensaje por gustavodiaz00 »

Hola

Te dejo un codigo para que lo analices y veas si te sirve

Código: Seleccionar todo


   cArchivo = Dir(Ruta & "/*.ods", 0)
   
    ' Leo la cantidad de archivos
   
    i = 0
 
    do While cArchivo > ""
      cArchivo=Dir
      i = i + 1
    Loop

    ' Redimensiono la matriz para almacenar los archivos
    ReDim Archivos(i - 1) As String
    'Cargo la matriz con los nombres
    i = 0
    cArchivo = Dir(Ruta & "/*.ods", 0)
    do While cArchivo>""
      Archivos(i) = cArchivo 
      cArchivo=Dir
      i = i + 1
    loop

    'Cargo   el control con la matriz
    for j = 0 to i- 1
     Dialog1.getControl("Archivos").addItem(Archivos(j), j)
    next
   end if 

Cargo los archivos en una matriz y despues la asigno al control.

saludos.
LibreOffice 6.1 en KDE Neon
Responder