Page 1 of 2
Problemas con tooltips en rebars/toolbars.
Posted:
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
Pero en otro programa hago algo parecido, usando el mismo FW y el mismo Harbour, y obtengo resultados diferentes
[/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.
Posted:
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
Posted:
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.
Posted:
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
Posted:
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
Posted:
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
Posted:
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.
Posted:
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.
Posted:
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"
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
Bueno, eso nada más, que tiene pinta de que lo que afecta a los tooltips es muuuy raro.
Un saludo,
Carlos.
Posted:
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
Posted:
Thu Nov 06, 2008 11:10 am
by Carlos Mora
Perfecto!
Muchas gracias!
Carlos.
Posted:
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....
probé ponerlo con #pragma BEGINDUMP/#pragma ENDDUMP y me da errores....
Podría alguien explicarme como?
Gracias desde ya
Posted:
Fri Nov 07, 2008 5:17 pm
by Antonio Linares
José,
Que errores te dá ?
Posted:
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
Posted:
Fri Nov 07, 2008 5:45 pm
by Carlos Mora
José,
te falta el #include <windows.ch>!
Un saludo,
Carlos.