home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 June / CHIP_CD_2004-06.iso / bonus / buhgal / files / M12USWEB.exe / RCDATA / CABINET / money.cab / TxtAreaCls.htc < prev    next >
Text File  |  2003-06-18  |  11KB  |  477 lines

  1. <PUBLIC:COMPONENT tagName=TextArea >
  2. <public:defaults 
  3.     viewLinkContent
  4.     tabStop = true 
  5.     viewMasterTab = true 
  6. />
  7. <PUBLIC:ATTACH EVENT="oncontentready" ONEVENT="Main()" />
  8. <PUBLIC:EVENT  NAME="onChange" ID="TxtAreaChange" />
  9. <PUBLIC:METHOD NAME="SetValue" />
  10. <PUBLIC:METHOD NAME="SetFocus" />
  11. <PUBLIC:METHOD NAME="GetValue" />
  12. <PUBLIC:METHOD NAME="Reset" />
  13. <PUBLIC:PROPERTY NAME="TextField" />
  14. <PRIVATE:PROPERTY NAME="IsDirty" />
  15. </PUBLIC:COMPONENT>
  16. <!----------------------------------------------------------
  17.     Copyright (c) 2001 Microsoft Corporation.
  18.     All rights reserved.
  19.  
  20.     File:       TxtAreaCls.htc
  21.     Revised:    Oct 26 2001
  22. --------------------------------------------------------- -->
  23. <HTML>
  24. <HEAD>
  25. <SCRIPT TYPE="text/jscript" LANGUAGE="JScript">
  26. <!--
  27.  
  28. @set @debug = false;
  29.  
  30. //**************************************************
  31. function Reset()
  32. {
  33.     txtInput.value = "";
  34.     ShowCaption(true);
  35. }
  36. //**************************************************
  37. function GetCaption()
  38. {
  39.     return element.caption;
  40. }
  41. //**************************************************
  42. function GetColumnCount()
  43. {
  44.     if(element.cols)
  45.     {
  46.         var bClmns = parseInt(element.cols);
  47.         if(!isNaN(bClmns))
  48.         {
  49.             return bClmns;
  50.         }
  51.         else
  52.         {
  53.             var hMsg = new Message("errInvalidCols");
  54.             var exception = new Exception(hMsg["nbr"],hMsg["txt"]);
  55.             throw exception;
  56.         }
  57.     }
  58.     else
  59.     {
  60.         return 30;
  61.     }
  62. }
  63. //**************************************************
  64. function GetRowCount()
  65. {
  66.     if(element.rows)
  67.     {
  68.         var bRws = parseInt(element.rows);
  69.         if(!isNaN(bRws))
  70.         {
  71.             return bRws;
  72.         }
  73.         else
  74.         {
  75.             var hMsg = new Message("errInvalidRows");
  76.             var exception = new Exception(hMsg["nbr"],hMsg["txt"]);
  77.             throw exception;
  78.         }
  79.     }
  80.     else
  81.     {
  82.         return 1;
  83.     }
  84. }
  85. //**************************************************
  86. function GetMaxLength()
  87. {
  88.     if(element.maxlength)
  89.     {
  90.         var bMxLngth = parseInt(element.maxlength);
  91.         if(!isNaN(bMxLngth))
  92.         {
  93.             return bMxLngth;
  94.         }
  95.         else
  96.         { 
  97.             var hMsg = new Message("errInvalidMaxLength");
  98.             var exception = new Exception(hMsg["nbr"],hMsg["txt"]);
  99.             throw exception;
  100.         }
  101.     }
  102.     else
  103.     {
  104.         return 128;
  105.     }
  106. }
  107. //**************************************************
  108. function GetReadOnly()
  109. {
  110.     if(element.readonly)
  111.     {
  112.         var fRdOnly = new Boolean();
  113.         fRdOnly     = eval(element.readonly);
  114.         return fRdOnly;
  115.     }
  116.     else
  117.     {
  118.         return false;
  119.     }
  120. }
  121. //**************************************************
  122. function GetInputMethod()
  123. {
  124.     if(element.IMEditor)
  125.     {
  126.         return element.IMEditor;
  127.     }
  128.     else
  129.     {
  130.         return "disabled";
  131.     }
  132. }
  133. //**************************************************
  134. function SetValue(hParam)
  135. {
  136.     ShowCaption(false);
  137.     txtInput.value = hParam;
  138.     RaiseEvent();
  139. }
  140. //**************************************************
  141. function GetValue()
  142. {
  143.     return txtInput.value;
  144. }
  145. //**************************************************
  146. function SetFocus()
  147. {
  148.     try
  149.     {
  150.         txtInput.focus();
  151.     }
  152.     catch(e)
  153.     {
  154.         return;
  155.     }
  156. }
  157. //**************************************************
  158. function ShowCaption(fShow)
  159. {
  160.     try
  161.     {
  162.         if(document.all.txtCaption)
  163.         {
  164.             document.all.txtCaption.style.top = (fShow) ? "2pt" : -100;
  165.         }
  166.     }
  167.     catch(e)
  168.     {
  169.         return;
  170.     }
  171. }
  172. //**************************************************
  173. function Main()
  174. {
  175.     IsDirty = false;
  176.     
  177.     var hTxt = new TextArea();
  178.     document.body.appendChild(hTxt);
  179.     TextField = hTxt;
  180.     if(element.caption)
  181.     {
  182.         var hCptn = new Caption();
  183.         document.body.appendChild(hCptn);
  184.         element.onblur = Element_Blur;
  185.     }
  186. }
  187. //**************************************************
  188. function TextArea()
  189. {
  190.     var hTxt = document.createElement("TEXTAREA");
  191.     
  192.     hTxt.id               = "txtInput";
  193.     hTxt.tabIndex         = 1;
  194.     hTxt.style.overflow   = "hidden";
  195.     hTxt.style.imeMode    = GetInputMethod();
  196.     hTxt.style.border     = "1pt solid #999999";
  197.     hTxt.style.fontSize   = "8pt";
  198.     hTxt.style.fontFamily = ResourceList.documentElement.selectSingleNode("properties/member[@name='TextArea']/style[@name='cssFontFamily']").text;
  199.     hTxt.onchange         = TextArea_Change;
  200.     hTxt.onkeydown        = TextArea_KeyDown;
  201.     hTxt.onbeforepaste    = TextArea_BeforePaste;
  202.     hTxt.onpaste          = TextArea_Paste;
  203.     hTxt.onfocus          = TextArea_Focus;
  204.     hTxt.oncontextmenu    = TextArea_ContextMenu;
  205.     try
  206.     {
  207.         hTxt.cols = GetColumnCount();
  208.     }
  209.     catch(exception)
  210.     {
  211.         if(exception instanceof Exception)
  212.         {
  213.             HandleException(exception.number,exception.description)
  214.         }
  215.         else
  216.         {
  217.             throw exception;
  218.         }
  219.     }
  220.     try
  221.     {
  222.         hTxt.readOnly = GetReadOnly();
  223.     }
  224.     catch(exception)
  225.     {
  226.         if(exception instanceof Exception)
  227.         {
  228.             HandleException(exception.number,exception.description)
  229.         }
  230.         else
  231.         {
  232.             throw exception;
  233.         }
  234.     }
  235.     try
  236.     {
  237.         hTxt.rows = GetRowCount();
  238.         hTxt.style.wordWrap = (1 == GetRowCount())
  239.             ?
  240.             "normal"
  241.             :
  242.             "break-word"
  243.             ;
  244.     }
  245.     catch(exception)
  246.     {
  247.         if(exception instanceof Exception)
  248.         {
  249.             HandleException(exception.number,exception.description)
  250.         }
  251.         else
  252.         {
  253.             throw exception;
  254.         }
  255.     }
  256.     try
  257.     {
  258.         hTxt.maxlength = GetMaxLength();
  259.     }
  260.     catch(exception)
  261.     {
  262.         if(exception instanceof Exception)
  263.         {
  264.             HandleException(exception.number,exception.description)
  265.         }
  266.         else
  267.         {
  268.             throw exception;
  269.         }
  270.     }
  271.     return hTxt;
  272. }
  273. //**************************************************
  274. function Caption()
  275. {
  276.     var hCptn = document.createElement("DIV");
  277.     
  278.     hCptn.id               = "txtCaption";
  279.     hCptn.style.position   = "absolute";
  280.     hCptn.style.top        = "2pt";
  281.     hCptn.style.left       = "4pt";
  282.     hCptn.style.zIndex     = 2;
  283.     hCptn.style.fontFamily = ResourceList.documentElement.selectSingleNode("properties/member[@name='Caption']/style[@name='cssFontFamily']").text;
  284.     hCptn.style.fontSize   = "8pt";
  285.     hCptn.style.color      = "#999999";
  286.     hCptn.innerText        = GetCaption();
  287.     hCptn.onclick          = SetFocus;
  288.     
  289.     return hCptn;
  290. }
  291. //**************************************************
  292. function Message(szMsgName)
  293. {
  294.     var hMsg    = new Object();
  295.     var hRsrc   = ResourceList.documentElement.selectSingleNode("messages/msg[@name='" + szMsgName + "']");
  296.     hMsg["txt"] = hRsrc.text;
  297.     hMsg["nbr"] = hRsrc.getAttribute("number");
  298.     return hMsg;
  299. }
  300. //**************************************************
  301. function Exception(bNumber,
  302.     szDescription)
  303. {
  304.     this.number = bNumber;
  305.     this.description = szDescription;
  306. }
  307. //**************************************************
  308. function HandleException(bNumber,
  309.     szDescription)
  310. {
  311.     /*@if(@debug)
  312.     alert("Error: " + bNumber + "\n\n" + szDescription);
  313.     @end @*/
  314. }
  315. //**************************************************
  316. function Element_Blur()
  317. {
  318.     try
  319.     {
  320.         if(txtInput.value.length == 0)
  321.         {
  322.             ShowCaption(true);
  323.         }
  324.     }
  325.     catch(e)
  326.     {
  327.         return;
  328.     }
  329. }
  330. //**************************************************
  331. function TextArea_Focus()
  332. {
  333.     try
  334.     {
  335.         ShowCaption(false);
  336.         txtInput.select();
  337.     }
  338.     catch(e)
  339.     {
  340.         return;
  341.     }
  342. }
  343. //**************************************************
  344. function TextArea_KeyDown()
  345. {
  346.     var hEvnt   = window.event;
  347.     var hTxtRng = txtInput.createTextRange();
  348.     var fCtrlKy = hEvnt.ctrlKey;
  349.     /*
  350.         The keydown event gives us the greatest breadth of
  351.         values to examine and cancel if necessary.  In this
  352.         case, we negate all but the BACKSPACE, DELETE, LEFT ARROW,
  353.         CTRL-C, and CTRL-X combinations if the text range length 
  354.         is equal to or greater than the value of the maxlength property.
  355.     */
  356.     if((13 == hEvnt.keyCode) && (1 == GetRowCount()))
  357.     {
  358.         hEvnt.keyCode      = 0;
  359.         hEvnt.returnValue  = false;
  360.         hEvnt.cancelBubble = true;
  361.     }
  362.     if(hTxtRng.text.length >= txtInput.maxlength)
  363.     {
  364.         if((hEvnt.keyCode != 8)
  365.             && (hEvnt.keyCode != 37) 
  366.             && (hEvnt.keyCode != 38) 
  367.             && (hEvnt.keyCode != 39) 
  368.             && (hEvnt.keyCode != 40) 
  369.             && (hEvnt.keyCode != 46) 
  370.             && !((hEvnt.keyCode == 67) && fCtrlKy)
  371.             && !((hEvnt.keyCode == 88) && fCtrlKy)) 
  372.         {
  373.             hEvnt.returnValue  = false;
  374.             hEvnt.cancelBubble = true;
  375.         }
  376.         if(hTxtRng.text.length > txtInput.maxlength)
  377.         {
  378.             hTxtRng.text = hTxtRng.text.substring(0,txtInput.maxlength);
  379.         }
  380.     }
  381.     else
  382.     {
  383.         RaiseEvent();
  384.     }
  385. }
  386. //**************************************************
  387. function TextArea_BeforePaste()
  388. {
  389.     window.event.returnValue = false;
  390. }
  391. //**************************************************
  392. function TextArea_Paste()
  393. {
  394.     if(txtInput.readOnly)
  395.     {
  396.         window.event.cancelBubble = true;
  397.         window.event.returnValue  = false;
  398.     }
  399.     else
  400.     {
  401.         var hTxtRng   = txtInput.createTextRange();
  402.         var hClpbrdDt = window.clipboardData.getData("Text");
  403.         /*
  404.             If the combined length of the current text range and
  405.             the clipboard value is greater than the field's maxlength 
  406.             value, we either fit as much of the clipboard in as we
  407.             can, or reject the command altogether.
  408.         */
  409.         if((hTxtRng.text.length + hClpbrdDt.length) > txtInput.maxlength)
  410.         {
  411.             var dbSbStrLn = txtInput.maxlength - hTxtRng.text.length;
  412.             if(dbSbStrLn > 0)
  413.             {
  414.                 hClpbrdDt = hClpbrdDt.substring(0,dbSbStrLn);
  415.                 window.clipboardData.setData("Text",hClpbrdDt);
  416.             }
  417.             else
  418.             { 
  419.                 window.event.cancelBubble = true;
  420.                 window.event.returnValue  = false;
  421.             }
  422.         }
  423.         RaiseEvent();
  424.     }
  425. }
  426. //**************************************************
  427. function TextArea_Change()
  428. {
  429.     /*
  430.         This backstops everything else, and is pretty ugly.
  431.     */
  432.     var hTxtRng = txtInput.createTextRange();
  433.     if(hTxtRng.text.length > txtInput.maxlength)
  434.     {
  435.         hTxtRng.text = hTxtRng.text.substring(0,txtInput.maxlength);
  436.     }
  437.     RaiseEvent();
  438. }
  439. //**************************************************
  440. function TextArea_ContextMenu()
  441. {
  442.     window.event.returnValue  = true;
  443.     window.event.cancelBubble = true;
  444. }
  445. //**************************************************
  446. function RaiseEvent()
  447. {
  448.     if(!IsDirty)
  449.     {
  450.         IsDirty = true;
  451.  
  452.         var hEvnt = createEventObject();
  453.         hEvnt.result = true;
  454.         TxtAreaChange.fire (hEvnt);
  455.     }     
  456. }
  457. //-->
  458. </SCRIPT>
  459. <XML ID="ResourceList">
  460.     <MnyVwrRsrc xmlns="urn:schemas-microsoft.com:mnyvwr-resource">
  461.         <properties>
  462.             <member name="TextArea">
  463.                 <style name="cssFontFamily">Tahoma</style>
  464.             </member>
  465.             <member name="Caption">
  466.                 <style name="cssFontFamily">Tahoma</style>
  467.             </member>
  468.         </properties>
  469.         <messages>
  470.             <msg number="1" name="errInvalidRows">Invalid value assigned to TextArea rows property.</msg>
  471.             <msg number="2" name="errInvalidCols">Invalid value assigned to TextArea cols property.</msg>
  472.             <msg number="3" name="errInvalidMaxLength">Invalid value assigned to TextArea maxlength property.</msg>
  473.         </messages>
  474.     </MnyVwrRsrc>
  475. </XML>
  476. </HEAD><BODY></BODY></HTML>
  477.