Ajustar tamaño caja toast

Post Reply
User avatar
leandro
Posts: 1745
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Ajustar tamaño caja toast

Post by leandro »

Hola buenas tardes para todos, queremos poder cambiar el tamaño de la caja del toast, pero parece que viene definido por defecto, ya busque el código fuente, pero no logro encontrarlo.

Image

Code: Select all | Expand

cRutaLgo := CurDrive()+":\"+CurDir()+"\loguito.bmp"
Toast( "CONFIRMACION DE PROCESO", "Documento nomina radicado correctamente DIAN","HymLyma | Digital Products ",cRutaLgo )	
De paso aprovechamos para preguntar, si se puede colocar algún botón o enlace, que ejecute una acción dentro de nuestra aplicación.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42529
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 77 times
Contact:

Re: Ajustar tamaño caja toast

Post by Antonio Linares »

Estimado Leandro,

La función Toast() usa funciones propias de WinRT basado en Windows.UI y no es nada estandard ni fácil de modificar.

Te adjunto aqui todo el código por si quieres revisarlo. He consultado con DeepSeek para ver si se puede hacer lo que quieres pero no parece dar una solución clara.

Comentarte que Cristobal implementó la Clase TToast en FWH y que usándola puedes tener mucho mas control aunque esa clase también tiene un nivel de complejidad.

winrt.prg

Code: Select all | Expand

#include "FiveWin.ch"

#define Show                       7
#define CreateToastNotification    7
#define CreateToastNotifierWithId  8
#define Item                       8
#define GetNamedItem               9
#define GetTemplateContent         9
#define add_Activated             12  
#define CreateTextNode            12
#define Get_Attributes            17
#define GetElementsByTagName      17
#define AppendChild               23

//---------------------------------------------------------------------------//

function WinRTString( cText )

   local pString
   
   WindowsCreateString( AnsiToWide( cText ), Len( cText ), @pString )

return pString

//---------------------------------------------------------------------------//

static function SetNodeText( pNodeList, nItem, cText, pXml )

   local pXmlNode, pXmlText, pXmlNodeChild
   local pString

   WinRTMethod( pNodeList, Item, nItem, @pXmlNode )
   pString = WinRTString( cText )
   WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
   WindowsDeleteString( pString )
   WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )

return nil

//---------------------------------------------------------------------------//

static function SetImageFileName( pXml, cImageFileName ) 

   local pString := WinRTString( "image" )
   local pNodeList, pXmlNode, pAttributeMap
   local pXmlNodeAttribute, pXmlText, pXmlNodeChild

   WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
   WindowsDeleteString( pString )
   WinRTMethod( pNodeList, Item, 0, @pXmlNode )
   WinRTMethod( pXmlNode, Get_Attributes, @pAttributeMap )
   pString = WinRTString( "src" )
   WinRTMethod( pAttributeMap, GetNamedItem, pString, @pXmlNodeAttribute )
   WindowsDeleteString( pString )
   pString = WinRTString( cImageFileName )
   WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
   WindowsDeleteString( pString )
   WinRTMethod( pXmlNodeAttribute, AppendChild, pXmlText, @pXmlNodeChild )

return nil

//---------------------------------------------------------------------------//

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier

   DEFAULT cFirstLine := "FiveWin notification",;
           cSecondLine := " ", cThirdLine := " ",;
           cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )

   // "50AC103F-D235-4598-BBEF-98FE4D1A3AD4"
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )

   RoGetActivationFactory( pString, cIID, @pToastFactory )

   WindowsDeleteString( pString );

   WinRTMethod( pToastFactory, GetTemplateContent, 3, @pXml )

   SetImageFileName( pXml, cImageFileName )
   
   pString = WinRTString( "text" )
   WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
   WindowsDeleteString( pString )

   SetNodeText( pNodeList, 0, cFirstLine,  pXml ) 
   SetNodeText( pNodeList, 1, cSecondLine, pXml ) 
   SetNodeText( pNodeList, 2, cThirdLine,  pXml ) 

   // 04124B20-82C6-4229-B109-FD9ED4662B53
   cIID = Chr( 0x20 ) + Chr( 0x4B ) + Chr( 0x12 ) + Chr( 0x04 ) + ;
          Chr( 0xC6 ) + Chr( 0x82 ) + Chr( 0x29 ) + Chr( 0x42 ) + ;
          Chr( 0xB1 ) + Chr( 0x09 ) + Chr( 0xFD ) + Chr( 0x9E ) + ;
          Chr( 0xD4 ) + Chr( 0x66 ) + Chr( 0x2B ) + Chr( 0x53 )

   pString = WinRTString( "Windows.UI.Notifications.ToastNotification" )
   RoGetActivationFactory( pString, cIID, @pNotificationFactory )
   WindowsDeleteString( pString )

   WinRTMethod( pNotificationFactory, CreateToastNotification, pXML, @pNotification )

   pString = WinRTString( " " )
   WinRTMethod( pToastFactory, CreateToastNotifierWithId, pString, @pNotifier )
   WindowsDeleteString( pString )

   // pEventHandler = WinRTEventHandler()
   // WinRTMethod( pNotification, add_Activated, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )
   // WinRTMethod( pNotification, add_Activated + 1, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )
   // WinRTMethod( pNotification, add_Activated + 2, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )

   WinRTMethod( pNotifier, Show, pNotification )

   RoUninitialize()

return nil

//---------------------------------------------------------------------------//

DLL FUNCTION RoInitialize( nType AS LONG ) AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION RoUninitialize() AS VOID PASCAL LIB "combase.dll"

DLL FUNCTION WindowsCreateString( cWideText AS LPSTR, nLength AS LONG, @pString AS PTR ) ;
   AS LONG PASCAL LIB "combase.dll"
   
DLL FUNCTION WindowsDeleteString( pString AS PTR ) AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION RoGetActivationFactory( pString AS PTR, REFIID AS LPSTR, @pFactory AS PTR ) ;
   AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION WindowsGetStringRawBuffer( pString AS PTR, @nLenght AS LONG ) ;
   AS LONG PASCAL LIB "combase.dll"
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 42529
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 77 times
Contact:

Re: Ajustar tamaño caja toast

Post by Antonio Linares »

En una siguiente consulta a DeepSeek parece haber dado unas pistas:

Code: Select all | Expand

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier
   local cXml

   DEFAULT cFirstLine := "FiveWin notification",;
           cSecondLine := " ", cThirdLine := " ",;
           cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   // Create XML document instance
   pString = WinRTString( "Windows.Data.Xml.Dom.XmlDocument" )
   RoActivateInstance( pString, @pXml )
   WindowsDeleteString( pString )

   // Define compact XML (no image or inline image)
   cXml := ;
   '<toast>'+;
      '<visual>'+;
         '<binding template="ToastGeneric">'+;
            iif( Empty( cImageFileName ), '', '<image src="' + cImageFileName + '"/>' ) + ;
            '<text>' + cFirstLine + '</text>'+;
            '<text>' + cSecondLine + '</text>'+;
            '<text>' + cThirdLine + '</text>'+;
         '</binding>'+;
      '</visual>'+;
   '</toast>'

   // Load the XML into the document
   pString = WinRTString( cXml )
   WinRTMethod( pXml, "LoadXml", pString )
   WindowsDeleteString( pString )

   // Proceed with creating the notification (same as before)
   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
   RoGetActivationFactory( pString, cIID, @pToastFactory )
   WindowsDeleteString( pString )

   // ... (rest of the code remains the same)
   
   WinRTMethod( pNotifier, "Show", pNotification )

   RoUninitialize()

return nil
For a minimal Toast with just one line of text and no image:
Toast( "Short Message", "", "" )
Toast( "Short Message", "", "", "c:\path\to\small_image.png" )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
leandro
Posts: 1745
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Ajustar tamaño caja toast

Post by leandro »

Antonio buenas tardes, como estas?

Intentamos compilar la función, pero salen los siguiente errores:

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 24.09 64bits - Sep. 2024   Harbour development power  │▄
?(c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2407_64\bin\harbour leandro16 /n /d__64__ /iC:\fwh64_2409\include;C:\xHar2407_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro16.prg' and generating preprocessed output to 'leandro16.ppo'...
Generating C source output to 'leandro16.c'...
Done.
Lines 58, Functions/Procedures 1, pCodes 159
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
leandro16.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_ROACTIVATEINSTANCE' referenced from C:\FWH64_2409\SAMPLES\LEANDRO16.OBJ
* Linking errors *

c:\fwh64_2409\samples>

Code: Select all | Expand

#include "Fivewin.ch"

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier
   local cXml

   DEFAULT cFirstLine := "FiveWin notification"
   DEFAULT cSecondLine := " " 
   DEFAULT cThirdLine := " "
   DEFAULT cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   // Create XML document instance
   pString = WinRTString( "Windows.Data.Xml.Dom.XmlDocument" )
   RoActivateInstance( pString, @pXml )
   WindowsDeleteString( pString )

   // Define compact XML (no image or inline image)
   cXml := ;
   '<toast>'+;
      '<visual>'+;
         '<binding template="ToastGeneric">'+;
            iif( Empty( cImageFileName ), '', '<image src="' + cImageFileName + '"/>' ) + ;
            '<text>' + cFirstLine + '</text>'+;
            '<text>' + cSecondLine + '</text>'+;
            '<text>' + cThirdLine + '</text>'+;
         '</binding>'+;
      '</visual>'+;
   '</toast>'

   // Load the XML into the document
   pString = WinRTString( cXml )
   WinRTMethod( pXml, "LoadXml", pString )
   WindowsDeleteString( pString )

   // Proceed with creating the notification (same as before)
   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
   RoGetActivationFactory( pString, cIID, @pToastFactory )
   WindowsDeleteString( pString )

   // ... (rest of the code remains the same)
   
   WinRTMethod( pNotifier, "Show", pNotification )

   RoUninitialize()

return nil
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42529
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 77 times
Contact:

Re: Ajustar tamaño caja toast

Post by Antonio Linares »

https://learn.microsoft.com/en-us/windo ... teinstance

Prueba con este código:

Code: Select all | Expand

DLL FUNCTION RoActivateInstance( pRuntimeClassName AS LPSTR, @pInstance AS PTR ) AS LONG PASCAL LIB "combase.dll"

FUNCTION RoActivateInstanceWrapper( cRuntimeClassName )
   LOCAL nResult, pHString, pInstance
   LOCAL nLength := Len( cRuntimeClassName )
   LOCAL IID_IInspectable := "{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}" // IID de IInspectable

   // Inicializar el entorno de Windows Runtime
   nResult := RoInitialize( 0 ) // RO_INIT_SINGLETHREADED
   IF nResult != 0
      RETURN nResult
   ENDIF

   // Crear un HSTRING a partir de la cadena Unicode
   nResult := WindowsCreateString( cRuntimeClassName, nLength, @pHString )
   IF nResult != 0
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Llamar a RoActivateInstance directamente
   nResult := RoActivateInstance( pHString, @pInstance )
   IF nResult != 0
      WindowsDeleteString( pHString )
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Liberar HSTRING
   WindowsDeleteString( pHString )

   // Desinicializar Windows Runtime
   // RoUninitialize()

   // Retornar la instancia obtenida
RETURN pInstance
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
leandro
Posts: 1745
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Ajustar tamaño caja toast

Post by leandro »

Antonio buenas tardes como estas?

Se compilo la aplicación sin problema, pero no ejecuta ninguna acción.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 24.09 64bits - Sep. 2024   Harbour development power  │▄
?(c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2407_64\bin\harbour leandro16 /n /d__64__ /iC:\fwh64_2409\include;C:\xHar2407_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro16.prg' and generating preprocessed output to 'leandro16.ppo'...
Generating C source output to 'leandro16.c'...
Done.
Lines 41, Functions/Procedures 2, pCodes 192
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
leandro16.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
* Application successfully built *

c:\fwh64_2409\samples>

Code: Select all | Expand

#include "Fivewin.ch"


DLL FUNCTION RoActivateInstance( pRuntimeClassName AS LPSTR, @pInstance AS PTR ) AS LONG PASCAL LIB "combase.dll"

FUNCTION RoActivateInstanceWrapper( cRuntimeClassName )
   LOCAL nResult, pHString, pInstance
   LOCAL nLength := Len( cRuntimeClassName )
   LOCAL IID_IInspectable := "{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}" // IID de IInspectable

   // Inicializar el entorno de Windows Runtime
   nResult := RoInitialize( 0 ) // RO_INIT_SINGLETHREADED
   IF nResult != 0
      RETURN nResult
   ENDIF

   // Crear un HSTRING a partir de la cadena Unicode
   nResult := WindowsCreateString( cRuntimeClassName, nLength, @pHString )
   IF nResult != 0
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Llamar a RoActivateInstance directamente
   nResult := RoActivateInstance( pHString, @pInstance )
   IF nResult != 0
      WindowsDeleteString( pHString )
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Liberar HSTRING
   WindowsDeleteString( pHString )

   // Desinicializar Windows Runtime
   // RoUninitialize()

   // Retornar la instancia obtenida
RETURN pInstance
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42529
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 77 times
Contact:

Re: Ajustar tamaño caja toast

Post by Antonio Linares »

El Toast aparece con el mismo tamaño ?

Estas usando la versión modificada que publicaste ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
leandro
Posts: 1745
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: Ajustar tamaño caja toast

Post by leandro »

Antonio buenas tardes gracias por responder
Antonio Linares wrote: Tue Feb 11, 2025 10:17 pm El Toast aparece con el mismo tamaño ?
Si el mismo tamaño.
Antonio Linares wrote: Tue Feb 11, 2025 10:17 pm Estas usando la versión modificada que publicaste ?
Si correcto.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
Post Reply