1、新增对话框:
进入“User Interface”下的“Dialog”,右击“All Dialogs”,选择“New Dialog...”,在向导的第二步“Dialog Template”中选择需要的类型,此例中因为需要Dialog需要处理一些功能,所以选择了“NewScriptBaseDialog”。
将新增的对话框改名,如“sdCheckDialog”,并进入其编辑状态,拖拉控件至窗体中,并设置相应的值。
这个有一个地方一定不能漏掉:窗体等控件的“Resource Identifier”的值,这个值在后面的脚本中对窗体或控件进行控制时要用到,假设将这个窗体的“Resource Identifier”值设为“10333”。
![自定义对话框](http://hi.csdn.net/attachment/201004/5/4217366_1270473325Hhlr.gif)
2、写脚本:
首先要新增一个脚本文件,过程如下:在“Behavior and Logic”中选择“InstallScript”,右击“File”选择“New Script File”,新增一个RUL文件,将这个文件的文件名改成新增的对话框相同的名字“sdCheckDialog”,在其中编辑代码如下:
#define RES_DIALOG_ID 10333 //对话框的ID
#define RES_PBUT_NEXT 1 // Next的ID
#define RES_PBUT_CANCEL 9 // OK的ID
#define RES_PBUT_BACK 12 // BACK的ID
#define RES_PLIST_RESULT 1302 //LIST控件的ID
#define RES_PBUT_NEXT 1 // Next的ID
#define RES_PBUT_CANCEL 9 // OK的ID
#define RES_PBUT_BACK 12 // BACK的ID
#define RES_PLIST_RESULT 1302 //LIST控件的ID
#include "Ifx.h"
export prototype ExFn_DefineDialog(HWND);
prototype CheckIE();
export prototype ExFn_DefineDialog(HWND);
prototype CheckIE();
function ExFn_DefineDialog(hMSI)
STRING szDialogName, szDLLName, szDialog;
NUMBER nDialog, nResult, nCmdValue;
BOOL bDone,bInstall;
HWND hInstance, hwndParent;
NUMBER nCtrlId, nType;
HWND hwndDlg,hwndItem;
LIST listCheckResult;
begin
//szDialogName = "自定义对话框";
hInstance = 0;//默认值
hInstance = 0;//默认值
szDLLName = ""; //默认值
szDialog = "";//如果指定了对话框的ID,这里就设置为空字符串
hwndParent = 0;//参数保留,必须为0
nResult = DefineDialog (szDialogName, hInstance, szDLLName,
RES_DIALOG_ID, szDialog, hwndParent,
HWND_INSTALL, DLG_MSG_STANDARD|DLG_CENTERED);
// 错误检查
szDialog = "";//如果指定了对话框的ID,这里就设置为空字符串
hwndParent = 0;//参数保留,必须为0
nResult = DefineDialog (szDialogName, hInstance, szDLLName,
RES_DIALOG_ID, szDialog, hwndParent,
HWND_INSTALL, DLG_MSG_STANDARD|DLG_CENTERED);
// 错误检查
if (nResult < 0) then
MessageBox ("出错了", SEVERE);
MessageBox ("出错了", SEVERE);
bDone = TRUE;
abort;
endif;
abort;
endif;
bDone = FALSE;
//循环
repeat
//显示对话框,nComValue返回在对话框中的事件,如果正常,返回Control ID
//循环
repeat
//显示对话框,nComValue返回在对话框中的事件,如果正常,返回Control ID
nCmdValue = WaitOnDialog(szDialogName);
switch (nCmdValue)
case DLG_CLOSE:
// 关闭窗口
switch (nCmdValue)
case DLG_CLOSE:
// 关闭窗口
Do (EXIT);
case DLG_ERR:
MessageBox ("无法显示自定义对话框", SEVERE);
case DLG_ERR:
MessageBox ("无法显示自定义对话框", SEVERE);
abort;
case DLG_INIT:
hwndDlg = CmdGetHwndDlg( szDialogName );
listCheckResult = ListCreate (STRINGLIST); //定义一个LIST
//检察IE,此处是这个自定义对话框要实现的功能
nResult = CheckIE();
if nResult = 1 then
if (listCheckResult != LIST_NULL) then
ListAddString (listCheckResult, "IE版本小于6", AFTER); //往List中添加字串
case DLG_INIT:
hwndDlg = CmdGetHwndDlg( szDialogName );
listCheckResult = ListCreate (STRINGLIST); //定义一个LIST
//检察IE,此处是这个自定义对话框要实现的功能
nResult = CheckIE();
if nResult = 1 then
if (listCheckResult != LIST_NULL) then
ListAddString (listCheckResult, "IE版本小于6", AFTER); //往List中添加字串
hwndItem = GetDlgItem( hwndDlg, RES_PBUT_NEXT ); //把下一步按钮置成不可用
EnableWindow( hwndItem, FALSE);
EnableWindow( hwndItem, FALSE);
endif;
else
ListAddString (listCheckResult, "您可以继续安装", AFTER);
//把下一步按钮置成可用
hwndItem = GetDlgItem( hwndDlg, RES_PBUT_NEXT );
EnableWindow( hwndItem, TRUE);
endif;
//把下一步按钮置成可用
hwndItem = GetDlgItem( hwndDlg, RES_PBUT_NEXT );
EnableWindow( hwndItem, TRUE);
endif;
//将List的内容添加到LISTBOX控件中
nResult = CtrlSetList (szDialogName, RES_PLIST_RESULT, listCheckResult);
if (nResult != 0) then
MessageBox ("不能添加信息", SEVERE);
if (nResult != 0) then
MessageBox ("不能添加信息", SEVERE);
bDone = FALSE;
endif;
endif;
ListDestroy(listCheckResult);
endif;
endif;
ListDestroy(listCheckResult);
case RES_PBUT_CANCEL:
SdCloseDlg( hwndDlg, nType, bDone );
case RES_PBUT_NEXT:
nType = NEXT;
bDone = TRUE;
case RES_PBUT_BACK:
nType = BACK;
bDone = TRUE;
endswitch;
until bDone;
//关闭对话框
SdCloseDlg( hwndDlg, nType, bDone );
case RES_PBUT_NEXT:
nType = NEXT;
bDone = TRUE;
case RES_PBUT_BACK:
nType = BACK;
bDone = TRUE;
endswitch;
until bDone;
//关闭对话框
EndDialog (szDialogName);
//释放内存
ReleaseDialog (szDialogName);
return nType;
end;
//释放内存
ReleaseDialog (szDialogName);
return nType;
end;
//CheckIE函数
function CheckIE()
NUMBER nvType, nvSize;
STRING szVer1,szVer2,szKey,szName,szValue;
number nValue;
begin
szKey="SOFTWARE//Microsoft//Internet Explorer";
szName="version";
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx(szKey, szName, nvType, szVer1, nvSize) ;
szVer2 = "6.0.0000.0000";
nValue = VerCompare(szVer1,szVer2,VERSION); //版本比较,返回1表示第一个值小于第二个值
NUMBER nvType, nvSize;
STRING szVer1,szVer2,szKey,szName,szValue;
number nValue;
begin
szKey="SOFTWARE//Microsoft//Internet Explorer";
szName="version";
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx(szKey, szName, nvType, szVer1, nvSize) ;
szVer2 = "6.0.0000.0000";
nValue = VerCompare(szVer1,szVer2,VERSION); //版本比较,返回1表示第一个值小于第二个值
return nValue;
end;
end;