CVI通过ActiveX使用DTPicker控件获取选择的日期
最近一个项目需要用到选择使用的时间,使用CVI LabView编辑软件。如果不能使用DTPicker,可以先下载安装MSCOMCT2.OCX文件。
方法一:下载运行Microsoft Office mscomct2 控件包.exe自动安装。
方法二:下载控件MSCOMCT2.OCX,手动安装。
手动安装:
1、将下载的MSCOMCT2.OCX放在C:\Windows\SysWOW64\(我的电脑64位,32位的放在C:\Windows\System32);
2、使用管理员权限(很重要)打开命令提示符,输入regsvr32 c:\Windows\SysWOW64\Mscomct2.ocx进行注册。
创建控件:
代码如下:
CAObjHandle obj1, obj2;
char strTimeStart[50],finalTime[50];
void getDTPickerTimestamp (int panel, CAObjHandle objHandle, char *timestamp)
{
VARIANT stringvariant;
char *stringval[1];
int i = 0;char str[20] = "";
MSComCtl2_IDTPickerGetValue (objHandle, NULL, &stringvariant);//获取选择的日期
CA_VariantConvertToType (&stringvariant, CAVT_CSTRING, stringval);//格式转换
strcpy (timestamp, stringval[0]);
}
//通过面板及控件名字得到控件句柄
GetObjHandleFromActiveXCtrl (panel, PANEL_DTPICKER_TIMESTART, &obj1);
getDTPickerTimestamp (panel, obj1, strTimeStart);
最后得到的时间:2020/9/5 、2020/10/1 、2020/9/10 、2020/12/12,如果需要转换成2020/09/05 、2020/10/01、2020/09/10。(供参考)
代码如下:
void VertDateFormat (char *timeIn, char *timeOut)
{
int i = 0, j1 = 0, j2 = 0, j3 = 0, b = 0;
char str1[10] = "", str2[10] = "", str3[10] = "", str22[10] = "", str33[10] = "";
while (timeIn [i] != '\0')
{
if (timeIn [i] != '/')
{
if (b==0)
str1[j1++] = timeIn [i];
if (b==1)
str2[j2++] = timeIn [i];
if (b==2)
str3[j3++] = timeIn [i];
}
else{++b;}
i++;
}
if (strlen(str2)<2){sprintf(str22, "0%s", str2);}
else{strcpy (str22, str2);}
if (strlen(str3)<2){sprintf (str33, "0%s", str3);}
else{strcpy (str33, str3);}
sprintf (timeOut, "%s/%s/%s", str1, str22,str33);
}
VertDateFormat (strTimeStart, finalTime);
请多指教!