Shell   Hace 11 horas
#1
Buenas a tod@s!.

Estoy intentando crear un ejemplo con Trayicon para comprenderlo de la forma más sencilla.
Pero no logro que el formulario se oculte al principio.

Desde la opción de menú del Trayicon logro que el formulario se muestre o no se muestre.
Pero desde que inicia la aplicación, está activo en el escritorio.

Código:
'Problema el formulario se muestra al inicio de la ejecución

Private TrayMenu As Menu
Private MenuMostrar As Menu
Private MenuSalir As Menu
Private TrayIcon1 As TrayIcon

Public Sub Form_Open()

  'Crear el menú principal del tray icon
  TrayMenu = New Menu(Me) As "TrayMenu"

  'Crear el submenú "Mostrar"
  MenuMostrar = New Menu(TrayMenu) As "MenuMostrar"
  MenuMostrar.Text = "&Mostrar"

  'Crear el submenú "Salir"
  MenuSalir = New Menu(TrayMenu) As "MenuSalir"
  MenuSalir.Text = "&Salir"

  'Configurar el icono de la bandeja
  TrayIcon1 = New TrayIcon As "TrayIcon1"
  TrayIcon1.Icon = Stock["gambas"]
  TrayIcon1.Tooltip = "Ejemplo básico con TrayIcon"
  TrayIcon1.PopupMenu = TrayMenu.Name
  TrayIcon1.Visible = True

  'FIXME: Esto no funciona. El formulario no se ha abierto
  Me.Hide() 'Ocultar el formulario al iniciar

End

Public Sub MenuMostrar_Click()

  Me.Visible = Not Me.Visible
  If Me.Visible Then
    Me.Show()
    Me.Raise
    Me.SetFocus()
  Endif

End

Public Sub MenuSalir_Click()

  Me.Close()

End

Public Sub Form_Close()

  If TrayIcon1.Visible Then TrayIcon1.Hide
  TrayIcon1.Delete

End

Public Sub Form_Activate()

  '¿ Necesito algo aquí ?

End

Os subo el ejemplo.



Vaya como ha mejorado el mostrar el código. Chapó administrador!

Saludos
Archivos adjuntos
.gz
EjemploBaseConTrayIcon-0.0.1.tar.gz (Tamaño: 8.82 KB Descargas: 1)
Última modificación: Hace 11 horas por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   Hace 11 horas
#2
Lo tenías muy acorralado. La única modificación al código es pasar la ocultación al evento _Show que se ejecuta después del open. Así:
Código:
' Gambas class file

Private TrayMenu As Menu
Private MenuMostrar As Menu
Private MenuSalir As Menu
Private TrayIcon1 As TrayIcon

Public Sub Form_Open()

  'Crear el menú principal del tray icon
  TrayMenu = New Menu(Me) As "TrayMenu"

  'Crear el submenú "Mostrar"
  MenuMostrar = New Menu(TrayMenu) As "MenuMostrar"
  MenuMostrar.Text = "&Mostrar"

  'Crear el submenú "Salir"
  MenuSalir = New Menu(TrayMenu) As "MenuSalir"
  MenuSalir.Text = "&Salir"

  'Configurar el icono de la bandeja
  TrayIcon1 = New TrayIcon As "TrayIcon1"
  TrayIcon1.Icon = Stock["gambas"]
  TrayIcon1.Tooltip = "Ejemplo básico con TrayIcon"
  TrayIcon1.PopupMenu = TrayMenu.Name
  TrayIcon1.Visible = True

End

Public Sub Form_Show()

  Me.Hide() 'Ocultar el formulario al iniciar

End
.....
Tal vez añadir un wait antes del hide era suficiente, pero así te aseguras que ya está todo hecho antes de esconcerlo. Luego te faltaba añadir algunas cosas a la definición del formulario:
fondo transparente, sin bordes, tamaño pequeño, que no aparezca en la barra del escritorio... y ya.

Te adjunto el programa corregido.

Saludos.
Archivos adjuntos
.gz
EjemploBaseConTrayIcon-0.0.3.tar.gz (Tamaño: 8.8 KB Descargas: 1)
Última modificación: Hace 11 horas por Shordi.

No podemos regresar
Shell   Hace 8 horas
#3
Ostras...que esto es como la canción de Teresa Rabal.
Me pongo de pie, me vuelve a sentaaaar...
Aquí es, me escondo una vez, me vuelvo a esconder..y el tío no sale.

No, no vale que pongas que se oculta en el form_show, entonces no se muestra
en la vida.  Acabas de crearle una depresión de caballo al formulario. Ahí lo tengo
llorando por las esquinas del escritorio. ( No lo veo, pero lo escucho llorando ).

Prueba el ejemplo, ha cambiado de una forma que ya no se muestra nunca

Imagina el caso que no es un formulario vacío, vamos que puede tener controles.

Saludos
Última modificación: Hace 8 horas por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   Hace 8 horas
#4
Es complicado poner controles ahí. Los trayicon son muy suyos. No son controles normales, que se manejan a través de dBus y no están ligados al programa una vez en ejecución. Cosas como cerrar el formulario, terminar la aplicación, etc. A menudo dan problemas.
 Si quieres mostrar algo hazlo en otro formulario porque si no ¿Cómo lo harás en los escritorios que no tienen panel donde sacar el trayicon?

No podemos regresar
Shell   Hace 7 horas
#5
Pues si que son raros.  Confused
Si el código no es del todo correcto, hacen cosas raras según el tipo de gestor de escritorio que uses.

¿ Qué te parece de esta forma ?. Me he ayudado de una bandera para saber cuando se está mostrando y cuando no.
No descarto que haya código en menuMostrar_Click() que se pueda eliminar.
Código:
' Gambas class file

Private TrayMenu As Menu
Private MenuMostrar As Menu
Private MenuSalir As Menu
Private TrayIcon1 As TrayIcon

Private muestrate As Boolean

Public Sub Form_Open()

  'Crear el menú principal del tray icon
  TrayMenu = New Menu(Me) As "TrayMenu"

  'Crear el submenú "Mostrar"
  MenuMostrar = New Menu(TrayMenu) As "MenuMostrar"
  MenuMostrar.Text = "&Mostrar"

  'Crear el submenú "Salir"
  MenuSalir = New Menu(TrayMenu) As "MenuSalir"
  MenuSalir.Text = "&Salir"

  'Configurar el icono de la bandeja
  TrayIcon1 = New TrayIcon As "TrayIcon1"
  TrayIcon1.Icon = Stock["gambas"]
  TrayIcon1.Tooltip = "Ejemplo básico con TrayIcon"
  TrayIcon1.PopupMenu = TrayMenu.Name
  TrayIcon1.Visible = True

  Me.SkipTaskbar = True
  'Me.Hide() No sé si esto merece la pena aquí

End

Public Sub MenuMostrar_Click()

  muestrate = Not muestrate

  If muestrate Then
    Me.Show()
    Me.Raise
    Me.SetFocus()
    MenuMostrar.Text = "&Ocultar"
  Else
    Me.Hide()
    MenuMostrar.Text = "&Mostrar"
  Endif

End

Public Sub MenuSalir_Click()

  Me.Close()

End

Public Sub Form_Close()

  If Not IsNull(TrayIcon1) Then
    If TrayIcon1.Visible Then TrayIcon1.Hide
    TrayIcon1.Delete
  Endif

End

Public Sub Form_Activate()

  If muestrate Then
    Me.Show()
  Else
    Me.Hide()
  Endif

End


Desde luego el trayicon no iba a funcionar en un escritorio typo Wayland.
Que rollo es eso. Sad

Habría que averiguar antes si es tipo Wayland:
Código:
If Environ["XDG_SESSION_TYPE"] = "wayland" Then
  Message.Info("El entorno Wayland puede no soportar icono de bandeja.")
Endif

Y tomar otra alternativa

Saludos
Archivos adjuntos
.gz
EjemploBaseConTrayIcon-0.0.4.tar.gz (Tamaño: 8.87 KB Descargas: 1)
Última modificación: Hace 7 horas por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   Hace 3 horas
#6
Te adjunto el ejemplo con las verificaciones que yo hago en mi programa LinAmp, que tienes en el git .

Saludos
Archivos adjuntos
.gz
EjemploBaseConTrayIcon-0.0.5.tar.gz (Tamaño: 9.16 KB Descargas: 0)

No podemos regresar
  
Usuarios navegando en este tema: 1 invitado(s)
Powered By MyBB, © 2002-2025 MyBB Group.
Made with by Curves UI.