Page 1 of 2

Problemas con tooltips en rebars/toolbars.

PostPosted: Wed Nov 05, 2008 6:00 pm
by Carlos Mora
Me ha ocurrido algo extraño. Cuando uso una toolbar dentro de una Rebar, los tooltips muestran correctamente las letras acentuadas, tal como en
Image

Pero en otro programa hago algo parecido, usando el mismo FW y el mismo Harbour, y obtengo resultados diferentes

Image
[/img]

Las diferencias son el tamaño de los botones, y que la rebar va en un diálogo en lugar de una windows, pero no me doy cuenta por donde vienen los tiros.

Alguna sugerencia?

Un saludo

Carlos.

PostPosted: Wed Nov 05, 2008 6:32 pm
by Adolfo
Carlos...

Las preguntas obligadas..

Son el mismo Compilador y version de FWH ?
Usas las mismas libs de terceros ?
Lo ejecutas en el mismo PC ?
No tienes ninguna llamada a ANSITOOEM o a OEMTOANSI dentro del PRG ?
Defines el lenguaje en ambas aplicaciones ?

.. y por ultimo.. un pedazo del codigo de ambas llamadas ..para mirarlo un poko y ver por donde va el error.. eso..


Desde Chile
Adolfo

PostPosted: Thu Nov 06, 2008 8:31 am
by Carlos Mora
Hola Adolfo,

Como había puesto en el primer mensaje, el mismo FW (7.07), el mismo Harbour (8.08).
Casi no uso libs de terceros excepto FW y e Image2PDF.
Y sí, todo compilado y ejecutado en el mismo ordenador, con los mismos directorios.
Y como no uso AnsiToOem ni OemToAnsi desde hace unos cuantos años desde que uso TextPad, de ahí me surgió la duda. El problema es SOLO CON LOS TOOLTIPS DE LA REBAR, en el resto no tengo el más mínimo inconveniente, ni con captions ni nada que se le parezca, y eso desde hace bastantes años.
Lo que puede ser, que no he probado y que es algo que no hago nunca, es definir el lenguaje. Siempre uso el lenguaje por defecto del compilador, cuando surgió la posibilidad de especificar el charset no lo usé por temor a no ser compatible con los programas que ya estaba usando y, fundamentalmente, con el formato de los datos preexistentes en las bases.

Pero el punto es que en ninguno de ambos defino el Charset, y de hecho un proyecto es un subproyecto del otro, es decir que estan juntos hasta en el disco duro.

Seguiré buscando a ver cual puede ser el orgen del problema. El tema de los tooltips en un poco "caja negra", las funciones son parte del bloque cerrado de FW, voy a seguir haciendo pruebas a ver que puede ser...

Gracias por responder. Un saludo desde el otro lado del charco,

Carlos.

PostPosted: Thu Nov 06, 2008 8:52 am
by Antonio Linares
Carlos,

Este es el código que se usa para asignar los tooltips de las toolbars:
Code: Select all  Expand view
HB_FUNC( TTNSETTEXT ) // pNMTTDISPINFO, cTooltipText
{
   LPNMTTDISPINFO pti = ( LPNMTTDISPINFO ) hb_parnl( 1 );

   MultiByteToWideChar( CP_OEMCP, MB_PRECOMPOSED,
                        ( LPCSTR ) hb_parc( 2 ), -1, ( LPWSTR ) pti->szText,
                        hb_parclen( 2 ) + 1 );

   pti->hinst = NULL;
   pti->lpszText = NULL;
   pti->uFlags = 0;
}

Por si lo quieres modificar ó usar de otra forma.

Lo que necesites solo tienes que pedirlo :-)

PostPosted: Thu Nov 06, 2008 8:56 am
by Carlos Mora
Perdón, me habías pedido código.

Code: Select all  Expand view

   DEFINE DIALOG oDlg TITLE "Atisa" FROM 0, 0 TO 480, 800 PIXEL FONT oFont
      oDlg:lHelpIcon := .f.

   @ 0, 0 BROWSE oBrw SIZE 100, 100 ALIAS "M347_BC" OF oDlg FONT oFont

   ADD COLUMN TO oBrw HEADER "Código"        DATA {|| M347_BC->CodigoP } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "NIF"           DATA {|| M347_BC->NIF     } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Op."           DATA {|| M347_BC->ClaveOp } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Ignora?"       DATA {|| M347_BC->Ignorar } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Importe"       DATA {|| M347_BC->Importe } ALIGN DT_RIGHT
   ADD COLUMN TO oBrw HEADER "Computable"    DATA {|| M347_BC->Importe } ALIGN DT_RIGHT
   ADD COLUMN TO oBrw HEADER "Seguro"        DATA {|| M347_BC->OpSeguro } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Arrend.?"      DATA {|| M347_BC->ArrendLoc } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Concepto"      DATA {|| M347_BC->Concepto }
   ADD COLUMN TO oBrw HEADER "Fecha"         DATA {|| M347_BC->Fecha } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Contrapartida" DATA {|| M347_BC->Contrap } ALIGN DT_CENTER
   ADD COLUMN TO oBrw HEADER "Apunte"        DATA {|| M347_BC->Apunte }  ALIGN DT_RIGHT
   oBrw:nHeightCell += 6
   oBrw:nHeightHead += 6

   ACTIVATE DIALOG oDlg CENTERED ON INIT ( CreaBarra( oDlg ), oDlg:SetControl( oBrw ) )

Return NIL

FUNCTION CreaBarra( oDlg )
   Local oImageList, oBar

   DEFINE IMAGELIST oImageList SIZE 16, 16

   ILDESTROY( oImageList:hImageList )
   oImageList:hImageList:= ILCREATE32( 16, 16 )
   oImageList:Add( TBitmap():Define( ,"..\Icons16\check2.bmp", oDlg ) )
   oImageList:Add( TBitmap():Define( ,"..\Icons16\document_add.bmp", oDlg ) )
   oImageList:Add( TBitmap():Define( ,"..\Icons16\document_preferences.bmp", oDlg ) )
   oImageList:Add( TBitmap():Define( ,"..\Icons16\document_delete.bmp", oDlg ) )
   oImageList:Add( TBitmap():Define( ,"..\Icons16\replace2.bmp", oDlg ) )
   oImageList:Add( TBitmap():Define( ,"..\Icons16\document_gear.bmp", oDlg ) )
   // oImageList:Add( TBitmap():Define( ,"..\Icons16\document_exchange.bmp", oDlg ) )


   oReBar = TReBar():New( oDlg )

   DEFINE TOOLBAR oBar OF oReBar SIZE 16,20  IMAGELIST oImageList

   oReBar:InsertBand( oBar )

   oBar:nHeight -= 2

   DEFINE TBBUTTON OF oBar ;
      ACTION  oDlg:End() ;
      TOOLTIP 'Salir'

   DEFINE TBSEPARATOR OF oBar

   DEFINE TBBUTTON OF oBar ;
      MESSAGE  "Añadir" ;
      ACTION  oDlg:End() ;
      TOOLTIP 'Añadiró'

   DEFINE TBBUTTON OF oBar ;
      ACTION  oDlg:End() ;
      TOOLTIP 'Incluir'

   DEFINE TBBUTTON OF oBar ;
      ACTION  oDlg:End() ;
      TOOLTIP 'Excluir'

   DEFINE TBSEPARATOR OF oBar

   DEFINE TBBUTTON OF oBar ;
      ACTION  GenMov347BC( oDlg ) ;
      TOOLTIP 'Recálcular'

   DEFINE TBBUTTON OF oBar ;
      ACTION  oDlg:End() ;
      TOOLTIP 'Generar registros'

Return NIL



Ojo! Los herrores hortógraficos son para pruebas.

Code: Select all  Expand view
   DEFINE ICON oIcon RESOURCE 1

   DEFINE WINDOW oWnd TITLE "Atisa" MENU MainMenu() ICON oIcon FROM 0, 0 TO 480, 800 PIXEL

   DEFINE IMAGELIST oImageList SIZE 32, 32

   ILDESTROY( oImageList:hImageList )
   oImageList:hImageList:= ILCREATE32( 32, 32 )
   oImageList:Add( TBitmap():Define( "SALIR32"    ,, oWnd ) )
   oImageList:Add( TBitmap():Define( "CLIENTES32" ,, oWnd ) )
   oImageList:Add( TBitmap():Define( "PROVEED32"  ,, oWnd ) )
   oImageList:Add( TBitmap():Define( "IVA32"      ,, oWnd ) )
   oImageList:Add( TBitmap():Define( "VENTAS32"   ,, oWnd ) )
   oImageList:Add( TBitmap():Define( "COMPRAS32"  ,, oWnd ) )
   oImageList:Add( TBitmap():Define( "TESORERIA32",, oWnd ) )
   oImageList:Add( TBitmap():Define( "CONCEPTO32" ,, oWnd ) )

   oReBar = TReBar():New( oWnd )

   DEFINE TOOLBAR oBar OF oReBar SIZE 40, 52 IMAGELIST oImageList

   oReBar:InsertBand( oBar )

   oBar:nHeight -= 2

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Salir" ;
      ACTION  oWnd:End() ;
      TOOLTIP 'Salir del Programa'

   DEFINE TBSEPARATOR OF oBar

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Clientes" ;
      ACTION  ClientesBrowse() ;
      TOOLTIP 'Mantenimiento de Clientes'

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Proveedores" ;
      ACTION  ProveedoresBrowse() ;
      TOOLTIP 'Mantenimiento de Proveedores'

   DEFINE TBSEPARATOR OF oBar

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Tipos de IVA" ;
      ACTION  TipoIVABrowse() ;
      TOOLTIP 'Mantenimiento de Tipos de IVA'

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Ventas" ;
      ACTION  VentasBrowse() ;
      TOOLTIP 'Facturas de Venta'

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Compras" ;
      ACTION  ComprasBrowse() ;
      TOOLTIP 'Facturas de Compra'

   DEFINE TBSEPARATOR OF oBar

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Tesoreria" ;
      ACTION  FondosBrowse() ;
      TOOLTIP 'Gestión de Cuentas de Tesorería'

   DEFINE TBBUTTON OF oBar ;
      PROMPT "Conceptos" ;
      ACTION  ConceptoBrowse() ;
      TOOLTIP 'Gestión de Conceptos de Tesorería'

   SET MESSAGE OF oWnd TO "Datos de Gestión" CENTERED

   ACTIVATE WINDOW oWnd // MAXIMIZED



PostPosted: Thu Nov 06, 2008 9:02 am
by Antonio Linares
Carlos,

Posiblemente se pueda solucionar cambiando CP_OEMCP por CP_ACP en el código en C que he publicado

PostPosted: Thu Nov 06, 2008 9:07 am
by Carlos Mora
Hola Antonio,

gracias por el código, es evidente que no tiene nada que ver. Pero debo estar haciendo algo en algún sitio que cambien la forma en que se interpreta el charset del tooltip, pero darme cuenta de eso en un poco dificil.

Ya veré de que se trata.

Un saludo,

Carlos.

PostPosted: Thu Nov 06, 2008 9:11 am
by Carlos Mora
Antonio Linares wrote:Carlos,

Posiblemente se pueda solucionar cambiando CP_OEMCP por CP_ACP en el código en C que he publicado


Tal vez, pero no creo que ese sea el problema porque normalmente el tooltip se ve correctamente, es solo en este caso en particular, es decir que algo extraño estoy haciendo por ahí.
Sigo pensando que el problema lo tengo en otro lado y que tu función está correcta.

Se me han ocurrido un par de pruebas más, ya te comento a ver que encuentro.

Gracias por tu atención,

Carlos.

PostPosted: Thu Nov 06, 2008 9:35 am
by Carlos Mora
Otra prueba más!

En el menú principal del mismo programa uso una window+buttonbar.

Code: Select all  Expand view
    DEFINE ICON OICON RESOURCE "ATICONTA"
    DEFINE WINDOW PRINCIPAL FROM 0, 0 TO SizeY, SizeX PIXEL ;
          TITLE "ATICONTA v2.0 - Programa de contabilidad - Asesores Titulados S.A." ICON OICON COLORS 0, RGB(126,188,165)
          SET MESSAGE TO ("Asesores Titulados, S.A. atisa@atisa.es Tfno. 912054400 ") OF PRINCIPAL

       DEFINE BUTTONBAR oBar SIZE 48, 48 _3D OF PRINCIPAL  // ToolBar
       @ 0,0 BITMAP oBmp RESOURCE "ATICONTA" NOBORDER SIZE 800, 600 OF PRINCIPAL
    ACTIVATE WINDOW PRINCIPAL ON INIT MainInit( oBmp ) VALID ( FErase( cMarcaLog ), .T. )


Y luego se añaden los botones con tooltips, que están en una tabla y que se añaden según el perfil del usuario logueado. En ella los tootips salen perfectos, sin OemToAnsi ni nada raro, editados con gets comunes, o escritos directamente en el código como en el caso del boton "salir"

Image


Y en la misma aplicacion y en el mismo exe armo una ventana con lo de las rebar/toolbar, con el código que subí antes, y

Image

Bueno, eso nada más, que tiene pinta de que lo que afecta a los tooltips es muuuy raro.

Un saludo,

Carlos.

PostPosted: Thu Nov 06, 2008 10:07 am
by Antonio Linares
Carlos,

Se soluciona con el cambio que te he indicado.

Acabo de probarlo con FWH\samples\ToolBar1.prg cambiando el tooltip "New" por "Añadir" y se veía igual que en tu aplicación.

Ahora se ve bien con ese cambio :-)

PostPosted: Thu Nov 06, 2008 11:10 am
by Carlos Mora
Perfecto!

Muchas gracias!

Carlos.

PostPosted: Fri Nov 07, 2008 2:58 pm
by jose_murugosa
Carlos Mora wrote:Perfecto!

Muchas gracias!

Carlos.


He querido introducir este código y corregir el error en el ejemplo, pero no he sabido como.... :oops:

probé ponerlo con #pragma BEGINDUMP/#pragma ENDDUMP y me da errores....

Podría alguien explicarme como?

Gracias desde ya

PostPosted: Fri Nov 07, 2008 5:17 pm
by Antonio Linares
José,

Que errores te dá ?

PostPosted: Fri Nov 07, 2008 5:36 pm
by jose_murugosa
Antonio Linares wrote:José,

Que errores te dá ?

[/quote]

Código:
Code: Select all  Expand view
...codigo de toolbar1.prg modificado......

RETURN

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

#pragma BEGINDUMP

HB_FUNC( TTNSETTEXT )
{
   LPNMTTDISPINFO pti = ( LPNMTTDISPINFO ) hb_parnl( 1 );

   MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED,
                        ( LPCSTR ) hb_parc( 2 ), -1, ( LPWSTR ) pti->szText,
                        hb_parclen( 2 ) + 1 );

   pti->hinst = NULL;
   pti->lpszText = NULL;
   pti->uFlags = 0;   
}

#pragma ENDDUMP

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

Los errores son:

Error E2451 d:\prueba\prg\toolbar1.prg 143: Undefined Symbol 'LPNMTTDISPINFO' in function HB_FUN_TTNSETTEXT
Error E2379 d:\prueba\prg\toolbar1.prg 143: Statement missing ; in function HB_FUN_TTNSETTEXT
Error E2451 d:\prueba\prg\toolbar1.prg 143: Undefined symbol 'pti' in function HB_FUN_TTNSETTEXT



Gracias desde ya por tu atención

PostPosted: Fri Nov 07, 2008 5:45 pm
by Carlos Mora
José,

te falta el #include <windows.ch>!

Un saludo,

Carlos.