Aplicaciones ANSI / Unicode (sólo proyectos visuales)
Desde la
versión 1.04.0.0001
los proyectos visuales
de Easy Code Masm
pueden generar aplicaciones ANSI o Unicode de una manera muy
fácil.
Para pasar del modo ANSI a Unicode, sólo tiene que
marcar/desmarcar la opción Generar
proyecto como Unicode (Windows NT o posterior)
en las Propiedades del
proyecto.
Cuando esta
opción está marcada, la
aplicación generada será Unicode,
contrariamente será ANSI
(predeterminado).
Para mantener la compatibilidad con todas las plataformas Windows, las
aplicaciones
Unicode generadas con el modo visual de Easy
Code Masm serán
conmutades dinámicamente
a ANSI cuando se ejecuten en Windows 95/98/ME. Por otra parte, las
aplicaciones que no se
generen como Unicode (es decir, que tengan la opción Generar
proyecto como Unicode
desmarcada) serán siempre ANSI aunque se ejecuten en Windows
NT o sistemas posteriores. Para que usted pueda saber cómo
se
está
ejecutando una aplicación, Easy Code define la constante APP_UNICODE
SÓLAMENTE si la
aplicación se está ejecutando en modo Unicode.
Si lo prefiere,
también puede llamar al método IsAppUnicode,
que devuelve TRUE
o FALSE
dependiendo de si la aplicación se está
ejecutando como Unicode
o no. De esta forma, puede preparar una aplicación
para que funcione correctamente en todas las versiones de
Windows. Para ello, sólo debe llamar a las funciones
y mensajes apropiados cuando estén relacionados con
texto, y tener en cuenta el formato de las cadenas.
AVISO: Toda esta funcionalidad solamente se aplica
a los proyectos visuales. Sin embargo, la constante APP_UNICODE
también puede
usarse en los proyectos clásicos marcando o desmarcando
esta opción.
Con el fin de dar soporte a este nuevo formato, se ha incoporado
la nueva macro para textos Unicode TextAddrW,
y desde la versión 1.05.0.0002
se incluye la
macro TextStr,
que devuelve automáticamente
el texto en formato ANSI o Unicode en función
de si la opción Generar
proyecto como Unicode
(Windows NT o posterior)
está marcada o no.
Además, todos los
métodos de Easy Code Masm que utilizan
cadenas de texto han sido mejorados agregando sus correspondientes
versiones ANSI y Unicode.
Por ejemplo, el método SetText
ha sido
complementado con SetTextA
y SetTextW.
El método SetText
llama automáticamente a la versión ANSI o Unicode
dependiendo de
la plataforma de Windows en la que se está ejecutando y de
si la aplicación ha sido generada como
Unicode o no, mientras que SetTextA
y SetTextW
siempre llaman, respectivamente, a
la versión ANSI y Unicode del método (vea Métodos
de
Easy Code Masm).
De esta manera, puede mezclar texto ANSI y Unicode en una misma
aplicación. A continuación se muestra
algún
código de ejemplo (donde hWnd
es el "handle" del objeto al que
se desea asignar el texto):
IFDEF APP_UNICODE
Mov Eax, TextAddrW("Hello") ;Modo Unicode
ELSE
Mov Eax, TextAddr("Hello") ;Modo ANSI
ENDIF
Invoke SetText, hWnd, Eax
Invoke SetTextA, hWnd, TextAddr("Hola")
Invoke IsAppUnicode
.If Eax
Invoke SetWindowTextW, hWnd, TextAddrW("Hola") ;Modo Unicode
.Else
Invoke SetWindowTextA, hWnd, TextAddr("Hola") ;Modo ANSI
.EndIf
Invoke IsAppUnicode
.If Eax
Mov Edx, TextAddrW("Hola") ;Modo Unicode
Mov Eax, SetWindowTextW
.Else
Mov Edx, TextAddr("Hola") ;Modo ANSI
Mov Eax, SetWindowTextA
.EndIf
Push Edx
Push hWnd
Call Eax
Mov Eax, TextStr("Hello")
Invoke SetText, hWnd, Eax
AVISO:
Como se ha dicho anteriormente, todos
los nombres de archivos y carpetas relacionados con los proyectos se
tratan
siempre
como texto ANSI. Cuando Easy Code se ejecuta en modo Unicode (es
decir, en Windows NT o posterior) el cuadro de diálogo
para abrir y guardar
archivos también es una ventana Unicode. Aun así,
una vez se ha seleccionado un
archivo, su nombre y su ruta ("path") se convierten siempre a
ANSI por motivos de
compatibilidad, por consiguiente, tenga presente esa
cuestión a la
hora de
seleccionar carpetas o dar nombre a los objectos y archivos de
sus proyectos.
OBSERVACIONES: Aunque los nombres de los proyectos, las fuentes, las ventanas y los controles son siempre nombres ANSI, los métodos que leen o escriben esos nombres (p.e. GetFontName y SetFontName) esperan y retornan cadenas Unicode si la aplicación se está ejecutando como Unicode. Por otra parte, cuando llame al método Create para crear una ventana, puede pasarle su nombre (primer parámetro) tanto con una cadena ANSI, como con una cadena Unicode.
IMPORTANTE:
El editor
de código
SIEMPRE
trabaja en modo ANSI y SIEMPRE
necesita una fuente ANSI de anchura fija
("fixed-pitch") para funcionar correctamente.