Aplicacions ANSI / Unicode (només projectes visuals)
Des de la
versió 1.04.0.0001
els projectes visuals
de l'Easy Code Masm
poden generar aplicacions ANSI o Unicode d'una manera molt
fàcil.
Per passar del mode ANSI a l'Unicode, només heu de
marcar/desmarcar l'opció Genera
el projecte com a Unicode (Windows NT o posterior)
a les Propietats del
projecte. Quan aquesta
opció està marcada, l'aplicació
generada serà Unicode,
altrament serà ANSI
(predeterminat).
Invoke
IsAppUnicode Invoke
SetTextA,
hWnd, TextAddr("Hola") Invoke
IsAppUnicode Invoke
IsAppUnicode
Per mantenir la compatibilitat amb totes les plataformes Windows, les
aplicacions
Unicode generades amb el mode visual de l'Easy
Code Masm seran commutades
dinàmicament
a ANSI quan s'executin en Windows 95/98/ME. D'altra banda, les
aplicacions que no es generin
com a Unicode (és a dir, que tinguin l'opció Genera
el projecte com a Unicode
desmarcada) seran sempre ANSI tot i que s'executin en Windows NT o
sistemes posteriors. En temps
d'execució, podeu saber en tot moment si
l'aplicació s'està executant com a ANSI o Unicode
cridant el mètode IsAppUnicode,
que
retorna TRUE
o FALSE
depenent de si l'aplicació s'està executant com a
Unicode o no. D'aquesta manera, podeu
preparar una aplicació per tal que funcioni correctament a
totes les versions del Windows.
Per a fer-ho, només cal que crideu les funcions i missatges
apropiats quan estiguin relacionats
amb text, i que passeu les cadenes en el format correcte.
Per tal de donar suport a aquest nou format, s'ha incorporat una nova
macro per a textos Unicode (vegeu TextAddrW).
A més, tots els
mètodes de l'Easy
Code Masm que utilitzen
cadenes de text han estat millorats afegint-hi les seves corresponents
versions ANSI i Unicode.
Per exemple, el mètode SetText
ha estat
complementat amb SetTextA
i SetTextW.
El mètode SetText
crida automàticament la versió ANSI o Unicode
depenent de la
plataforma de Windows en la que s'està executant i de si
l'aplicació ha estat generada com a Unicode o
no, mentre que SetTextA
i SetTextW
sempre criden, respectivament, la
versió ANSI i Unicode del mètode (vegeu Mètodes de
l'Easy Code Masm).
D'aquesta manera, podeu barrejar text ANSI i Unicode en una mateixa
aplicació. Tot seguit es mostra algun codi d'exemple (on
hWnd
és el "handle" de l'objecte al que es vol
assignar el text):
.If
Eax
Mov
Eax,
TextAddrW("Hola")
;Mode
Unicode
.Else
Mov
Eax,
TextAddr("Hola")
;Mode ANSI
.EndIf
Invoke
SetText,
hWnd, Eax
També podeu utilitzar cadenes ANSI tot i que siguin
aplicacions Unicode:
Si utilitzeu funcions de l'API, només cal que crideu la
funció addient i que passeu les
cadenes de text en el format correcte:
.If
Eax
Invoke
SetWindowTextW, hWnd, TextAddrW("Hola")
;Mode
Unicode
.Else
Invoke
SetWindowTextA, hWnd, TextAddr("Hola")
;Mode
ANSI
.EndIf
O també podeu escriure el codi anterior de la
següent
manera:
.If
Eax
Mov
Edx,
TextAddrW("Hola")
;Mode
Unicode
Mov
Eax,
SetWindowTextW
.Else
Mov
Edx,
TextAddr("Hola")
;Mode ANSI
Mov
Eax,
SetWindowTextA
.EndIf
Push
Edx
Push
hWnd
Call
Eax
Tingueu present que tots els mètodes de l'Easy
Code Masm que utilitzen cadenes
de text, esperen
i retornen cadenes Unicode si l'aplicació ha estat generada
com a Unicode i s'està executant en Windows
NT o posterior. Altrament, esperaran i retornaran cadenes ANSI. Per
exemple, el mètode GetText
pot tornar una cadena ANSI o Unicode
depenent d'on i com s'està executant l'aplicació,
per tant, utilitzeu el mètode IsAppUnicode
per saber sempre el format de les
cadenes de text.
Recordeu també que només les aplicacions
generades amb l'opció Genera
el projecte com a Unicode
marcada, a les Propietats
del projecte, seran Unicode
si s'estan executant en Windows NT o posterior. D'altra banda, les
aplicacions generades amb l'opció
Genera el projecte com a Unicode
desmarcada seran sempre ANSI.
AVÍS:
Com s'ha dit anteriorment, tots els
noms de fitxers i carpetes relacionats amb els projectes es tracten sempre
com a text ANSI. Quan l'Easy Code s'executa en mode Unicode
(és a dir, en
Windows NT o posterior), el quadre de diàleg per obrir i
desar
fitxers també és una
finestra Unicode. Tot i així, un cop s'ha seleccionat un
fitxer, el seu nom i
la seva ruta ("path") es converteixen sempre a ANSI per motius de
compatibilitat, per
tant, tingueu present aquesta qüestió a l'hora de
seleccionar
carpetes o posar nom als objectes i fitxers dels vostres
projectes.
OBSERVACIONS: Tot i que els noms dels projectes, les fonts, les finestres i els controls són sempre noms ANSI, els mètodes que llegeixin o escriuen aquests noms (p.e. GetFontName i SetFontName) esperen i retornen cadenes Unicode si l'aplicació s'està executant com a Unicode. D'altra banda, quan crideu el mètode Create per tal de crear una finestra, podeu passar-li el seu nom (primer paràmetre) tant amb una cadena ANSI, com amb una cadena Unicode.
IMPORTANT:
L'editor
de codi
SEMPRE
treballa en mode ANSI i SEMPRE
necessita una font ANSI d'amplada fixa ("fixed-pitch")
per tal de funcionar correctament.