📄 fcrep.js
字号:
//2002.06.19 北京方成公司 梅勇
//写隐藏div用于装表数据的备份
document.write('<div id=tCopy style="DISPLAY: none; "></div>')
//装入报表提示等待
document.write('<div id=ShowWait style="BACKGROUND-COLOR: antiquewhite; COLOR: red; DISPLAY: none; FONT-SIZE: x-large; FONT-STYLE: normal; FONT-WEIGHT: bold; HEIGHT: 600px; LEFT:0px; position:absolute; TOP: 0px; WIDTH: 800px; Z-INDEX: 100"> 正在装入,请稍候...</div>')
//装入用于开发的一排报表
LoadButton()
document.write('<TEXTAREA id=txt1 rows=3 style="DISPLAY: none; HEIGHT: 52px; LEFT: 132px; POSITION: absolute; TOP: 345px; WIDTH: 302px"></TEXTAREA>')
var curKeyCode //用于webgrid中直接按键输入时运行timer时传递当前输入字符及原串
var fc_wherexml="" //当前的XML条件串
var fc_curpage=1 //当前页号
var fc_allpages=1 //总页数
//用于处理查询字段的输入和输出参数
var sActFieldIn=""
var sActFieldOut=""
var blnMouseDown=false //在表格上mousedown时此变量为真
//用于当移到边界外时捕获鼠标,自动滚动.
var blnCapture=false
var iTimeID=0
var iTimeID1=0
var iTimeID2=0
var iTimeID3=0
var tdEndSel //
//---------------------
//选择时,记录起止单元的坐标
var sTop,sLeft,sWidth,sHeight,eTop,eLeft,eWidth,eHeight
//记录选择时的起止单元格的物理位置
var sRow,sCol,eRow,eCol
//排好序后的位置
var sRowSort,sColSort,eRowSort,eColSort
//处于运行模式
var blnRunMode=false
//决定报表是否变化了
var blnChange=false
//不要运行表格的mouseup,thead_onclick时只运行在mousedown
var NoRunMouseUp=false
//当显示全部时要自动加行,将行数存此全局变量中
var AutoAddLines=0
//---------------------
var lngUndo=-1
var lngRedo=-1
var oUndo
oUndo=new ActiveXObject("Microsoft.XMLDOM")
oUndo.async ="false";
oUndo.loadXML("<root></root>")
var oRedo
oRedo=new ActiveXObject("Microsoft.XMLDOM")
oRedo.async ="false";
oRedo.loadXML("<root></root>")
//---------------------
var oFormula
oFormula=new ActiveXObject("Microsoft.XMLDOM")
oFormula.async ="false";
oFormula.loadXML("<root></root>")
var oGraph
oGraph=new ActiveXObject("Microsoft.XMLDOM")
oGraph.async ="false";
oGraph.loadXML("<root></root>")
//用于检查公式嵌套时ExpandFormula函数,传一个成功与失败的参数
var bCheckFormula=false
//保存公式嵌套错误信息的数组
var arrCheckFormula=new Array()
function ErrorFormula(sGetcell,sFormula,RC){
this.sGetcell=sGetcell //"GETCELL(2,3)"
this.sFormula=sFormula //"B2+B3"
this.RC=RC //"C3"
}
function t_onmousedown() {
//show("t_onmousedown")
var obj=event.srcElement
if (event.button ==2)
return;
if(obj.tagName=="TD"){
//alert(grid.ReadOnly)
//如果只读
var s1=obj.getAttribute("pressenter")
if(grid.ReadOnly && s1==null){
return
}
//-------
if(t.rows(0).style.cursor=="default" && t.childNodes(0).childNodes(0).style.cursor=="default"){
if(thead_onclick()){
return
}
}
}
if(obj.id!="txtMyGrid"){
if (obj.tagName!="TD" || obj.parentNode.rowIndex==0 || obj.cellIndex==0)
return
}
//固定行上不能选择
//if (blnFixRowDrap && obj.parentNode.rowIndex<lngFixRows) return
//if (bShowMenu)
showFontProperty(obj)
blnMouseDown=true
//if (t.rows(0).style.cursor =="move" || t.childNodes(0).childNodes(0).style.cursor =="move"){
//}
//else {
if (blnCapture==false) {
//show("Capture")
blnCapture=true
t.setCapture()
}
//}
sLeft=obj.offsetLeft //初始位置
sTop=obj.offsetTop
sWidth=obj.offsetWidth
sHeight=obj.offsetHeight
if(t.style.borderLeftStyle=="none")
sLeft++
if(t.style.borderTopStyle=="none")
sTop++
eLeft=sLeft
eTop=sTop
eWidth=sWidth
eHeight=sHeight
var i
//下面两个循环计算起始行列值
var tmp=1
for (i=0;i<=t.rows(0).cells.length-1;i++)
{
if(t.childNodes(0).childNodes(i).style.pixelWidth>0)
tmp=tmp+t.childNodes(0).childNodes(i).style.pixelWidth
if (tmp==sLeft)
{
sCol=i+1
while (t.childNodes(0).childNodes(sCol).style.pixelWidth==0) {
sCol=sCol+1
if (sCol==t.rows(0).cells.length-1)
break;
}
break;
}
}
tmp=1
for (i=0;i<t.rows.length;i++)
{
if (t.rows(i).style.display!="none")
tmp=tmp+t.rows(i).style.pixelHeight
if (tmp==sTop)
{
sRow=i+1
while (t.rows(sRow).style.display=="none") {
sRow=sRow+1
if (sRow==t.rows.length-1)
break;
}
break;
}
}
//当选中一个合并单元时
var arr=PhyToLog(sRow,sCol)
var iRowSpan=t.rows(arr[0]).cells(arr[1]).rowSpan
var iColSpan=t.rows(arr[0]).cells(arr[1]).colSpan
eRow=sRow+iRowSpan-1
eCol=sCol+iColSpan-1
sRowSort=sRow
sColSort=sCol
eRowSort=eRow
eColSort=eCol
showBlueRect()
showBlueScale(sRow,sCol,sRow,sCol)
//先运行控件外的onmousedown
var curObjTmp=event.srcElement
if(curObjTmp.tagName!="TD") return
if (curObjTmp.parentNode.rowIndex>0 && curObjTmp.cellIndex>0) {
//if(typeof curObj=="undefined") curObj=curObjTmp
try {
grid.actcellchange(curObjTmp)
}
catch (e){}
//curObj=curObjTmp
//mcurRow=curObj.parentNode.rowIndex
//mcurCol=curObj.cellIndex
grid.moveedit(curObjTmp)
}
}
function t_onmousemove() {
if (event.button ==2)
return;
if (blnMouseDown && grid.autosize==false) {
if (event.y>grid.top+grid.height-17) {
if (iTimeID==0) {
iTimeID=window.setInterval("grid.Scroll(2)",200)
}
}
else
{
if (iTimeID!=0) {
window.clearInterval(iTimeID)
}
iTimeID=0
}
if (event.y<grid.top) {
if (iTimeID1==0) {
iTimeID1=window.setInterval("grid.Scroll(1)",200)
}
}
else
{
if (iTimeID1!=0) {
window.clearInterval(iTimeID1)
}
iTimeID1=0
}
if (event.x<=grid.left+35) {//35左边列宽
if (iTimeID2==0) {
iTimeID2=window.setInterval("grid.Scroll(3)",200)
}
}
else
{
if (iTimeID2!=0) {
window.clearInterval(iTimeID2)
}
iTimeID2=0
}
if (event.x>=grid.left+grid.width-17) {//17右边滚动条宽
if (iTimeID3==0) {
iTimeID3=window.setInterval("grid.Scroll(4)",200)
}
}
else
{
if (iTimeID3!=0) {
window.clearInterval(iTimeID3)
}
iTimeID3=0
}
}
t.style.cursor="default"
var obj=event.srcElement
if (obj.tagName!="TD" || obj.parentNode.rowIndex==0 || obj.cellIndex==0)
return
if ( blnMouseDown==true){
document.selection.clear()
eLeft=obj.offsetLeft
eTop=obj.offsetTop
eWidth=obj.offsetWidth
eHeight=obj.offsetHeight
//show("sLeft="+sLeft+" sTop="+sTop+" sWidth="+sWidth+" sHeight="+sHeight
//+" eLeft="+eLeft+" eTop="+eTop+" eWidth="+eWidth+" eHeight="+eHeight)
tdEndSel=obj
showBlueRect()
}
}
function t_onmouseup() {
if(NoRunMouseUp) {
NoRunMouseUp=false
return
}
var bTmp=false
blnMouseDown=false
if (blnCapture) {
if (iTimeID!=0) {
window.clearInterval(iTimeID)
bTmp=true
}
iTimeID=0
if (iTimeID1!=0) {
window.clearInterval(iTimeID1)
bTmp=true
}
iTimeID1=0
if (iTimeID2!=0) {
window.clearInterval(iTimeID2)
bTmp=true
}
iTimeID2=0
if (iTimeID3!=0) {
window.clearInterval(iTimeID3)
bTmp=true
}
iTimeID3=0
blnCapture=false
t.releaseCapture()
}
var obj,iRow,iCol
var bTmp=false
if (event.button ==2)
return;
//当光标移到表外时,取mousemove保留的结尾选择单元格(tdEndSel)
if (event.y>grid.top+t.offsetHeight || event.y<grid.top || event.x<=grid.left+35 || event.x>=grid.left+t.offsetWidth )
obj=tdEndSel
else
obj=event.srcElement
try{
var sTest=obj.tagName
}
catch (e){
obj=t.rows(0).cells(0)
}
if(obj.tagName=="TD"){
//如果只读
var s1=obj.getAttribute("pressenter")
if(grid.ReadOnly && s1==null){
return
}
}
try {
if (obj.tagName!="TD" || obj.cellIndex==0 || obj.parentNode.rowIndex==0 )
return
}
catch (e){return}
eLeft=obj.offsetLeft
eTop=obj.offsetTop
eWidth=obj.offsetWidth
eHeight=obj.offsetHeight
//计算列宽行高,用于计算起止点的物理位置.
var i,j
var tmp=1
for (i=0;i<=t.rows(0).cells.length-1;i++)
{
if(t.childNodes(0).childNodes(i).style.pixelWidth>0) {
tmp=tmp+t.childNodes(0).childNodes(i).style.pixelWidth
}
if (tmp==eLeft+eWidth)
{
eCol=i
break;
}
}
tmp=1
for (i=0;i<t.rows.length;i++)
{
if (t.rows(i).style.display!="none")
tmp=tmp+t.rows(i).style.pixelHeight
if (tmp==eTop+eHeight)
{
eRow=i
break;
}
}
//show(sCol+" "+sRow+" "+eCol+" "+eRow)
if(sRow>eRow){
sRowSort=eRow
eRowSort=sRow
}
else {
sRowSort=sRow
eRowSort=eRow
}
if(sCol>eCol){
sColSort=eCol
eColSort=sCol
}
else {
sColSort=sCol
eColSort=eCol
}
showBlueRect()
showBlueScale(sRow,sCol,eRow,eCol)
if(blnRunMode==false){
if (cmdBrush.getAttribute("fcDown")=="1") {
cmdPasteFormat()
cmdBrush.setAttribute("fcDown","0")
cmdBrush.className="tblclassup"
clearBlueScale()
}
}
}
function thead_onclick() {
//表头点击处理
if (event.srcElement.tagName!="TD") return false
var curColNo=event.srcElement.cellIndex
var curRowNo=event.srcElement.parentNode.rowIndex
if(curColNo==0 && curRowNo==0) {
//点左上角
selectRange(1,1,t.rows.length-1,t.rows(0).cells.length-1)
NoRunMouseUp=true
}
else if(curRowNo==0) {
//点第一列
selectRange(1,curColNo,t.rows.length-1,curColNo)
NoRunMouseUp=true
}
else if(curColNo==0){
//点第一行
selectRange(curRowNo,1,curRowNo,t.rows(0).cells.length-1)
NoRunMouseUp=true
}
return NoRunMouseUp
}
//*****************************************************************************************
//显示兰框的三函数
//*****************************************************************************************
function clearBlueScale(){
//清除兰色的选中框
tc.style.display ="none"
for(var i=0;i<t.rows.length;i++)
t.rows(i).cells(0).style.color="black"
for(var j=0;j<t.rows(0).cells.length;j++)
t.rows(0).cells(j).style.color="black"
hideTxt()
}
function hideTxt(){
//隐藏输入文本框
txtMyGrid.style.display="none"
}
function showBlueScale(r0,c0,r1,c1){
if(grid.ReadOnly) return
//显示兰色的选中框
var row0,col0,row1,col1 //物理位置
//排序
if (r1>r0){
row0=r0
row1=r1
}
else {
row0=r1
row1=r0
}
if (c1>c0){
col0=c0
col1=c1
}
else {
col0=c1
col1=c0
}
for (var i=0;i<t.rows.length;i++){
if(i>=row0 && i<=row1 )
t.rows(i).cells(0).style.color="blue"
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -