L'Editor de Recursos (tots els projectes)

Text escrit per P. Eugene Brennick (traducció de Ramon Sala)


Disponible a través del menú Projecte->Afegeix un Recurs

Quan cal proveir un mètode que generi fàcilment els recursos d'un projecte, que sigui ràpid i gens complicat, i que s'encarregui d'estalviar-nos tot el codi que això suposa, és quan cal un bon Generador Visual de Recursos. L'Editor de Recursos de l'Easy Code ha estat dissenyat per tal de fer precisament això. Gairebé podeu asseure-us i veure com els projectes es fan sols mentre es generen sense esforç una finestra darrere l'altra.

Si mai algú hagués escrit un programa anomenat L'Anatomia d'un Programa, haurieu pogut veure en ell que hi ha certs requisits previs que porten a crear un programa. Heu de tenir una idea que neix d'una necessitat i que mostra els elements que es necessitaran al projecte. Comenceu a pensar com voleu que funcioni el vostre programa, en totes les finestres i quadres de diàleg que necessitareu, i també en fer una llista de totes les eines que li caldran a cadascuna d'elles. Heu de pendre-us el temps de pensar en el flux del programa i anotar quins recursos hi estaran involucrats. En aquest punt, heu de començar a crear totes les finestres i/o quadres de diàleg que caldran al projecte. Això pot suposar incloure piles de recursos de la Caixa d'eines. Si aquesta caixa no està visible, feu clic al menú Visualitza, Caixa d'eines. Coses com Botons, Quadres de verificació, Botons de opció, Quadres de text, Etiquetes, Imatges, Barres de desplaçament, Vistes de llista i d'arbre, són necessàries per ajudar-vos a portar la vostra idea a la realitat.

No patiu per fer-ne més del compte perquè, si alguns no s'utilitzen, es poden suprimir fàcilment. Recordeu una màxima del programador, "La creativitat ve d'un conflicte d'idees". Un cop hagiu creat tots els vostres recursos, tot el que us cal fer es escriure el codi que enllaci tot el projecte. Una bona prestació de l'Easy Code és l'habilitat de provar els quadres de diàleg tal com es van fent.

Us animo a que feu una còpia de la carpeta "Examples" en un fitxer zip i llavors carregueu els diversos projectes que conté per tal d'utilitzar-los o simplement veure'ls. Feu-hi tots els canvis que vulgueu i després genereu el projecte i observeu-ne el resultat. Si el projecte genera errors, examineu els vostres canvis per tal de veure què els produeix. En la meva opinió aquesta és la millor manera d'aprendre a programar en llenguatge assemblador. Recordeu també que tots els projectes d'exemple són "freeware" pel vostre ús i per aprendre d'ells.

Per tal que tot funcionés eficientment i fos compatible amb versions anteriors, vaig haver de fer alguns canvis als fitxers de projecte. Aquests canvis es descriuen tot seguit:

1 - El format del fitxer de projecte ha canviat

El format del fitxer de projecte ha canviat per tal de donar suport al nou Editor de Recursos. Ara, s'afegeix un nou fitxer (amb l'extensió ecr) per tal de desar els recursos. La compatibilitat s'ha mantingut, per tant podeu carregar amb seguretat projectes fets amb versions anteriors de l'Easy Code sense errors. Quan deseu un projecte antic, serà desat en el nou format. L'Easy Code s'encarrega del manteniment de les carpetes, que vol dir que si algun fitxer en particular ara és superflu, serà esborrat. Aquesta novetat no inclou els fitxers RES externs, que no es toquen per res perquè sou vosaltres qui té tot el control sobre ells, però us recomanaria que arribessiu al punt d'aconseguir que tots els recursos, particularment de projectes visuals, fossin creats amb l'Easy Code (vegeu Importació de fitxers de recursos).

2 - Editor complet de Recursos (disponible a tots els projectes)

Disponible a través del menú: Projecte-->Afegeix un Recurs... o des del node Recursos de l'Explorador del projecte a través del menú contextual. Podeu triar un dels següents recursos:

- Accelerador afegeix una nova taula d'acceleradors. Us animo a utilitzar aquesta prestació. Funcions com Retallar, Copiar, Enganxar, Desfer, Refer, etc. sovint es porten a terme més fàcilment utilitzant les tecles adients (especialment si esteu acostumats a utilitzar-les). Recordeu també que haurieu de programar pensant en que el vostre programa pot ser utilitzat pel màxim nombre de gent possible. Només perquè vosaltres potser no feu servir les tecles Control, penseu que hi ha molts altres usuaris que sí que ho fan gairebé sense pensar, i un bon programador també ha de contemplar les seves necessitats.

- Diàleg afegeix una nou quadre de diàleg ("dialog box"), només disponible als projectes clàssics perquè els projectes visuals ja tenen el seu propi objecte DialogBox. Els quadres de diàleg són indispensables. Són la principal manera d'obtenir informació de l'usuari en diferents etapes del programa. Afegiu tots els Botons, Quadres de verificació, Botons de opció, Quadres de text, Etiquetes, Imatges, Barres de desplaçament, Vistes de llista i d'arbre que calguin. Personalment, considero que aquesta és una part amena del disseny d'una aplicació. Aquí és on podeu anar bellugant els controls amb el mètode de fer ‘clic i arrosegar’ fins a aconseguir l'aparença correcta de la vostra aplicació. Una cosa que m'agrada, per exemple, és que quan has afegit quatre botons al quadre de diàleg, i els vols perfectament aliniats a l'esquerra, pot ser força difícil saber on es mou l'extrem esquerre dels botons per tal que quedin exactament al mateix lloc. Tot el que cal fer és utilitzar la barra d'eines del quadre de diàleg, on hi ha diversos botons per igualar diferents aspectes dels controls, o també fer clic a cada botó per tal d'obtenir el focus. Llavors aneu a la Finestra de Propietats, trobeu la línia que diu 'Left' i canvieu el seu valor. Després, feu clic damunt de cadascun de la resta de botons i efectueu el mateix canvi. És tan fàcil com això! Vegeu les altres línies a la Finestra de Propietats, hi ha molts paràmetres per ajustar o modificar! Finalment, recordeu que els objectes Dialog poden tenir un nom de classe (propietat (ClassName). Si és així, la classe ha de ser registrada abans de crear el quadre de diàleg. Altrament, la creació fallarà i mai no podrà ser vista

- Imatge afegeix una nova imatge: Icona, Cursor o Mapa de bits (Bitmap). Les Icones es poden utilitzar per diferents propòsits. Poden aparèixer a la Barra de títol, als Menús i assignar-se a una drecera, només per anomenar-ne alguns. També són interessants de posar a les finestres 'Quant a' ("About"). Els Cursors són útils per tal d'informar a l'usuari d'una qüestió en particular, com ara, una cadena de text que apunta a un enllaç web o a una adreça de correu electrònic (vegeu també La icona de l'aplicació).

- Menú afegeix un nou menú. En aquest punt, penseu en totes les operacions que ha de fer la vostra aplicació, perquè haurieu de posar un ítem de menú per cadascuna d'elles. Cada quadre de diàleg que hagi estat creat ha de tenir també un ítem de menú que el faci aparèixer. Recordeu els comentaris sobre les tecles de Control per a certes funcions? Doncs aquí és on es fan clares. Cada ítem de menú pot tenir dues versions de 'tecles ràpides', que són ALT i CTRL.

Les tecles ALT es declaren posant un ampersand (&) just abans de la lletra que ha de portar a terme l'acció. Per exemple, si voleu activar el menú Fitxer prement ALT+F, el text per l'ítem de menú corresponent ha de ser &Fitxer. Si vulguessiu que fos ALT+I, el text hauria de ser, F&itxer, etc. Recordeu, quan treballeu amb submenús, que si teniu diferents ítems al mateix submenú que portin a terme una acció utilitzant la mateixa lletra, cap d'ells funcionarà. Per exemple, no heu de permetre aquests dos textos en el mateix submenú, &Desar Fitxer, &Desar Configuració. En lloc d'això, assigneu una lletra diferent a un dels dos textos. Les declaracions de la tecla ALT (jo en dic promocions perquè, des del moment en que la tecla està relacionada amb una funció, ha estat promoguda) no diferencien entre majúscules i minúscules.

Les tecles CTRL també s'utilitzen als textos dels ítems de menú, però de la següent manera: "Selecciona-ho &Tot\tCtrl+T". Com podeu veure, atorgueu una promoció a la tecla CTRL amb aquesta seqüència, "\t". És MOLT important notar dues coses:

- 1. Les promocions de la tecla ALT estan limitades a un submenú específic. &Fitxer i F&ormat, &Fitxer són ambdues vàlides. Les promocions de la tecla CTRL són declaracions globals dins de tot el sistema de menú. Per exemple, si esteu utilitzant "Selecciona-ho &Tot\tCtrl+T", CTRL+T no s'ha d'utilitzar enlloc més.

- 2. Recordeu que hi ha tecles CTRL promocionades inherentment pel sistema. Aquestes declaracions s'han de considerar com a reservades i NO s'han d'utilitzar enlloc. Exemples d'aquestes tecles són CTRL seguida de qualsevol de les següents lletres, A, C, U, V, X, Y i Z, més F1, TAB, ESC i DEL.

Les declaracions de la tecla CTRL (jo en dic promocions perquè, des del moment en que la tecla està relacionada amb una funció, ha estat promocionada) no diferencien entre majúscules i minúscules. Per exemple, les lletres ‘c’ i ‘C’ són la mateixa.

- Dades binàries afegeix dades binàries ("Raw data"), tant si són valors sols com un fitxer sencer. Aquesta part es pot utilitzar per emmagatzemar blocs de dades, típicament en hexadecimal. Les icones i gràfics de mapes de bits es poden inserir en un fitxer de recursos utilitzant aquesta habilitat.

- Cadena afegeix una nova cadena de text. Aquí és on podeu declarar, per exemple, les descripcions per a les tecles promogudes, o també els missatges d'error i d'ajuda. Un exemple: una descripció de COPIAR (CTRL+C) seria " "IDM_COPIAR" "&Copiar" ". Un altre exemple, aquesta vegada de missatge d'ajuda, " "IDS_DESFER" "Per desfer l'últim canvi, premeu CTRL+Z" ".

- Versió afegeix un recurs de versió (només un). Es pot eliminar si no voleu que el vostre .exe o .dll finals tinguin versió, però si en tenen, quan feu clic amb el botó dret sobre el fitxer EXE o DLL generat per la vostra aplicació, i seleccioneu Propietats i la pàgina Versió; podreu veure certa informació específica que hagiu declarat aquí. És una manera bonica de revelar l'autoria, etc. als vostres usuaris.

Cada recurs ha de tenir un ID únic, habitualment tot en majúscules, i no ser cap de les paraules reservades. Les paraules reservades són aquelles que formen part de la sintaxi del Masm, els noms dels registres del processador, les constants i variables del Windows, o els ID's reservats de l'Easy Code (per exemple, IDR_VERSION o RT_FILEDATA). La llista de les paraules reservades de l'Easy Code ha estat generada com un projecte d'exemple (carpeta Examples), per tal de matar dos pardals d'un tret.

El recurs Versió sempre té el nom constant IDR_VERSION, que val 1. Només és permès un recurs versió en una aplicació, i podeu eliminar-lo si no voleu que el vostre EXE o DLL finals tinguin versió.

El recurs Quadre de Diàleg no es troba disponible als projectes visuals, per què tenen el seu propi diàleg, l'objecte DialogBox, que és més complet.

Pels recursos Accelerador, Imatge, Dades binàries i Cadena, heu d'especificar un ID (p.e. IDS_STRING) i un valor o dades per aquest ID (una cadena de text per Cadena, un fitxer d'imatge per Imatge, etc.).

Quan es defineixen Dades binàries, podeu indicar dos tipus diferents de dades:

- Un nom de fitxer que existeixi (i que ha de ser al directori RES). Aquest fitxer serà inclòs al .EXE o .DLL finals com un recurs.

- Un valor o valors consecutius, cadascun d'ells separat per una coma.

Notes:

- Quan s'especifiqui un nom de fitxer, el fitxer corresponent ha de ser al directori RES.

- Quan s'especifiquin valors, han d'estar en un dels següents formats vàlids:

L"Aquí tenim una cadena Unicode\0" // Una cadena Unicode (explícitament "null-terminated")
"Aquí tenim una cadena ANSI\0"     // Una cadena ANSI (explícitament "null-terminated")
1024                               // Un valor enter
0x029a                             // Un valor enter Hexadecimal
0o733                              // Un valor enter octal
"\07"                              // Un valor de Byte (8 bits)

Exemples:

2048            // Un valor enter (16-bits)
1,2,3,4         // Quatre valors enters (16 bits)
"1","2","3","4" // Quatre valors Byte (8 bits) (valors ASCII: 49, 50, 51 i 52)
"\r"            // Un caràcter de control (8-bits) corresponent al codi ASCII 13 (<Retorn de Carro>)

Noteu que qualsevol valor numèric (en notació decimal, hexadecimal o octal) és sempre un enter de 16-bits (valor DW en assemblador).

IMPORTANT: Sóu responsables d'especificar els valors en qualsevol dels formats vàlids de Dades binàries explicats més amunt, per tal d'evitar errors a l'hora de compilar (per a més informació, vegeu la sentència RCDATA al fitxer d'ajuda del GoRC o de l'RC). No oblideu les cometes dobles quan calguin, i la coma quan s'especifiqui més d'un valor. D'altra banda, quan es tracti d'una cadena de text com a Dades binàries, tingueu en compte que és una cadena ANSI (si no és que està precedida de la macro 'L') i NO és "null-terminated", per tant heu d'afegir explícitament el zero final si cal. Això no és necessari pels recursos Cadena, per què sempre són cadenes de text Unicode "null-terminated".

Quan necessiteu carregar un recurs de Dades binàries en alguna part del codi, primer cal que el localitzeu (funció de l'API: FindResource). L'últim paràmetre de FindResource és el tipus de recurs que cal trobar. Aquest tipus ha de ser RT_RCDATA per dades enteres, o RT_FILEDATA si es tracta d'un fitxer (RT_FILEDATA està definida internament per l'Easy Code com a 256 i no forma part del sistema operatiu Windows).

- Per tal de desar tots els recursos, l'Easy Code crea un nou fitxer en el projecte, amb l'extensió ECR (els projectes de versions antigues de l'Easy Code seran convertits sense errors i desats en aquest nou format). La primera vegada que deseu un projecte, es suggereix que el fitxer de recursos (.ecr) tingui el mateix nom que el projecte (per exemple. Projecte.ecr) però podeu anomenar-lo d'una altra manera en aquell moment.

- Finalment, quan genereu el projecte, un fitxer.rc complet (amb el mateix nom que el projecte més l'extensió .rc) i el seu corresponent fitxer .h (un fitxer de capçalera) seran generats al directori del projecte. Tots dos fitxers es tornen a generar cada vegada que es compila una finestra o un mòdul.

3 - Els recursos de l'Easy Code són ignorats quan s'afegeix un fitxer de recursos externs (*.RES)

Només es pot enllaçar un fitxer de recursos a una aplicació. Com que tots els recursos ara ja poden ser creats per l'Easy Code, si afegiu un fitxer extern de recursos (*.RES) al projecte, l'Easy Code suposarà que ja teniu tots els recursos necessaris dins del fitxer extern afegit i, per tant serà aquest últim el que serà enllaçat ("link") a l'aplicació. En aquest cas, els recursos generats per l'Easy Code (si en té algun) seran ignorats. D'altra banda, quan no s'afegeix cap fitxer extern de recursos, l'Easy Code enllaçarà els seus (si en té algun) a l'aplicació.

4 - L'Easy Code genera un fitxer RC i el seu corresponent fitxer de capçalera (*.H)

A l'hora de compilar, es generarà un fitxer RC, amb tots els recursos de l'Easy Code, al directori del projecte.

Finalment, gràcies per dedicar temps a avaluar el meu IDE. Ha estat fet específicament pel vostre ús i entreteniment. Si desitgeu formar part d'aquest projecte, podeu oferir el codi font que vulgueu per tal d'incorporar-vos a un creixent llistat d'exemples del nostre Equip d'avaluació de Recursos. Tots ells són tractas igualment i només s'avaluen en termes de funcionalitat (per exemple: funcionen?) i ètica d'utilització (per exemple: no cal que envieu res que tingui a veure amb el "cracking" o "hacking", ja en tenim prou!).

OBSERVACIONS: Aquesta prestació no està disponible a les llibreries estàtiques (projectes (lib) per què no poden tenir recursos.

IMPORTANT: Si escriviu qualsevol text a la propietat ClassName d'un quadre de diàleg, l'Easy Code entendrà que es tracta del nom de classe i així ho escriurà al fitxer de definició de recursos .RC. Si es tracta d'un número, significarà un enter de 16 bits sense signe que identifica la classe. Altrament, significarà directament el nom d'una classe. A l'hora de mostrar aquest quadre de diàleg, la seva classe ha d'estar registrada (o ha de ser una de les classes predefinides del Windows) per tal que la finestra pugui ser creada. Si no heu de registrar la classe, simplement deixeu la propietat ClassName en blanc (valor per defecte) per tal d'evitar errors. Per a més informació, vegeu la sentència CLASS al fitxer d'ajuda de l'RC o el GoRC

Recordeu que només es pot enllaçar un fitxer de recursos a l'aplicació. Per tant, si afegiu un fitxer extern *.res, els recursos fets per l'Easy Code seran ignorats.