GeneralDlg.htm
<input type="text" style="behavior:url('GeneralDlg.htc');">
<input type="text" style="behavior:url('GeneralDlg.htc');" defineType="FontDlg">
<input type="text" style="behavior:url('GeneralDlg.htc');" defineType="OpenDlg">
<input type="text" style="behavior:url('GeneralDlg.htc');" defineType="SaveDlg">
GeneralDlg.htc
<public:property name="defineType">
<public:attach event=oncontentready onevent=initGeneralDlg()>
<script>
//默认颜色
var strColor="";
//默认字体
var strFont="";
//对象
var vColorObject=null;
var vFontObject=null;
var vFontDiv=null;
var vOpenObject=null;
var vSaveObject=null;
//参数[ColorDlg,FontDlg,OpenDlg,SaveDlg]
var strDefineType="";
function initGeneralDlg()
{
//初始化组件
if(defineType)
{strDefineType=defineType;}
else
{strDefineType="ColorDlg";}
initByType(strDefineType);
//事件绑定
element.attachEvent("onmousedown",onMouseDown);
}
//元素中鼠标按下[显示面板]
function onMouseDown()
{
if(strDefineType=="ColorDlg")
{
strColor=chooseColor();
element.value=strColor;
element.style.backgroundColor=strColor;
}
else if(strDefineType=="FontDlg")
{
chooseFont();
}
else if(strDefineType=="OpenDlg")
{
try
{
vOpenObject.CancelError=true;
vOpenObject.ShowOpen();
element.value=vOpenObject.filename;
}
catch(e)
{
//window.confirm(e);
}
}
else if(strDefineType=="SaveDlg")
{
try
{
vSaveObject.CancelError=true;
vSaveObject.ShowSave();
element.value=vSaveObject.filename;
}
catch(e)
{
//window.confirm(e);
}
}
}
//颜色滴管
function chooseColor()
{
var strReturnColor=vColorObject.ChooseColorDlg(strColor.substr(1));
strReturnColor=strReturnColor.toString(16);
if(strReturnColor.length<6)
{
var strTempString="000000".substring(0,6-strReturnColor.length);
strReturnColor=strTempString.concat(strReturnColor);
}
return "#"+strReturnColor;
}
//字体选择
function chooseFont()
{
vFontDiv.style.display="";
vFontDiv.style.left=getElementDefineLeft(element);
vFontDiv.style.top=getElementDefineTop(element)+element.offsetHeight;
element.document.attachEvent('onmousedown',onDocumentMouseDown);
}
function onFontChange()
{
var vObject=window.event.srcElement;
strFont=vObject.options[vObject.selectedIndex].text;
element.value=strFont;
element.style.fontFamily=strFont;
}
function onDocumentMouseDown()
{
if(vFontDiv.contains(event.srcElement))
{
return;
}
if(event.srcElement==element)
{
return;
}
element.value=strFont;
element.style.fontFamily=strFont;
vFontDiv.style.display="none";
element.document.detachEvent("onmousedown",onDocumentMouseDown);
}
function initByType(strType)
{
element.readOnly="true";
if(strType=="ColorDlg")
{
if(element.value)
{strColor=element.value;}
else
{strColor="#FFFFFF";}
element.style.backgroundColor=strColor;
vColorObject=document.createElement("object");
vColorObject.classid="clsid:3050F819-98B5-11CF-BB82-00AA00BDCE0B";
vColorObject.codeBase="";
vColorObject.style.width=0;
vColorObject.style.height=0;
window.document.body.insertAdjacentElement("afterbegin",vColorObject);
}
else if(strType=="FontDlg")
{
if(element.value)
{strFont=element.value;}
else
{strFont="宋体";}
element.style.fontFamily=strFont;
vFontObject=document.createElement("object");
vFontObject.classid="clsid:3050F819-98B5-11CF-BB82-00AA00BDCE0B";
vFontObject.codeBase="";
vFontObject.style.width=0;
vFontObject.style.height=0;
window.document.body.insertAdjacentElement("afterbegin",vFontObject);
vFontDiv=document.createElement("div");
var vSelect=document.createElement("select");
vSelect.style.border="1px solid #000000";
vSelect.length=vFontObject.fonts.count;
for(kIndex=1;kIndex<=vFontObject.fonts.count;kIndex++)
{
vOption=document.createElement("option");
vOption.value=kIndex;
vOption.text=vFontObject.fonts(kIndex);
vSelect.add(vOption);
}
vSelect.attachEvent("onchange",onFontChange);
vFontDiv.appendChild(vSelect);
window.document.body.insertAdjacentElement("afterbegin",vFontDiv);
vFontDiv.style.display="none";
vFontDiv.style.position="absolute";
}
else if(strType=="OpenDlg")
{
vOpenObject=document.createElement("object");
vOpenObject.classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB";
vOpenObject.codeBase="http://activex.microsoft.com/controls/vb5/comdlg32.cab";
vOpenObject.style.width=0;
vOpenObject.style.height=0;
window.document.body.insertAdjacentElement("afterbegin",vOpenObject);
}
else if(strType=="SaveDlg")
{
vSaveObject=document.createElement("object");
vSaveObject.classid="clsid:F9043C85-F6F2-101A-A3C9-08002B2F49FB";
vSaveObject.codeBase="http://activex.microsoft.com/controls/vb5/comdlg32.cab";
vSaveObject.style.width=0;
vSaveObject.style.height=0;
window.document.body.insertAdjacentElement("afterbegin",vSaveObject);
}
}
//取元素绝对位置Left
function getElementDefineLeft(vObject)
{
var iElementLeft=vObject.offsetLeft;
while(vObject=vObject.offsetParent)
{
iElementLeft+=vObject.offsetLeft;
}
return iElementLeft;
}
//取元素绝对位置Top
function getElementDefineTop(vObject)
{
var iElementTop=vObject.offsetTop;
while(vObject=vObject.offsetParent)
{
iElementTop+=vObject.offsetTop;
}
return iElementTop;
}
</script>
</public:attach>