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).

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):

Invoke IsAppUnicode
.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:

Invoke SetTextA, hWnd, TextAddr("Hola")


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:

Invoke IsAppUnicode
.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:

Invoke IsAppUnicode
.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.