Página 1 de 1

[RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Lun Oct 28, 2013 11:34 pm
por xiseme
Del foro y del libro de Mauricio, logro crear una "forma" y adjudicarle tamaño, transparencia ...

Código: Seleccionar todo

Dim oPaginaDibujo As Object
Dim oForma As Object
Dim oTam As New com.sun.star.awt.Size

     oPaginaDibujo = ThisComponent.getCurrentController.getActiveSheet.getDrawPage()
     oForma = ThisComponent.createInstance("com.sun.star.drawing.RectangleShape")

     oTam.Width= Ancho
     oTam.Height= Alto

   With oForma
      .LineStyle = com.sun.star.drawing.LineStyle.NONE
      .FillColor = RGB( 75,75,75 )
      .FillTransparence = 85
      .setSize (oTam)   
      .Name = nDib
   End With

     oPaginaDibujo.Add( oForma )
El objetivo que no logro :crazy: es ponerla en el fondo del documento (Click-dcho → Posición → «En el Fondo»)

¿Cual es manera de situarla en el fondo mediante código?

Re: Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 12:20 am
por mauricio
Fácil...

Código: Seleccionar todo

oForma.LayerID = 1
Saludos

Re: Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 2:31 am
por xiseme
Gracias Mauricio. muchas gracias.
¡menudo alegrón me has dado! estaba buscando por cosas como SetObjectToBackground

Re: Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 3:03 am
por SLV-es
Dos palabras de cortesía, un objeto y una propiedad... asombroso.

Menos mal que tiene firma !!!! :lol: :lol: :lol:

Re: Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 3:23 am
por mauricio
SLV-es escribió:Dos palabras de cortesía, un objeto y una propiedad... asombroso.

Menos mal que tiene firma !!!! :lol: :lol: :lol:
Acuerdate mi amigo de ese dicho que a la letra dice: -cuando hables, procura que tus palabras sean mejores que tu silencio-... :D :D

Un abrazo

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 5:03 pm
por xiseme
Una vez que se me ha indicado el camino (todo es más fácil cuando te abren la puerta) ...
he intentando entender (más que consiguiendo) algo de las capas** he trasteado con otras opciones para ver donde sitúa el dibujo y si es seleccionable según la opción de LayerID=
  • 0 → delante de fondo celda y de algunas formas /seleccionable directamente con un click
    1 → detras de todo fondo celda incl. /selecc.indirecta
    2 → delante de fondo celda y de algunas formas /selecc.indirecta
    3 → frente delante de todo /selecc.directa con un click
    4 → invisible /no seleccionable
    5 → invisible /seleccionable directamente
La 2 es la buena para este caso de resaltar fila y columna ;)

** Como se ha comentado ya en el foro, para los menos aventajados, se hace difícil. He querido saber del ZOrder (más allá de que no es ni el orden X ni el Y :lol: ) para asegurarme que la forma creada está detrás de cualquier dibujo pero delante del fondo de celda, pero no he sabido. Imagino que tendría que ser intercambiando posiciones (pag.390 libro Mauricio) y que si le asigno orden 1 no "empujará" en uno el orden de las demás si las hubiera.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 6:56 pm
por fornelasa
Hola a todos,
Estimado xiseme:
- poder llamarlos por su nombre en vez de por su índice.
Suponiendo que tengamos duda todavia con lo anterior aqui una posible opción:
¿Como puedo seleccionar la forma "rectangulo" por su nombre de entre un mar de formas?
Respuesta: Corro la macro Seleccionar y listo.

Código: Seleccionar todo

Sub Seleccionar
oDoc = ThisComponent
oHoja = oDoc.CurrentController.ActiveSheet
Dibujos = oHoja.GetDrawPage
oFormas = Dibujos.Count
For i = 0 To oFormas - 1
If Dibujos.GetByIndex(i).Name = "Rectangulo" Then
oDoc.CurrentController.Select(Dibujos.GetByIndex(i))
exit for
end if
Next
end sub
En cuanto a lo de la famosa extensión.... me espero....jejejejeje.....ya verán mis criticas...jejejeje :twisted: siempre hay un "aguafiestas"... :mrgreen:
Saludos, Federico.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 8:35 pm
por xiseme
Gracias Federico.
Sí, tenía dudas de si era posible algo como oPagDibujo.hasByName(nombre) para saber si existe y oPagDibujo.getByName(nombre) para acceder a él.

Queda aclarado que tiene que ser por índice.

Y las críticas ... venga va! ... ayudan a mejorar. ;) ¿aguafiestas? eso es bueno; indica que hay una y que lo estamos pasando bien :lol: :lol:

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 9:12 pm
por fornelasa
Si xiseme, es claro que hay fiesta pero........... ¡ah para fiestecitas!...... :lol: :lol:
Saludos, Federico.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 10:01 pm
por fornelasa
Aqui mi comentario:
1) No es en contra de alguien, es solo una opinión.
2) Entiendo, comprendo y sé que algunos no estarán de acuerdo con lo expresado más abajo, ok bien, que se le va a hacer :cry: :cry:
3) Para que no se mal interprete desde el 24/JUNIO/2011 cuestioné esto del resaltado de fila http://forum.openoffice.org/es/forum/vi ... leccionada
4) Lo importante, lo trascendente y lo genial con respecto a este tema fue tratado aqui http://forum.openoffice.org/es/forum/vi ... =21&t=9119
5) Se pidió la incorporación de esta caracteristica al programa en bugzilla desde el 17 de Enero del 2011 y solo ha obtenido un voto (recientemente un voto hecho por salva :evil:) :mrgreen: :mrgreen: https://issues.apache.org/ooo/show_bug.cgi?id=116489
Tres conclusiones:
A) Hacer una extension o incorporación al programa de este "resaltado de fila" para tener tal caracteristica en el programa se me hace de lo mas trivial.
B) Me quedo con el punto 4
C) Por supuesto que no la votaré.
¡recorcholis ya lo dije! :geek:

Tengo un poco de temor xiseme de que vayas a pensar que es contra ti, por supuesto que para nada, al contrario gracias por darme "entrada" para poder externar mis traumas :super:
Saludos, Federico.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mar Oct 29, 2013 11:47 pm
por xiseme
Puedes (debes ;)) contradecirme y rebatirme todo cuanto consideres. Ni se me ocurriría malinterpretar tal cosa y menos tomármelo a mal. Como muy bien dices en el punto 1: es claro en tu caso y en el de otros que nunca es en contra, siempre es a favor (en este caso lo es de invertir el tiempo en otras características)

La funcionalidad ... bueno, como todo, para la generalidad muy importante no será, pero reconoce que puede ser «vistosa». Desconozco si otras hojas de cálculo la tienen.

A mí solo me falta un detalle, que es situar los "resaltados" delante de lo que entiendo es la capa de color de celda LayerID=2 pero detrás de todas las «shapes» incluso de las «anotaciones de celda» que es lo que hace click-dcho → Posición → Enviar al fondo (no En el fondo que eso ya ha quedado bien respondido) abriré tema al respecto.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mié Oct 30, 2013 12:13 am
por fornelasa
Hola,
xiseme si es que he entendido bien, lo que le da transparencia a un "rectangulo" es algo como esto:

Código: Seleccionar todo

Dibujos.GetByIndex(i).FillTransparence = 30
Saludos, Federico.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mié Oct 30, 2013 12:36 am
por xiseme
Gracias. No me refiero a la transparencia que, si te fijas en el código del principio. ya la he incluido en el bloque "whith" (solo que yo soy más trasparente, concretamente al 85 :lol: )
Es enviarla "al" fondo (de la capa) pero no "en el fondo" de la hoja. Como al hacer Click-drcho. → Posición → Enviar al fondo.

Re: [RESUELTO] Enviar dibujo al fondo desde macro

Publicado: Mié Oct 30, 2013 12:43 am
por fornelasa
Segun yo si el objeto esta seleccionado, tal vez así:

Código: Seleccionar todo

sub EnviarAlFondo
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SendToBack", "", 0, Array())
end sub
Si corremos la macro Seleccionar tal vez así:

Código: Seleccionar todo

Sub Seleccionar
oDoc = ThisComponent
oHoja = oDoc.CurrentController.ActiveSheet
Dibujos = oHoja.GetDrawPage
oFormas = Dibujos.Count
For i = 0 To oFormas - 1
If Dibujos.GetByIndex(i).Name = "Rectangulo" Then
Dibujos.GetByIndex(i).ZOrder = 0
exit for
end if
Next
end sub

Saludos, Federico.