Desarrollar el U32 de Authorware usando Delphi
Las funciones de la función son la característica más destacada del autor. Para algunas tareas especiales, Authorware permite a los usuarios definir funciones ellos mismos, haciendo que la programación sea más flexible. Para los sistemas de Windows, las funciones personalizadas se almacenan como archivos de la biblioteca de enlaces dinámicos (DLL), por lo que el archivo que almacena funciones personalizadas se separa del archivo de aplicación interactiva actual. Este artículo presenta cómo usar Delphi para desarrollar la función personalizada de Authorware: 32BITU32. Aunque AuthorWareattain 5.0 ha proporcionado la función de usar KnowledgeObjects para mostrar MessageBox, esta característica no existe en las versiones antes de 4.0.
El desarrollo de U32 se puede dividir en cinco pasos:
Crear archivos de proyecto
Crear una función
Crear un archivo de recursos
Compilar archivos de recursos
Crear u32
1. Crear archivos de proyecto
Seleccione DLL en el archivo/nuevo para generar un archivo DLL, agregue una unidad que contenga el código de función U32 en el archivo/addtoProject ... El usuario puede ser declarado en la función Authorware llamada. Por ejemplo:
exportsmsgbox;
El código final es el siguiente:
LibraryAuthorware;
usos
Sysutils, clases,
myunitin'myunit.pas ';
exportsmsgbox;
Comenzar
fin.
2. Cree una función
Cuando crea una función disponible en Authorware, debe declararla como función exportada y agregar el código después de la interfaz de palabras clave de la siguiente manera:
interfaz
usos, diálogos, sysutils, ventanas;
functionMsgBox (msg: string; mbtype:
Palabra; título: cadena): word; export;
Delphi32 necesita agregar {$ ifdefwin32} stdcall;
($ endif} es seguido por la declaración de función de la siguiente manera:
functionMsgBox (msg: string; mbtype:
Palabra; título: cadena): word; export;
{$ ifdefwin32} stdcall; {$ endif}
Ahora agregamos código a la función y seguimos la implementación:
estúpido
Okonly = 0;
OkCancel = 1;
Aborcerretryignore = 2;
Yesnocancel = 3;
Yesno = 4;
Retrycancel = 5;
Crítico = 16;
Pregunta = 32;
Excalamación = 48;
Información = 64;
DefaultButton1 = 0;
DefaultButton2 = 256;
DefaultButton3 = 512;
ApplicationModal = 0;
SystemModal = 4096;
functionstrToPch (str: string): pchar;
Vara: PCHAR;
Comenzar
a: = stralloc (longitud (str) +1);
Strpcopy (a, str);
Strtopch: = a;
fin;
functionMsgBox (msg: string; mbtype:
Palabra;
Varilla
LPTEXT, LPCAPTION: PCHAR;
H: hwnd;
Comenzar
lptext: = strtopch (título);
lpcaption: = strtopch (msg);
h: = getActiveWindow ();
Msgbox: = MessageBox (H, LPTEXT, LPCAPTION, MBTYPE);
fin;
3. Crear archivos de recursos
Lo último que tenemos que hacer es crear el archivo de recursos para que Authorware pueda llamar a la función directamente. Primero debe crear el archivo .rc y luego compilarlo en el archivo .res. Use el bloc de notas para crear un archivo de recursos para .rc. Agregue las siguientes definiciones: explicaré estas definiciones más adelante:
1DLL_HEADERPRELOADDISCARDABLE
COMENZAR
"Msgbox/0",
"/0"
FIN
msgboxdll_headerPreloadDiscardable
COMENZAR
"/0",
"W/0",
"SWS/0",
"Resultado: = msgbox (msg, mbtype, title)/r/n",
"/r/n",
"showMessageBox/0",
FIN
Si un archivo DLL se escribe en el formato de conversión de llamadas de autoria, el directorio de todas las funciones personalizadas almacenadas en él también se incluye en el archivo, y la información requerida por el autor al llamar a estas funciones también se incluye, y su directorio se llama fuente de directorio y cada función en la fuente del directorio tiene definiciones correspondientes, y estas definiciones se denominan fuentes de definición. El formato específico es el siguiente:
1. Fuente de directorio
El formato de la fuente del directorio es el siguiente:
| Dll_headerPreloaddiscardable
COMENZAR
"functionName [= exportname]/0",
"functionName [= exportname]/0",
….
"functionName [= exportname]/0",
"/0"
FIN
① | es el identificador de fuente de directorio;
②dll_header es la marca inicial utilizada para crear texto descriptivo;
③Begin indica el comienzo del archivo fuente del directorio.
El final indica el final de la fuente del directorio.
2. Formato de definición de función personalizada
Para cada función en la fuente del directorio, debe haber un formato de definición correspondiente, el formato específico es el siguiente:
functionNamedll_headerPreloadDiscardable
COMENZAR
"DllFileName/0"
"ReturnValue/0"
"Argumento/0"
"Descripción>",
"descripción",
…
"Descripción/0"
FIN
① El nombre de la función se refiere al nombre de la función definido en la fuente del directorio;
②DLLFileName representa el nombre del archivo DLL de la función de almacenamiento;
③ ReturnValue representa el tipo de valor de retorno de la función;
④argumentList representa la lista de tipos de parámetros en esta función;
⑤ La descripción representa el texto descriptivo de la función.
Un cuerpo descriptivo puede estar compuesto por muchas líneas, pero la última línea debe terminar con el "/0".
3. Tipo de parámetro Formato de descripción
Los tipos de parámetros están representados por una letra mayúscula, y cada letra representa un formato de parámetro, como se muestra en la siguiente tabla:
Descripción Formato Typedescribe Tipo de formato
Csignedcharpfarpointer
Bunsignedcharffloat
IsignedshortIntegerddouble
WunsignedshortIntegershandle
LsignedlongIntegervvoid
UunsignedlongInteger
4. Compilar archivos de recursos
Guardar el archivo de recursos de .rc como a3w.rc (tenga en cuenta que el nombre del archivo no se puede guardar y el nombre del archivo DLL no se puede guardar, de lo contrario, el archivo de recursos de Delphi lo sobrescribirá). y ejecutar en modo DOS:
c: /delphi32/bin/brc32-ra3w.rc-foa3w32.res
Ahora agregue el archivo de recursos al proyecto, regrese a Delphi en la vista/projcetSource para abrir el archivo del proyecto
ExportSMSGBox;
{$ R*.res}
Eliminar la línea y unirse: {$ ifdefwin32}
{$ Ra3w32.res}
{$ else}
{$ RA3W16.RES}
{$ endif}
Compilar archivos del proyecto.
5. Crea U32
Hemos creado 32 bits Authorware.dll y lo renombramos a Authorware.U32.
Msgbox ("Box de advertencia", 1+32+0+4096, "¿Sale de este sistema?")