OpenForcal扩展动态库之一:FcWin.dll V1.0
FcWin.dll在加载时,会自动打开FcWin窗口。若窗口被关闭,使用FcWin[]函数可以重新打开窗口。
该动态库中定义了以下几个函数:
1)、 打开窗口函数(实数函数):FcWin[];
2)、 清除输出窗口的内容(实数函数):clear[];
3)、 字符串输出函数(实数函数):str["aaaa"];
该函数可能返回如下运行错误:1、指定的字符串不存在。
4)、 换行函数(实数函数):endl[];
5)、 数值输出函数:out[x];
该函数输出一个数值并返回该值。可以用流程控制该函数进行数值输出。
6)、 将一个实数数组的值输出到窗口(实数函数):outarray(i);
可以在窗口中直接进行表达式计算、函数查询(查询扩展动态库中的函数,多个关键字之间用空格分隔)和执行命令等。
用户可以通过动态库说明文件添加各种菜单命令。以#COMMAND:开头的动态库说明文件将作为一个弹出式菜单添加到FcWin的主菜单中,文件格式如下:
#COMMAND:该行内容将被添加到命令菜单
<命令1
//以下表达式被作为命令1被执行;
1+2;
str["命令1执行完毕!"];
>
<命令2
//以下表达式被作为命令2被执行;
2+3;
str["命令2执行完毕!"];
>
当FcWin第一次启动或者重新加载了动态库说明文件时,需要执行“重载所有命令”以重新加载所有命令菜单。
OpenForcal扩展动态库之二:FcFunWin.dll V1.1
FcFunWin.dll是OpenForcal的窗口界面,用户可在窗口中自定义多个控件,为计算提供了方便。目前可以使用的控件有编辑框、静态文本、普通按钮、单选按钮、复选框、组框等。
该动态库中定义了以下几个函数:
1)、
函数窗口生成函数(实数函数):FcFunWin[...];
以下将专门介绍该函数的用途。
2)、 消息框函数(实数函数):MessageBox["消息框中显示的字符串","作为标题的字符串"];
该函数可能返回如下运行错误:1、指定的字符串不存在。
3)、 交换字符串函数(实数函数):strex["aaaa","bb"];
交换两个字符串地址的内容。执行了该函数后,原字符串"aaaa"所在地址中的内容将成为"bb",原字符串"bb"所在地址中的内容将成为"aaaa"。
该函数可能返回如下运行错误:1、指定的字符串不存在。
4)、 复制字符串函数(实数函数):strcpy["aaaa","bb"];
将字符串"bb"地址中的内容复制到字符串"aaaa"的地址中。
该函数可能返回如下运行错误:1、指定的字符串不存在;2、内存分配错误。
5)、 清除输出窗口函数(实数函数):ClearFcFunWin[];
清除当前有效的编辑框输出窗口的内容。
6)、
设置指定的编辑框窗口的内容(实数函数):SetEditText("编辑框名称","内容");
如果指定的编辑框"编辑框名称"存在,将该编辑框的内容替换为"内容"。
该函数可能返回如下运行错误:1、指定的字符串不存在。
7)、将当前命令字符串传送到指定的编辑框(实数函数):SetCodeToEdit("编辑框名称");
如果指定的编辑框"编辑框名称"存在,用当前命令字符串替换该编辑框的内容。该函数用于编程调试。
该函数可能返回如下运行错误:1、指定的字符串不存在。
8)、部分数组元素赋值函数(实数函数):SetPartArray(array,begin,end,x1,x2,...xn);
将x1,x2,...xn按顺序传送到实数数组array的begin
~ end地址中。
该函数可能返回如下运行错误:1、参数不匹配;2、数组元素地址begin或end错误;3、指定的数组array不存在。
9)、数组元素连续赋值初始化函数(实数函数):ContinueSetArrayIni(k,i);
设置连续赋值的数组为k,从第i个元素开始赋值。通常该函数返回0。
若k<0,该函数返回当前进行连续赋值的数组序号。
若k>=0但i<0,该函数返回当前数组已经赋值的元素个数。
10)、数组元素连续赋值函数(实数函数):ContinueSetArray(x1,x2,... ...);
将数值x1,x2,... ...在当前数组中连续存放。
该函数可能返回如下运行错误:1、指定的数组不存在;2、数组元素个数不够。
以下是FcFunWin[]函数的详细介绍:
每次调用FcFunWin[...]函数将会打开一个窗口,可以在窗口中放置多个预定义的控件,当用户选择了该控件时,可以执行相应的预定义的操作。我们通过例子说明FcFunWin[]函数的使用:
//将控件ID定义为常量:1、普通按钮;2、单选按钮;3、复选框;4、组框;5、编辑框;6、静态文本。
const:BUTTON=1,RADIOBUTTON=2,CHECKBOX=3,GROUPBOX=4,EDIT=5,STATIC=6;
//将字符串"DoStr"定义为公用字符串;
"char"()=strex //交换字符串,请参考strex[]的说明;
{"DoStr",
"
(*计算时清屏*)clearFcFunWin[]; //在单击普通按钮时(*...*)中的字符串将被替换为指定的文本;
(*表达式*);
(*MB*);
"
};
//在FcFunWin[...]函数中定义各类控件及操作;
FcFunWin{"例子",0,0,500,500,//窗口名称为"例子",0,0,500,500定义了该窗口的大小;
//静态文本控件定义,控件标题是"表达式:",10,10,70,20是该控件在窗口中的相对位置;
STATIC,"表达式:",10,10,70,20,
//编辑框控件定义,该编辑框的名称为"表达式",1表示是多行编辑框,若该项为-1则表示是单行编辑框;
//80,10,380,100是该控件在窗口中的相对位置,最后的字符串""用于设置初始化文本;
//在单击普通按钮时将用编辑框中的文本替换指定字符串中的子串(*表达式*);
EDIT,"表达式",1,80,10,380,100,"",
//组框控件定义,控件标题是"组框",10,120,90,60是该控件在窗口中的相对位置;
GROUPBOX,"组框",10,120,90,60,
//单选按钮控件定义,控件标题是"消息框1",15,135,80,20是该控件在窗口中的相对位置;
//"MB"表示是同一组单选按钮(只要该位置有相同的字符串,就属于同一组单选按钮,用户只能选择其中的一个);
//最后一个字符串"..."定义了按钮被选择后将被替换的文本;
//在单击普通按钮时,若选择了"消息框1",则用"MessageBox(\"aaa\",\"消息框1\")"替换指定字符串中的子串 (*MB*);
//在单击普通按钮时,若选择了"消息框2",则用"MessageBox(\"bbb\",\"消息框2\")"替换指定字符串中的子串 (*MB*);
RADIOBUTTON,"消息框1",15,135,80,20,"MB","MessageBox(\"aaa\",\"消息框1\")",
RADIOBUTTON,"消息框2",15,155,80,20,"MB","MessageBox(\"bbb\",\"消息框2\")",
//复选框控件定义,控件标题是"计算时清屏",120,135,100,20是该控件在窗口中的相对位置;
//在单击普通按钮时,若设置了选中标志,则用""替换指定字符串中的子串 (*计算时清屏*);
//在单击普通按钮时,若没有设置选中标志,则用"//"替换指定字符串中的子串 (*计算时清屏*);
//-1表示初始化时不设置选中标志,若为1则表示初始化时设置选中标志;
CHECKBOX,"计算时清屏",120,135,100,20,"","//",-1,
//普通按钮控件定义,控件标题是"计算",400,290,50,25是该控件在窗口中的相对位置;
//在单击该按钮时,先对字符串@"DoStr"中的子串(*...*)进行相应地替换,具体替换行为如前所述;
//对字符串@"DoStr"处理完所有的控件替换后,编译计算该字符串中的表达式,将结果输出到编辑框"结果输出2:";
//注意字符串"DoStr"中的内容在前面进行了定义,@"DoStr"表示取字符串"DoStr"的地址;
BUTTON,"计算",400,290,50,25,@"DoStr","结果输出2:",
STATIC,"结果输出1:",10,260,100,20,
EDIT,"结果输出1:",-1,120,260,330,20,"aaaaaa",
STATIC,"结果输出2:",10,290,100,20,
EDIT,"结果输出2:",1,10,320,450,130,""
}
可在任何一个加载使用OpenForcal.dll正式版的程序中运行以上代码,请输入 SetEditText("结果输出1:","结果输出到了这里!"); 后观察程序运行情况。
在共享版中,可以使用一个数组给FcFunWin[]函数传递参数,格式如下:
FcFunWin[n,array];
其中array表示数组,数组中预先按顺序存放所有的控件定义,n为有效的数组元素个数-1。
下面我们用这种方法重新实现上面的程序(注意这些代码与前面的代码有什么不同),您仍然可以输入
SetEditText("结果输出1:","结果输出到了这里!");
观察程序运行情况:
//将控件ID定义为常量:1、普通按钮;2、单选按钮;3、复选框;4、组框;5、编辑框;6、静态文本。
const:BUTTON=1,RADIOBUTTON=2,CHECKBOX=3,GROUPBOX=4,EDIT=5,STATIC=6;
//将字符串"DoStr"定义为公用字符串;
"char"()=strex //交换字符串,请参考strex[]的说明;
{"DoStr",
"
(*计算时清屏*)clearFcFunWin[]; //在单击普通按钮时(*...*)中的字符串将被替换为指定的文本;
(*表达式*);
(*MB*);
"
};
const: array=0,n=100; //数组常量定义;
NewDoubleArrays[1]; //申请一个实数数组;
NewDoubleArray[array,n]; //第array个数组元素个数为n个,添加的控件越多,n越大;
ContinueSetArrayIni[array,0]; //从数组array的第0个元素开始存放数值;
//以下用ContinueSetArray[...]函数定义各类控件及操作:
//窗口名称为"例子",0,0,500,500定义了该窗口的大小;
ContinueSetArray["例子",0,0,500,500];
//静态文本控件定义,控件标题是"表达式:",10,10,70,20是该控件在窗口中的相对位置;
ContinueSetArray[STATIC,"表达式:",10,10,70,20];
//编辑框控件定义,该编辑框的名称为"表达式",1表示是多行编辑框,若该项为-1则表示是单行编辑框;
//80,10,380,100是该控件在窗口中的相对位置,最后的字符串""用于设置初始化文本;
//在单击普通按钮时将用编辑框中的文本替换指定字符串中的子串(*表达式*);
ContinueSetArray[EDIT,"表达式",1,80,10,380,100,""];
//组框控件定义,控件标题是"组框",10,120,90,60是该控件在窗口中的相对位置;
ContinueSetArray[GROUPBOX,"组框",10,120,90,60];
//单选按钮控件定义,控件标题是"消息框1",15,135,80,20是该控件在窗口中的相对位置;
//"MB"表示是同一组单选按钮(只要该位置有相同的字符串,就属于同一组单选按钮,用户只能选择其中的一个);
//最后一个字符串"..."定义了按钮被选择后将被替换的文本;
//在单击普通按钮时,若选择了"消息框1",则用"MessageBox(\"aaa\",\"消息框1\")"替换指定字符串中的子串 (*MB*);
//在单击普通按钮时,若选择了"消息框2",则用"MessageBox(\"bbb\",\"消息框2\")"替换指定字符串中的子串 (*MB*);
ContinueSetArray[RADIOBUTTON,"消息框1",15,135,80,20,"MB","MessageBox(\"aaa\",\"消息框1\")"];
ContinueSetArray[RADIOBUTTON,"消息框2",15,155,80,20,"MB","MessageBox(\"bbb\",\"消息框2\")"];
//复选框控件定义,控件标题是"计算时清屏",120,135,100,20是该控件在窗口中的相对位置;
//在单击普通按钮时,若设置了选中标志,则用""替换指定字符串中的子串 (*计算时清屏*);
//在单击普通按钮时,若没有设置选中标志,则用"//"替换指定字符串中的子串 (*计算时清屏*);
//-1表示初始化时不设置选中标志,若为1则表示初始化时设置选中标志;
ContinueSetArray[CHECKBOX,"计算时清屏",120,135,100,20,"","//",-1];
//普通按钮控件定义,控件标题是"计算",400,290,50,25是该控件在窗口中的相对位置;
//在单击该按钮时,先对字符串@"DoStr"中的子串(*...*)进行相应地替换,具体替换行为如前所述;
//对字符串@"DoStr"处理完所有的控件替换后,编译计算该字符串中的表达式,将结果输出到编辑框"结果输出2:";
//注意字符串"DoStr"中的内容在前面进行了定义,@"DoStr"表示取字符串"DoStr"的地址;
ContinueSetArray[BUTTON,"计算",400,290,50,25,@"DoStr","结果输出2:"];
ContinueSetArray[STATIC,"结果输出1:",10,260,100,20];
ContinueSetArray[EDIT,"结果输出1:",-1,120,260,330,20,"aaaaaa"];
ContinueSetArray[STATIC,"结果输出2:",10,290,100,20];
ContinueSetArray[EDIT,"结果输出2:",1,10,320,450,130,""];
//用FcFunWin[...]函数显示窗口,其中ContinueSetArrayIni(array,-1)获取数组array的有效元素个数。
FcFunWin[ContinueSetArrayIni(array,-1)-1,array];
FcFunWin[]函数可能返回如下运行错误:
1、参数不匹配;
2、字符串地址错误;
3、窗口或控件的位置及大小不能小于0;
4、内存分配失败;
5、不可识别控件ID;
6、数组地址错误,指定的数组不存在;
7、没有足够的数组元素个数。