这里有个很有意思的东西,!(原创:美洲豹)

发表于:2007-06-30来源:作者:点击数: 标签:
test.htm !DOCTYPE HTML PUBLIC -//W3C//D TD HTML 4.0 Transitional//EN html xmlns:v=urn:schemas-microsoft-com:vml head title公文留痕/title /head STYLE v\:* { BEHAVIOR: url(#default#VML) } /STYLE link rel=stylesheet href=pub_Document.css scrip
test.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
    <title>公文留痕</title>
</head>
<STYLE>
v\:* { BEHAVIOR: url(#default#VML) }
</STYLE>
<link rel="stylesheet" href="pub_Document.css">
<script language="JScript">
var nowID=0;
var popID=0;
var padHeight=0;
function init()
{
newID=parseInt(document.all("n").value);
}
function createDelLine(num)
{
var newMark=document.createElement("<div id=@#mark"+num+"@#></div>");
memo.insertBefore(newMark);
var oRcts = oTempRange.getClientRects();
for(var i=0;i<oRcts.length;i++)
{
  var t=oRcts[i].top;
  var l=oRcts[i].left;
  var r=oRcts[i].right;
  var b=oRcts[i].bottom;
  var newRect=document.createElement("<v:roundRect oncontextmenu=@#popID="+num+";popUp();@# id=@#Rect"+num+"no"+i+"@# style=@#position:absolute;visibility:hidden@# filled=t fillcolor=red strokeColor=red strokeWeight=1pt></v:roundRect>");
  newMark.insertBefore(newRect);
  newRect.style.posTop=t+document.body.scrollTop-2+(b-t)/2;
  newRect.style.posLeft=l-2;
  newRect.style.width=r-l;
  newRect.style.height=2;
  newRect.style.visibility="";
}
}
function createRect(num)
{
var newMark=document.createElement("<div id=@#mark"+num+"@#></div>");
edit.insertBefore(newMark);
var oRcts = oTempRange.getClientRects();
for(var i=0;i<oRcts.length;i++)
{
  var t=oRcts[i].top;
  var l=oRcts[i].left;
  var r=oRcts[i].right;
  var b=oRcts[i].bottom;
  var newRect=document.createElement("<v:roundRect oncontextmenu=@#popID="+num+";popUp();@# id=@#Rect"+num+"no"+i+"@# style=@#position:absolute;visibility:hidden@# filled=f strokeColor=red strokeWeight=1.5pt></v:roundRect>");
  newMark.insertBefore(newRect);
  newRect.style.posTop=t+document.body.scrollTop-3;
  newRect.style.posLeft=l-2;
  newRect.style.width=r-l;
  newRect.style.height=b-t;
  newRect.style.visibility="";
}
}
var PopSrcElement=null;
var SelectOk=false;
var oTempRange=null;
function createTempRange()
{
hideMenu();
doc_click();
if(document.selection.type=="Text")
  {
   oTempRange=document.selection.createRange();  //把选择的文本创建成 TextRange 对象
   if(oTempRange.htmlText!=""){                    //检查选择的是否为空字符
       RangePosLeft=oTempRange.boundingLeft;
       RangePosTop =oTempRange.offsetTop+document.body.scrollTop+oTempRange.boundingHeight;
       oTempRange.execCommand("BackColor",true,"#99clearcase/" target="_blank" >ccff");;
       oTempRange.execCommand("UnSelect");
       SelectOk=true;
      }
      else
       SelectOK=false;
  }
}
function doc_click()
{
dragapproved=false;
if(self.event.srcElement.className=="item")
    return;
if((self.event.button==1)&&(oTempRange!=null))  //取消临时标记
    {
       oTempRange.execCommand("BackColor",true,"#EFEFEF");
       oTempRange=null;
       SelectOk=false;
    }
}
function popUp()
{
  PopSrcElement=event.srcElement;                  //获得 Popup 事件源
  self.event.returnValue=false;
  setButton();
  var newxx=event.x+document.body.scrollLeft-3;
  var newyy=event.y+document.body.scrollTop-3;
  if((event.clientY+135)>document.body.clientHeight) newyy=newyy-135;
  if((event.clientX+120)>document.body.clientWidth) newxx=newxx-120;
  popmenu.style.posLeft=newxx;
  popmenu.style.posTop=newyy;
  popmenu.style.display="";
}
function setButton()
{
document.all.item1.disabled=true;
document.all.item2.disabled=true;
document.all.item3.disabled=true;
if(SelectOk==true)
     {
     document.all.item1.disabled=false;          //显示标记 按钮
     document.all.item3.disabled=false;          //显示拷贝 按钮     
     }
if(PopSrcElement.className=="wen")     
     {
     document.all.item2.disabled=false;          //显示取消标记 按钮
     document.all.item3.disabled=false;          //显示拷贝 按钮     
     }
if(popID!=0)
     document.all.item2.disabled=false;          //显示取消标记 按钮
}
function hideMenu()    //隐藏弹出菜单
{
    popmenu.style.display="none";
}

function setColor(n)   //改变菜单条颜色
{
    document.all("item"+n).style.color="white";
    document.all("item"+n).style.background="#316AC5";
}
function clearColor(n)
{
    document.all("item"+n).style.color="black";
    document.all("item"+n).style.background="white";
}
function maskText()
{
  hideMenu();
  var mask=showModalDialog("Mask.html",null,"status:no;center:yes;help:no;minimize:no;maximize:no;dialogWidth:400px;scroll:no;dialogHeight:250px");
  if(mask!=""){
        var del=mask.charAt(1);                       //获得是 删除 还是 修改
      mask=mask.substring(3,mask.length);    //替换掉参数 ,剩下的就是 文本了
      nowID++;
      TempRange = false;
      if(del=="1")
         {
          createDelLine(nowID);
          oTempRange.execCommand("BackColor",true,"#EFEFEF");
          oTempRange=null;
          SelectOk=false;
         }
      else
      {
        createRect(nowID);
        oTempRange.execCommand("BackColor",true,"#EFEFEF");
        oTempRange=null;
        SelectOk=false;
        mask=re(mask);
        var newMemo=document.createElement("<input id=@#more"+nowID+"@# type=hidden>")  //标记的内容
        newMemo.value=rere(mask);
          memo.insertBefore(newMemo);
                
        var newDIV=document.createElement("<DIV id=@#memo"+nowID+"@# oncontextmenu=@#popID="+nowID+";popUp()@# class=@#wen@# style=@#position:absolute;left:"+RangePosLeft+";top:"+RangePosTop+";width:150px;z-index:9@#></DIV>");
        newDIV.innerHTML="<img alt=@#展开@# id=@#expand"+nowID+"@# src=@#expand.gif@# style=@#cursor:hand@# onclick=@#expandMemo("+nowID+",1)@#>"+document.all("more"+nowID).value.substring(0,10);
        memo.insertBefore(newDIV);
      }
    }
  else
    return
}

var popID=0;

function expandMemo(n,b)
{
  if(b==1)
     document.all("memo"+n).innerHTML="<img alt=@#收缩@# id=@#expand"+n+"@# src=@#collapse.gif@# style=@#cursor:hand@# onclick=@#expandMemo("+n+",0)@#>"+document.all("more"+n).value;
  else
     document.all("memo"+n).innerHTML="<img alt=@#展开@# id=@#expand"+n+"@# src=@#expand.gif@# style=@#cursor:hand@# onclick=@#expandMemo("+n+",1)@#>"+document.all("more"+n).value.substring(0,10);     
}
function copyTo()
{
hideMenu();
if(SelectOk==true) //拷贝选择的文字
     {
      oTempRange.execCommand("Copy");
      alert("已经将\n\n"+oTempRange.text+"\n\n复制了!");
      return
     }
if(PopSrcElement.className=="wen") //拷贝 标记的文字
     {
         var textR=document.body.createTextRange();
      textR.moveToElementText(PopSrcElement);
      textR.execCommand("Copy");
          alert("已经将\n\n"+textR.text+"\n\n复制了!");
     }
if(PopSrcElement.className=="editText") //拷贝 标记的文字
     {
         var textR=document.body.createTextRange();
      textR.moveToElementText(PopSrcElement);
      textR.execCommand("Copy");
          alert("已经将\n\n"+textR.text+"\n\n复制了!");
     }
     
}
function save()
{
if (dialog("确定要保存所做的修改吗?\n你也可以在下次继续修改本公文。","保存修改",36+256)=="6"){
   saveForm.TextContentMemo.value=document.all("memo").innerHTML;
   saveForm.TextContent.value=document.all("edit").innerHTML;
   saveForm.TotalMarked.value=nowID;
   }
}
function unMask()
{
hideMenu();
if (dialog("确实要取消对这个标记吗?","取消标记",36+256)=="6")
  {
     document.all("mark"+popID).outerHTML="";
     if(document.all("memo"+popID))
        document.all("memo"+popID).outerHTML="";
  }
  popID=0;
}
function showhelp()        //显示帮助信息
{
   var msg="\n"
          +"\n  第一步:选择一段文字"
          +"\n  第二步:在选择的文字上面点右键"
          +"\n  第三步:选择“标记选中”的,然后输入标记的内容\n\n"
          +"\n  ■注意事项:■■■■■■■\n"
          +"\n      1.要取消标记,在标记上点右键,选择“取消标记”\n"
          +"\n      2.要复制选中的文本,请选择“复制选中的”\n"
                  +"\n                                      美洲豹"
          +"\n\n                                     2002年4月18日";
   dialog(msg,"在线帮助",64);
}
function DragStart()
{
  if ("IMG"==event.srcElement.tagName)
   event.returnValue=false;
}
//有关移动的过程和函数
var dragapproved=false
var eventsource,x,y
var popeventsource=""
function move()
{
  if(event.button==1 && dragapproved)
   {
    hideMenu();
    var newleft=temp1+event.clientX-x
    var newtop=temp2+event.clientY-y
    eventsource.style.pixelLeft=newleft
    eventsource.style.pixelTop=newtop
    return false
   }
}
function drags()
{
  if((!document.all)&&(event.srcElement.tagName=="INPUT"))
    return  
  if (event.srcElement.className=="wen")
   {
    dragapproved=true
    eventsource=event.srcElement
    temp1=eventsource.style.pixelLeft
    temp2=eventsource.style.pixelTop
    x=event.clientX
    y=event.clientY
    document.onmousemove=move
   }
}
//document.ondragstart=DragStart;
document.onmouseup=createTempRange;
//document.onselectstart=selectStart;
document.onmousedown=drags;
self.onload=init;
</script>
<script language="VBScript">
Function dialog(msg,title,head)
dialog=MsgBox(msg,head,title)
End Function
Function re(t)
  tt=t
  tt= Replace(tt,"@#","@#@#")
  tt= Trim(Replace(tt,Chr(10),"<br>",1))
  tt= Replace(tt," "," ",1)
  re=tt
End Function
Function reit(str,d,s)
reit=Replace(str,d,s)
End Function
Function rere(t)
   t=Replace(t,"<","<",1)
   t=Replace(t,">",">",1)
   t=Replace(t,"<br>","<br>",1)
   rere=t
End Function
</script>
<body>
<table align="center">
<tr>
    <td align="center">
<table align="center">
<tr>
<td>公文头部</td>
</tr>
</table>
<div align="left" class="memo" style="position:absolute;top:0;left:0px;width:700;line-height:23px" id="edit" oncontextmenu="popID=0;popUp()">
<h3>VML 和 TextRange 对象的结合,可以在知道文字位置的情况下给文字画筐,画圈...</h3>
<ul>
<li>第一步:选择一段文字
<li>在选择的文字上面点右键
<li>第三步:选择“标记选中”的,然后输入标记的内容
</ul>
<b>注意:使用的时候,因为标记都是绝对定位,所以文章也必须使用绝对定位!!</b>
    各工程公司、项目部: <br>
<br>
    根据在建工程施工进度的进展情况与业主对工期的要求,经过对工程量的认真盘点,结合集团公司今年的总体施工部署,现下达2002年二季度施工计划,请认真予以执行。今年赣龙线十九标段要完成产值2亿元,宁启线二标段和W10、W11标段的主体工程均要完成,施工任务艰巨,请你们要结合施工现场的实际情况,优化施工资源的配置,抓紧前期征迁工作的办理,见缝插针,把制约工期的桥涵基础、软基施工争取在本季度内超计划完成,为铺开工作面,在施工的黄金季节到来时加快施工进度创造条件。<br>
<br>
    <font style="font-size:12pt">2002年一季度施工计划安排9043万元</font>,由于宁启线启动难,施工受征迁影响太大,赣龙线计划实际上是为适应年度投资计划而安排,又加春节放假和雨季提前的影响,集团公司一季度实际完成建安产值为6495.1万元,完成计划的71.8%。<br>
<br>
    2002年二季度施工计划安排17270万元,其中,基建项目安排14441万元,外委工程安排1519万元,更新改造工程安排1256万元,自身建设及其他小型工程安排54.4万元。各公司2002年二季度施工计划安排如下:一公司3010万元,二公司4570万元,三公司5940万元,四公司1388万元,五公司168万元电务公司1400万元,厦门公司794万元。<br>
<ul>
<li>图形可以任意放</li>
<li>图形可以任意放</li>
<li>图形可以任意放</li>
<li>图形可以任意放</li>
</ul>
<p style="text-indent:20px;"> sadfasfa
<br>sdf</p>
<table border="1">
<tr>
    <td>fddfg</td>
    <td>fgdsfg</td>
</tr>
<tr>
    <td>sdfgsdfg</td>
    <td>sgdfgsfgf</td>
</tr>
</table>


</div>
    
    </td>
</tr>
</table>
<div id="memo"></div>
<div class="bbb" id="popmenu" style="background-color:white;HEIGHT: 135px; LEFT: 0px; POSITION: absolute; TOP: 0px; display:none; WIDTH: 120px; Z-INDEX: 9">
    <button class="item" name="item1" onmouseover="setColor(1)" onmouseout="clearColor(1)" onclick="maskText();"> 标记选中的</button><br>
    <button class="item" name="item2" onmouseover="setColor(2)" onmouseout="clearColor(2)"  onclick="unMask();"> 取消标记  </button><br>
    <hr align=center SIZE=2 width="95%">
    <button class="item" name="item3" onmouseover="setColor(3)" onmouseout="clearColor(3)" onclick="copyTo();" > 复制      </button><br>
    <button class="item" name="item4" onmouseover="setColor(4)" onmouseout="clearColor(4)" onclick="save();"> 保存修改  </button><br>
    <button class="item" name="item5" onmouseover="setColor(5)" onmouseout="clearColor(5)" onclick="hideMenu();showhelp();"> 在线帮助  </button>
</div>
<form name="saveForm">
<input type="hidden" name="n" value="0">   <!-- 总共有多少留痕操作 -->
<input type="hidden" name="con">             <!-- 文本内容(包含修改过的内容) -->
<input type="hidden" name="memory">         <!-- 留痕的内容 由多个<DIV>组成 -->
</form>
</body>
</html>

原文转自:http://www.ltesting.net