es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“Compartir” un panel de tareas personalizado entre todas las ventanas de la misma presentación.

Utilizo el siguiente código para administrar diferentes paneles de tareas personalizados en PowerPoint VSTO a través de las presentaciones. Esto funciona bien, por ejemplo, cuando un usuario abre una nueva presentación se crea un nuevo panel de tareas y no afecta a ningún otro panel de tareas abierto en otra presentación.

Ahora me encontré con la siguiente situación. Un usuario ha abierto una presentación y ahora abre una ventana adicional en PowerPoint para esta presentación (hacer clic en “Ver”, “Nueva ventana”). Lo que sucede ahora es que se crea un nuevo panel de tareas personalizado (porque el HWND de esta ventana es diferente), pero en cambio necesito que este panel de tareas sea el mismo que en la otra ventana de presentación.

Pregunta: ¿cómo puedo “compartir” un panel de tareas entre todas las ventanas de la misma presentación?

Dim CreatedPanes As New Dictionary(Of String, CustomTaskPane)

Public Function GetTaskPane(taskPaneId As String, taskPaneTitle As String) As Microsoft.Office.Tools.CustomTaskPane

    Dim key As String = $"{taskPaneId}({Globals.ThisAddIn.Application.HWND})"

    If Not CreatedPanes.ContainsKey(key) Then
        Dim pane = Globals.ThisAddIn.CustomTaskPanes.Add(New myTaskPaneControl(), taskPaneTitle)


        CreatedPanes(key) = pane

    End If

    Return CreatedPanes(key)

End Function

Creo que la misma lógica también se aplicará a Excel, por lo tanto, también estoy agregando esta etiqueta a la pregunta.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para “compartir” un panel de tareas entre todas las ventanas de la misma presentación en PowerPoint VSTO, puedes modificar la clave utilizada para almacenar el CustomTaskPane en el diccionario para incluir el HWND de la ventana de presentación. Esto asegurará que se devuelva el mismo CustomTaskPane independientemente de cuál ventana de la misma presentación esté activa.

    Aquí está el código modificado:

    Dim CreatedPanes As New Dictionary(Of String, CustomTaskPane)
    
    Public Function GetTaskPane(taskPaneId As String, taskPaneTitle As String) As Microsoft.Office.Tools.CustomTaskPane
    
        Dim presentationWindowHWND As String = Globals.ThisAddIn.Application.HWND.ToString()
    
        Dim key As String = $"{taskPaneId}({presentationWindowHWND})"
    
        If Not CreatedPanes.ContainsKey(key) Then
            Dim pane = Globals.ThisAddIn.CustomTaskPanes.Add(New myTaskPaneControl(), taskPaneTitle)
            CreatedPanes(key) = pane
        End If
    
        Return CreatedPanes(key)
    
    End Function
    

    Ten en cuenta que este enfoque asume que cada ventana de la presentación tiene un HWND único. Si tus usuarios están abriendo múltiples ventanas de la misma presentación en diferentes pantallas o utilizando escritorios virtuales, esta suposición puede no cumplirse y es posible que necesites modificar la clave para incluir información adicional que permita identificar de manera única cada ventana.

Comments are closed.