Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
<!-- ******************************************************** --> <!-- --> <!-- Copyright (c) 1999-2000 Microsoft Corporation --> <!-- --> <!-- scroll.htc --> <!-- --> <!-- Build Type : Free --> <!-- Build Number : 0707 --> <!-- Build Date : 07/07/2000 --> <!-- ******************************************************* --> <HTC> <PUBLIC:COMPONENT tagName="scrollBarBehaviour">
<PUBLIC:PROPERTY NAME="value" /> <PUBLIC:PROPERTY NAME="smallChange" /> <PUBLIC:PROPERTY NAME="LargeChange" /> <PUBLIC:PROPERTY NAME="Max" /> <PUBLIC:PROPERTY NAME="Min" /> <PUBLIC:PROPERTY NAME="Orientation" /> <PUBLIC:PROPERTY NAME="Enabled" />
<PUBLIC:METHOD NAME="handleMouseDown" /> <PUBLIC:METHOD NAME="scrollLoop" /> <PUBLIC:METHOD NAME="calcParams" /> <PUBLIC:METHOD NAME="removeFocus" />
<PUBLIC:EVENT NAME="onchange" ID=changeID />
<PUBLIC:ATTACH EVENT="onreadystatechange" ONEVENT="scrollBarLoad()"/> <PUBLIC:ATTACH EVENT="onmousedown" ONEVENT="handleMouseDown()"/> <PUBLIC:ATTACH EVENT="onmousemove" FOR='document' ONEVENT="drag()"/> <PUBLIC:ATTACH EVENT="onmouseup" FOR='document' ONEVENT="handleMouseUp()"/> <PUBLIC:ATTACH EVENT="onresize" ONEVENT="resize()"/> <PUBLIC:ATTACH EVENT="onpropertychange" ONEVENT="propertyChangeHandler()"/> <PUBLIC:ATTACH EVENT="onkeydown" ONEVENT="keyPressHandler()"/>
<SCRIPT LANGUAGE="jscript">
var dragThumb=false; var myheight; var divMax = 0; var divMin = 0; var started; var smallChange = 1; var LargeChange = new Number(1); var jump; var value = new Number(0); var Max = 1; var Min = 0; var oldHeight=1; var fLoaded = false; var thumbToValue = 0; var thumbTop = 0; var scrollOn = false; var elementTop = 0; var direction; var change; var scrollAreaAvailable = 0; var largeJump = 0; var smallJump = 0; var oldValue = 0; var i = 0; var value = 0; var Enabled = false;
function scrollBarLoad() { if(element.readyState != 'complete') return;
str = '<DIV id="scrollArea" onmousedown="this.parentElement.removeFocus()" onmouseup="this.parentElement.removeFocus()" style="position:relative;background-color:silver;height:100%;width:100%">' + '<BUTTON style="margin:0;padding:0;position:absolute;top:0%;height:17" id="upper" onmousedown="this.parentElement.parentElement.removeFocus()" onmouseup="this.parentElement.parentElement.removeFocus()" onmousemove="this.parentElement.parentElement.removeFocus()"><IMG id="uppergif" src="images/up.gif" onmousedown="this.parentElement.parentElement.parentElement.removeFocus()" onmousemove="this.parentElement.parentElement.parentElement.removeFocus()" onmouseup="this.parentElement.parentElement.parentElement.removeFocus()"></IMG></BUTTON>' + '<BUTTON style="position:relative;top:18;width:100%" onmousedown="this.parentElement.parentElement.removeFocus()" onmousemove="this.parentElement.parentElement.removeFocus()" id="thumb"></BUTTON>' + '</DIV>' + '<BUTTON style="position:absolute;left:0;top:18;height:17" onmousedown="this.parentElement.removeFocus()" onmouseup="this.parentElement.removeFocus()" onmousemove="this.parentElement.removeFocus()" id="lower"><IMG id="lowergif" src="images/dwn.gif" onmousemove="this.parentElement.parentElement.removeFocus()" onmouseup="this.parentElement.parentElement.removeFocus()" onmousedown="this.parentElement.parentElement.removeFocus()" ></IMG></BUTTON>' element.innerHTML = str; lower.style.setExpression ("top", "scrollArea.style.pixelHeight-upper.style.pixelHeight") ; calcParams(); thumbTop = thumb.offsetTop; value = 0; }
function keyPressHandler() { if(Enabled == true) enterForDrillDown(); } function propertyChangeHandler() { if(window.event.propertyName == 'value') { if(oldValue != value) { temp = (value/Max)*scrollAreaAvailable + upper.style.pixelHeight; if(!isNaN(temp)) { thumb.style.posTop = Math.min(temp,divMax); thumbTop = thumb.offsetTop; fireChangeEvent(); oldValue == value; } } } else if( ( window.event.propertyName == 'LargeChange') || (window.event.propertyName == 'Max') ) { calcParams(); } else if ( window.event.propertyName == 'Enabled') { if(Enabled == true) { lowergif.src = "images/dwn.gif"; uppergif.src = "images/up.gif"; lower.disabled = false; upper.disabled = false; thumb.style.display = ''; if(value == 0) { thumb.style.posTop = upper.style.pixelHeight; thumbTop = thumb.offsetTop; } } else { lowergif.src = "images/dwngray.gif"; uppergif.src = "images/upgray.gif"; lower.disabled = true; upper.disabled = true; thumb.style.display = 'none'; } } } function resize() { if(element.readyState != 'complete') return; document.recalc(true); calcParams() if(oldHeight != 1) { if ( thumb.offsetTop != upper.style.pixelHeight) { temp = thumb.offsetTop * (scrollAreaAvailable/oldHeight)+upper.style.pixelHeight; if (temp > divMax) temp = divMax; if (temp < divMin) temp = divMin; thumb.style.posTop = temp; thumbTop = thumb.offsetTop; } } oldHeight = scrollAreaAvailable; }
function handleMouseDown() { if(divMax <= 0) calcParams(); if(dragThumb == false) { if ( (window.event.srcElement.id == 'thumb') && (window.event.type == "mousedown") ) { dragThumb = true; elementTop = element.offsetTop started = thumb.offsetTop; oldValue = value; } else { if(Enabled == true) { scrollOn = true; handleMouseOver(); } } } else { dragThumb = false; } }
function handleMouseOver() { if(scrollOn == false) return; if(divMax <= 0) calcParams(); if(window.event.srcElement.id == 'upper') { scrollLoop('up',smallJump,smallChange); } else if (window.event.srcElement.id == 'lower') { scrollLoop('down',smallJump,smallChange); } else if(window.event.srcElement.id == 'scrollArea') { scrollArea.style.backgroundColor= "black"; if(window.event.offsetY < thumb.offsetTop) { scrollLoop('up',largeJump,LargeChange); } else { if(window.event.offsetY > (thumb.offsetTop + thumb.style.pixelHeight)) { scrollLoop('down',largeJump,LargeChange); } } scrollArea.style.backgroundColor= "silver"; } } function scrollLoop(direction,jump,change) { oldValue = value; //alert(jump + ":" + change + ":" + thumbTop); if(direction == 'up') { thumbTop = Math.max(thumbTop - jump,divMin); value = Math.max(value - change,Min); } else { thumbTop = Math.min(thumbTop + jump,divMax); value = Math.min(value + change,Max - LargeChange); } thumb.style.posTop=Math.floor(thumbTop); if(value < 0 ) value = 0; if(oldValue != value) { fireChangeEvent(); oldValue = value; } // window.status = thumbTop; }
function drag() {
var newPos = window.event.clientY - elementTop - myheight; if(dragThumb==true) { if(newPos < divMin) { if(newPos < (divMin - 40)) { thumb.style.posTop = started; thumbTop = started; dragThumb = false; } else { thumb.style.posTop = Math.max(newPos,divMin); } } else { if(newPos > (divMax + 40)) { thumb.style.posTop = started; thumbTop = started; dragThumb = false; } else { thumb.style.posTop= Math.min(newPos,divMax); } } thumbTop = thumb.offsetTop; if( (thumbTop + thumb.style.pixelHeight) == (scrollAreaAvailable + upper.style.pixelHeight) ) value = Math.max(Max - LargeChange,0); else value = Math.round((thumbTop - upper.style.pixelHeight )* thumbToValue); if (value < 0) value = 0; } thumb.title = value+1; //window.status = "Value:"+value + "ThumbTop:" + thumb.offsetTop + "ScrollArea:" + scrollAreaAvailable; // + "ThumbToValue:" + thumbToValue + "ScreenArea:" + scrollArea.style.pixelHeight; //" OffsetY: " +window.event.offsetY+" clientY: " + window.event.clientY + " newPos : " + newPos; } function fireChangeEvent() { changeEvent = createEventObject(); changeID.fire(changeEvent); } function handleMouseUp() { //thumbTop = thumb.offsetTop; if(dragThumb == true) { dragThumb = false; if(oldValue != value) { fireChangeEvent(); oldValue = value; } } scrollOn = false; }
function calcParams() { scrollAreaAvailable = scrollArea.style.pixelHeight-upper.style.pixelHeight-lower.style.pixelHeight;
if(Max<LargeChange) Max = LargeChange;
largeJump = (LargeChange/Max)*(scrollAreaAvailable); smallJump = (smallChange/Max)*(scrollAreaAvailable); thumb.style.pixelHeight = Math.max(largeJump,6); myheight = thumb.style.pixelHeight/2; divMax = lower.offsetTop - thumb.style.pixelHeight; divMin = upper.offsetTop + upper.style.pixelHeight; thumbToValue = Max/(scrollAreaAvailable); thumbTop = thumb.offsetTop; }
function removeFocus() { if((scrollOn == true)||(dragThumb == true)) scrollArea.focus(); }
</SCRIPT>
</PUBLIC:COMPONENT>
</HTC>
|