[RESUELTO] Problema con diálogo al embeberle una imagen

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

[RESUELTO] Problema con diálogo al embeberle una imagen

Mensaje por MartyMcfly »

Buenas a todos.

Estuve haciendo un diálogo para cargar al inicio de un Libro es un diálogo para el desbloqueo de las Hojas, buscando y rejuntando en el foro logre hacerlo y funciona bien (adjunto archivo del mismo).

El problema fue cuando quise colocarle una imagen embebida con código, si bien la imagen la adjunta perfecto al cuadro de diálogo, empezo a fallar la funcionalidad que tenia el mismo, aparentemente no modifique nada, solo agregue otra macro de control de imagen (Gracias Foro de nuevo) para que me embeba la misma de una colocada en una Hoja.

Ahora me tira error al querer levantar el dato colocado en el campo para la contraseña, el bucle se corta, las advertencias salen a destiempo y le agarra el ataque.

Agradezco la ayuda de antemano.

Dejo pegado el codigo que funciona mal (tambien esta en el adjunto) y ambos archivos, el que no tiene imagen embebida y funciona perfecto y el problematico con imagen embebida.

Código: Seleccionar todo

Sub Mostrar_Dialogo()
'-------------------------------------------------------------------

Dim oDialogo As Object

   DialogLibraries.LoadLibrary("Standard")
   oDialogo = CreateUNODialog(DialogLibraries.Standard.DialogoPassword)
   wait 500
   FondoDialogo(oDialogo, "Logo1", "Logo1")

   oDialogo.execute()
   
End Sub
 
   ' Cierra el diálogo
Sub Cerrar_Dialogo()
'-------------------------------------------------------------------
Dim oDoc as object

oDoc = Thiscomponent

   oDialogo.EndExecute()
   oDoc.close(true)
End Sub
 
  

Const clave = "1234"


Sub Passdeingreso

dim oDoc as object
dim password as variant
dim x as object
dim Respuesta as integer

REM  --------------------------------------------------------------------------------------------------
 oDoc = Thiscomponent
  
   With oDialogo.Model
         
  do
    password = .txtPassword.Text
    password = Trim( password )
    if password = "" then ' Si presiono Cancelar
    	Respuesta = MsgBox( "Al parecer no escribiste nada, ¿realmente quieres salir?", 32 + 4, "Salir" ) 
    	
    	
  	if Respuesta = 6 then
    	
    	msgbox "Cerrando entonces.....",  64, "Aviso de seguridad"
    	oDoc.close(true)
    	exit do
    	
   end if
    end if 
  
   
    if password <> clave then 
     msgbox "                                 Clave incorrecta" & chr(13) & chr(13) & "Para editar campos protegidos deproteja la hoja   " & chr(13) & "  ", 16, "Error de ingreso"
   oDialogo.Execute()
   
    else
    	
     oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument")
        for each x in ThisComponent.Sheets()
            x.UnProtect( clave ) 
             
        next 
        msgbox "Hojas desprotegidas, no olvides PROTEGER luego de la edición", 64, "Aviso de seguridad"
    oDialogo.EndExecute()
        end if
        
     loop Until password = "" or clave
     
end with
        
end sub

Const Clave = "1234"

Sub GuardaryProteger
dim oDoc as object, x as object

REM   AF ------------------------------------------------------------------------------
    oDoc = ThisComponent
    if oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
        for each x in ThisComponent.Sheets()
            x.Protect( clave )    
         
        next
        msgbox "Se protegieron exitosamente todas las Hojas", 48, "Aviso de seguridad"
        
    end if
    
end sub

 
   


Sub FondoDialogo(oDialogo As Object, Nombre_ImageControl as String, Nombre_Imagen As String)
   Dim Imagen As Object	
   Dim oForma As Object
   Dim oPaginaDibujo As Object
   Dim i as integer

   oPaginaDibujo = ThisComponent.getCurrentController.getActiveSheet.getDrawPage()
    
   ' ------------ El fondo del dialogo --------------------------------
    i = 0
    do
      oForma = oPaginaDibujo.getByIndex(i)
      If oForma.Name = Nombre_Imagen Then
       exit do
      End if
      i = i + 1
    loop While i < oPaginaDibujo.getCount()
	' ---------------------------------------------------------------------
 
    Dim oPT As Object
    
    oPT = oDialogo.getPosSize()
    Imagen = Imagen_Control( oDialogo, -180, 60, oPT.Width, 90, oPT.Height, 60 )
    oDialogo.addControl(Nombre_ImageControl, Imagen )
    oDialogo.getControl(Nombre_ImageControl).Model.ImageURL = oForma.GraphicURL


end sub

Function Imagen_Control( oDialogo As Object, PosX As Integer, PosY As Integer, Width As Integer, Height As Integer, Ruta_Archivo As String ) As Object

	oControlModel = createUnoService( "com.sun.star.awt.UnoControlImageControlModel" )
			with oControlModel
				.ImageURL = ConvertToUrl(Ruta_Archivo)
				.Border = 0
				.ScaleImage = false
			
			end with
	oControl = createUnoService( "com.sun.star.awt.UnoControlImageControl" )
			with oControl
				.setContext( oDialogo )
				.setPosSize( PosX, PosY, Width, Height, com.sun.star.awt.PosSize.POSSIZE)
				.setModel( oControlModel )
			end with
			
	Imagen_Control = oControl

end function
Adjuntos
Dialogo prueba con imagen embebida.ods
(17.5 KiB) Descargado 219 veces
Dialogo prueba sin imagen embebida.ods
(13.8 KiB) Descargado 226 veces
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
fornelasa
Mensajes: 3268
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Problema con diálogo al embeberle una imagen

Mensaje por fornelasa »

Intenta quitar esta instrucción de dentro cualquier procedimiento Sub y colócala hasta arriba y afuera de cualquier Sub, más o menos así:

Código: Seleccionar todo

Dim oDialogo As Object

Sub Mostrar_Dialogo() 
......
End Sub
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
MartyMcfly
Mensajes: 26
Registrado: Sab Mar 03, 2018 12:20 pm

Re: Problema con diálogo al embeberle una imagen

Mensaje por MartyMcfly »

Fornelasa gracias por la respuesta!

Efectivamente, luego de mover la declaración de dicha variable, la macro no dio errores.

Tenes idea porque se debe? solo pasa al declarar ese tipo de variable?, ya que, consulte el libro de Mauricio y él la declara dentro del Sub y aparentemente sin problemas.


Muchas gracias por la ayuda !!
Gracias, saludos
Ariel
OpenOffice 4.1.5 - LibreOffice 6.0.2.1 en Microsoft Windows 10 Pro
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Problema con diálogo al embeberle una imagen

Mensaje por mauricio »

Tienes que revisar el tema del alcance o visibilidad de las variables, no puedes usar la variable declarada dentro de un procedimiento, dentro de otro, al pasarla a la parte superior como te ha indicado mi amigo, permites que se comparta dicha variable entre procedimientos.
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder