开 发 篇
简单的开发过程。
其实用Dephi实现这个功能太简单了,只需调用它自带的Pascal函数inputbox就行,但这里还有一个问题:Authorware 取得字符串型返回值的方式是取得分配给这个字符串的的内存的句柄,所以我们必须在单元文件中声明一个Handle型变量,用于存储该字符串返回值的句柄,而且这个返回值变量必须是一个全局变量而不是局部变量,切记!1!下面是这个函数的具体实现方法:
//AW_inputboxdemo.dpr
library inputboxdemo;
interface
uses
SysUtils,
windows,
Messages,
dialogs, //以上几行手工加入吧
Classes;
Var
saveexit:pointer;//退出动态链接库的过程指针
returnhandle:Thandle;//声明字符串返回值句柄
{$R *.RES}
{$R Awresource.RES}//加载字符串资源,万不可少!
//函数实现过程
function displayinputbox( caption,tiptxt,defaulttxt:Pchar):Thandle;stdcall;
var //私有变量声明
str_return, str_caption,str_tiptxt,str_defaulttxt:string;//对应于Pchar类型的string变量
Preturnstr:Pchar;//代表返回字符串的Pchar型变量
begin
returnstrhandle:=globalalloc(GHND,255);//调用API函数给全局变量分配内存空间(255个字符,
// 够大了
P_returnstr:=globallock(returnstrhandle);//锁定内存并将值赋给P_returnstr;
str_caption:=strpas(caption); //转化Pchar参数为string参数
str_tiptxt:=strpas(tiptxt);
str_defaulttxt:=strpas(defaulttxt);
str_return:=inputbox(str_caption,str_tiptxt,str_defaulttxt);
strpcopy(p_returnstr,str_return);//转化返回值为Pchar类型
globalunlock(returnstrhandle);//内存解锁
result:=returnstrhandle;//取得返回值
end;
exports //输出函数说明
displayinputbox;
procedure freehandle;//释放内存的私有过程
begin
globalfree(returnstrhandle);
end;
procedure libexit;//动态链接库的退出处理
begin
freehandle;
exitproc:=saveexit;
end;
begin //动态链接库初始化处理
saveexit:=exitproc;
exitproc:=@libexit;
end.
好了,将它编译成inputboxdemo.dll 文件,并把它的扩展名改为.u32,启动Authorware,使用“function”功能在查找对话框中引入文件inputboxdemo.u32,看看出现了什么:
使用方法:在计算图标中输入:
username即为最终返回值.
执行情况如图所示(在IDE环境下):