Buenas tardes, Maestro Ant么nio. Utilizando el c贸digo del ing. Anton Lerchster, he notado que el T脥TULO DEL DI脕LOGO no acepta los caracteres traducidos por el comando FwString(). El c贸digo modificado se muestra a continuaci贸n:
Good afternoon, Master Ant么nio. Using the code from Ing. Anton Lerchster, I've noticed that the TITLE OF THE DIALOGUE doesn't accept the characters translated by the FwString() command. Modified code below:
// C:\FWH2603\SAMPLES\SETLANG2.PRG - BCC77 y XHBBCC77 - ERROR EN EL TITULO DEL DIALOGO.
#include "FiveWin.ch"
EXTERNAL HB_LANG_PT, HB_CODEPAGE_PTISO, HB_CODEPAGE_PT850
#ifNdef __XHARBOUR__ // Somente para HARBOUR, XHARBOUR nao tem isso ainda.
REQUEST HB_CODEPAGE_UTF8
REQUEST HB_CODEPAGE_UTF8EX
#endif
STATIC oWnd, lDummy1 := .f.
function Main()
LOCAL oBar
/*
HB_LANGSELECT( 'PT' )
HB_SETCODEPAGE( "UTF8" )
HB_CDPSELECT( "UTF8EX" )
HB_SETCODEPAGE( "PT850" )
HB_CDPSELECT( "PTISO" )
*/
// FWSetLanguage( 5 ) // German
FWSetLanguage( 4 ) // Portuguese
DEFINE WINDOW oWnd TITLE FWString( "Testing Accented Characters - " ) + ;
FWString( "Attention" ) ;
MENU BuildMenu() MDI
DEFINE BUTTONBAR oBar BUTTONSIZE 70, 70 _3DLOOK TOP OF oWnd 2007
DEFINE BUTTON OF oBar PROMPT FWString( "Add" ) ACTION TestDlg() ;
FILENAME "..\bitmaps\16x16\new.bmp" FLAT
DEFINE BUTTON OF oBar PROMPT FWString( "Edit" ) ACTION TestDlg() ;
FILENAME "..\bitmaps\16x16\open.bmp" FLAT
DEFINE BUTTON OF oBar PROMPT FWString( "Search" ) ACTION TestDlg() ;
FILENAME "..\bitmaps\16x16\floppy.bmp" FLAT
DEFINE BUTTON OF oBar PROMPT FWString( "Delete" ) ACTION TestDlg() ;
FILENAME "..\bitmaps\16x16\delete.bmp" FLAT
DEFINE BUTTON OF oBar PROMPT FWString( "Setup" ) ACTION TestDlg() ;
FILENAME "..\bitmaps\16x16\open32.bmp" FLAT
DEFINE BUTTON OF oBar PROMPT FWString( "Exit" ) ACTION oWnd:End() ;
FILENAME "..\bitmaps\16x16\exit.bmp" FLAT
SET MESSAGE OF oWnd TO "ButtonBar: " + ;
FWString("Add") + " | " + FWString("Edit") + " | " + ;
FWString("Search") + " | " + FWString("Delete") + " | " + FWString("Setup") + ;
" [GetACP=" + AllTrim( Str( GetACP() ) ) + ;
" HBCDP=" + AllTrim( Str( HbCDP() ) ) + "]" 2007
ACTIVATE WINDOW oWnd MAXIMIZED ;
VALID MsgYesNo( FWString( "Want to end ?" ), FWString( "Attention" ) )
RETURN NIL
function BuildMenu()
LOCAL oMenu
MENU oMenu 2007
MENUITEM FWString( "&Test" ) // no funciona
MENU
MENUITEM FWString( "Attention" ) + " - Dialog Test" ACTION TestDlg() ;
FILENAME "..\bitmaps\16x16\info.bmp"
SEPARATOR
MENUITEM "Language &1: English" ACTION ( FWSetLanguage( 1 ), oWnd:SetMenu( BuildMenu() ), TestDlg() ) ;
FILENAME "..\bitmaps\16x16\faces.bmp"
SEPARATOR
MENUITEM "Language &2: Spanish" ACTION ( FWSetLanguage( 2 ), oWnd:SetMenu( BuildMenu() ), TestDlg() ) ;
FILENAME "..\bitmaps\edit.bmp"
SEPARATOR
MENUITEM "Language &3: French" ACTION ( FWSetLanguage( 3 ), oWnd:SetMenu( BuildMenu() ), TestDlg() ) ;
FILENAME "..\bitmaps\16x16\delete.bmp"
SEPARATOR
MENUITEM "Language &4: Portuguese" ACTION ( FWSetLanguage( 4 ), oWnd:SetMenu( BuildMenu() ), TestDlg() ) ;
FILENAME "..\bitmaps\16x16\browse.bmp"
SEPARATOR
MENUITEM "Language &5: German" ACTION ( FWSetLanguage( 5 ), oWnd:SetMenu( BuildMenu() ), TestDlg() ) ;
FILENAME "..\bitmaps\16x16\calc.bmp"
SEPARATOR
MENUITEM "Language &6: Italian" ACTION ( FWSetLanguage( 6 ), oWnd:SetMenu( BuildMenu() ), TestDlg() ) ;
FILENAME "..\bitmaps\16x16\explorer.bmp"
SEPARATOR
MENUITEM "&Exit" ACTION oWnd:End() ;
FILENAME "..\bitmaps\16x16\exit.bmp"
ENDMENU
ENDMENU
RETURN( oMenu )
STATIC FUNCTION TestDlg()
local oDlg, oSay1, oSay2, oBtn1, oBtn2, oBtn3, oBtn4, oChk1, oCbx1
local cAdd, cEdit, cSearch, cDelete, cSetup, cAttention, cPrintErr
local aLangs, nSelLang, cTitle, cAtt, cPr
cAdd := FWString( "Add" )
cEdit := FWString( "Edit" )
cSearch := FWString( "Search" )
cDelete := FWString( "Delete" )
cSetup := FWString( "Setup" )
cAttention := FWString( "Attention" )
cPrintErr := FWString( "Printing Error" )
aLangs := { FWString( "English" ), FWString( "Spanish" ), FWString( "French" ), ;
FWString( "Portuguese" ), FWString( "German" ), FWString( "Italian" ) }
nSelLang := FWSetLanguage()
// ASI, FUNCIONA EN EL BUTTON, NO COMPRENDO ??? jajajaja.
cAtt := cAttention + SPACE( 02 ) // + " Error" // ERROR IN BUTTON: Attention
// ASI, NO FUNCIONA EN EL DIALOGO DE FORMA NINGUNA.
cPr := cPrintErr + SPACE( 02 ) // Erro de impressao... con ~
// no funciona en el titulo del dialogo. ???
cTitle := "FWH: " + cAtt + " - " + cPr
// ? cTitle // Esta correcto, pero no muestra en el dialogo ?
// ? OemToansi( cAttention ) // error
// ? AnsiToOem( cAttention ) // error
// cTitle := "FWH: titulo do dialogo nao esta funcionando"
// DEFINE DIALOG oDlg TITLE cAttention + " / " + cPrintErr SIZE 520, 450
//-> TITLE CON ERROR. EN PORTUGUES.
DEFINE DIALOG oDlg TITLE cTitle SIZE 550, 450 // TRANSPARENT
oDlg:lHelpIcon := .F.
// --- SAY controls ---
@ 0.5, 1 SAY "=== SAY Controls ===" OF oDlg
@ 1.5, 1 SAY "Add: " + cAdd OF oDlg
@ 2.3, 1 SAY "Edit: " + cEdit OF oDlg
@ 3.1, 1 SAY "Search: " + cSearch OF oDlg
@ 3.9, 1 SAY "Delete: " + cDelete OF oDlg
@ 4.7, 1 SAY "Setup: " + cSetup OF oDlg
@ 5.5, 1 SAY oSay1 PROMPT "Attention: " + cAttention OF oDlg
@ 6.3, 1 SAY oSay2 PROMPT "Print Error: " + cPrintErr OF oDlg
// --- BUTTON controls ---
@ 0.5, 16 SAY "=== BUTTON Controls ===" OF oDlg
@ 1.5, 16 BUTTON oBtn1 PROMPT cAdd OF oDlg SIZE 50, 12 ACTION MsgInfo( cAdd )
@ 3.0, 16 BUTTON oBtn2 PROMPT cEdit OF oDlg SIZE 50, 12 ACTION MsgInfo( cEdit )
@ 4.5, 16 BUTTON oBtn3 PROMPT cSearch OF oDlg SIZE 50, 12 ACTION MsgInfo( cSearch )
// --- More buttons with accented text ---
@ 0.5, 26 SAY "=== More Buttons ===" OF oDlg
// AQUI, TAMBIEN MUESTRA cAttention CON ERROR EN PORTUGUES. CON SPACE(02), FUNCIONA.
// @ 1.5, 26 BUTTON cAttention OF oDlg SIZE 50, 12 ACTION MsgInfo( cAttention )
@ 1.5, 26 BUTTON cAtt OF oDlg SIZE 50, 12 ACTION MsgInfo( cAttention )
@ 3.0, 26 BUTTON cPrintErr OF oDlg SIZE 50, 12 ACTION MsgInfo( cPrintErr )
@ 4.5, 26 BUTTON oBtn4 PROMPT cDelete OF oDlg SIZE 50, 12 ACTION MsgInfo( cDelete )
// --- CHECKBOX controls ---
@ 7.5, 1 SAY "=== CHECKBOX ===" OF oDlg
@ 9.5, 1.5 CHECKBOX oChk1 VAR lDummy1 PROMPT cAdd OF oDlg SIZE 50, 12
// --- COMBOBOX control ---
@ 7.5, 16 SAY "=== COMBOBOX ===" OF oDlg
@ 9.5, 16 COMBOBOX oCbx1 VAR nSelLang ITEMS aLangs OF oDlg SIZE 120, 150
// --- Debug info ---
@ 10.5, 1 SAY "=== Debug Info ===" OF oDlg
@ 11.3, 1 SAY 'Add="' + cAdd + '" hex=' + StrToHex( cAdd ) OF oDlg
@ 12.1, 1 SAY 'Attention="' + cAttention + '" hex=' + StrToHex( cAttention ) OF oDlg
@ 12.9, 1 SAY "GetACP()=" + AllTrim( Str( GetACP() ) ) + ;
" GetOEMCP()=" + AllTrim( Str( GetOEMCP() ) ) + ;
" HbCDP=" + AllTrim( Str( HbCDP() ) ) OF oDlg
// Show IsWindowUnicode info after dialog is created
@ 14.2, 1 BUTTON "&Diagnose" OF oDlg SIZE 50, 13 ;
ACTION DiagnoseControls( oDlg, oSay1, oBtn1, oChk1, oCbx1 )
@ 14.2, 15 BUTTON "&Ok" OF oDlg SIZE 45, 13 ACTION oDlg:End()
@ 14.2, 26 BUTTON "&Cancel" OF oDlg SIZE 45, 13 ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT DiagnoseControls( oDlg, oSay1, oBtn1, oChk1, oCbx1 )
return nil
static function DiagnoseControls( oDlg, oSay, oBtn, oChk, oCbx )
local cInfo := ""
cInfo += "Dialog hWnd Unicode: " + cYesNo( IsWindowUnicode( oDlg:hWnd ) ) + CRLF
if oSay != nil
cInfo += "SAY hWnd Unicode: " + cYesNo( IsWindowUnicode( oSay:hWnd ) ) + ;
" lUnicode=" + cYesNo( oSay:lUnicode ) + CRLF
endif
if oBtn != nil
cInfo += "BUTTON hWnd Unicode: " + cYesNo( IsWindowUnicode( oBtn:hWnd ) ) + ;
" lUnicode=" + cYesNo( oBtn:lUnicode ) + CRLF
endif
if oChk != nil
cInfo += "CHECKBOX hWnd Unicode: " + cYesNo( IsWindowUnicode( oChk:hWnd ) ) + ;
" lUnicode=" + cYesNo( oChk:lUnicode ) + CRLF
endif
if oCbx != nil
cInfo += "COMBOBOX hWnd Unicode: " + cYesNo( IsWindowUnicode( oCbx:hWnd ) ) + ;
" lUnicode=" + cYesNo( oCbx:lUnicode ) + CRLF
endif
cInfo += CRLF
cInfo += "GetACP() = " + AllTrim( Str( GetACP() ) ) + CRLF
cInfo += "GetOEMCP() = " + AllTrim( Str( GetOEMCP() ) ) + CRLF
cInfo += "HbCDP() = " + AllTrim( Str( HbCDP() ) ) + CRLF
cInfo += "FW_SetUnicode() = " + cYesNo( FW_SetUnicode() ) + CRLF
cInfo += CRLF
cInfo += "FWString('Add') = " + FWString("Add") + " hex=" + StrToHex( FWString("Add") ) + CRLF
cInfo += "FWString('Attention') = " + FWString("Attention") + " hex=" + StrToHex( FWString("Attention") ) + CRLF
cInfo += "FWString('Printing Err') = " + FWString("Printing Error") + " hex=" + StrToHex( FWString("Printing Error") )
MsgInfo( cInfo, "Diagnostic Info" )
return nil
static function cYesNo( l )
return If( l, "YES", "NO" )
static function StrToHex( cStr )
local n, cHex := ""
for n := 1 to Min( Len( cStr ), 20 )
cHex += PadL( hb_NumToHex( Asc( SubStr( cStr, n, 1 ) ) ), 2, "0" )
if n < Min( Len( cStr ), 20 )
cHex += " "
endif
next
return cHex
// FIN / END
Regards, saludos.