salve raga, ho realizzato una semplice scrollbar, che in base all'altezza
del movie da scrollare si ridimensiona il funzionamento è buono, ma presenta
dei difetti di posizionamento e di verifica delle misure.
Potete vederne un esempio su http://www.pirosoft.it

Andate nella sezione products -> intranet e provate a cliccare sulle scritte rosse.
Praticamente se il movie si alza, e va oltre una certa altezza compare la scrollbar che
si ridimensiona in base a quanto diviene alto il movie da scrollare.

Vedo che però le misure non combaciano perfettamente e non capisco perchè!
mi aiutate?

il codice è
codice:
import flash.filters.ColorMatrixFilter; //importo per utilizzare i filtri

if(barScroll == undefined) barScroll= 0;
if(barListener == undefined) var barListener:Object = new Object();

//mymovie è il movie di riferimento
//setto i valori per lo scrolling
//passo movie che è il riferimento al movie da scrollare poi l'altezza
//e la larghezza massima dell barra
this.setScrollBar = function(scrollbar_h, scrollbar_w, movie){
	movie_h = movie._height; //l'altezza del movie da scrollare
	movie_y = movie._y; //posizione del movie da scrollare
	movie_ys = movie_y; //posizione del movie di riferimento iniziale che uso sull'onenterframe
	mybar_minh = 20; //setto l'altezza minima che può avere la barra
	//tutti i valori sono basati sull'altezza da scrollare, se la scrollbar è alta 10 e il movie 17 la differenza (7) mi fornirà
	//i valori sui quali basarmi
	movie_diff = movie_h - scrollbar_h;
	
        //la mia scrollbar è composta da più elementi vettoriali per poter essere scalata
        //o alllargata senza deformarsi 
       //back è losfondo dietro la barra, barsides sono le linee laterali, barbottom il basso
       //barlines sono le line centrali

		myscrollbar.back._height = scrollbar_h; //setto l'altezza allo sfondo
		myscrollbar._width = scrollbar_w; //setto la largezza allo sfondo
		//l'altezza della barra è inversamente proporzionale all'altezza del movie se il movie è 2 volte l'altezza della scrollbar
		//la barra è la metà, altezzabarra = altezzascrollbar/altezzamovie
		resizeval = Math.floor(scrollbar_h*(scrollbar_h/movie_h));
		if(resizeval<mybar_minh) resizeval = mybar_minh;
		myscrollbar.mybar.barsides._height = resizeval-3;
		myscrollbar.mybar.bar._height = resizeval-1;
		myscrollbar.mybar.barbottom._y = resizeval-3;
		myscrollbar.mybar.barlines._y = (resizeval-9)/2;
		
		//il rapporto fra pixel di scorrimento della bar e pixel di scorrimento del movie è dato dal rapporto
		//fra l'eccesso di altezza del movie (movie_diff) e lo spazio rimasto (altezzascrollbar-altezzabarra)
		rapp = movie_diff/(scrollbar_h - myscrollbar.mybar._height);

		//dragging con valore
		myscrollbar.mybar.onPress = function(){		    
			this.startDrag(false, 0, 0, 0, (scrollbar_h - myscrollbar.mybar._height));
			barScroll = myscrollbar.mybar._y;

			//per l'utilizzo della rotellina		
			barListener.onMouseWheel = function(delta:Number) {			
				barScroll -= delta;				
				if(barScroll<0) barScroll = 0;
				if(barScroll>(scrollbar_h - myscrollbar.mybar._height)) barScroll = scrollbar_h - myscrollbar.mybar._height;
				myscrollbar.mybar._y = barScroll;
				}			
				
			barListener.onMouseDown = function () {
     			if (!myscrollbar.mybar.hitTest(_root._xmouse, _root._ymouse, false)) {					
     				Mouse.removeListener(barListener);
    				 }
				if (movie.hitTest(_root._xmouse, _root._ymouse, false)) {					
     				Mouse.removeListener(barListener);
					Mouse.addListener(barListener);
    				 }
			}
			
			Mouse.addListener(barListener);	
			}
			
		myscrollbar.mybar.onRelease = myscrollbar.mybar.onReleaseOutside = function(){
			this.stopDrag();
			barScroll = this._y;
			
			var myElements_array:Array = [1, 0, 0, 0, 20,
			0, 1, 0, 0, 20,
			0, 0, 1, 0, 20,
			0, 0, 0, 1, 0 ];
			var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
			this.filters = [myColorMatrix_filter];
			}		
			
		myscrollbar.mybar.onRollOver = function(){
			var myElements_array:Array = [1, 0, 0, 0, 0,
			0, 1, 0, 0, 0,
			0, 0, 1, 0, 0,
			0, 0, 0, 1, 0 ];
			var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
			this.filters = [myColorMatrix_filter];
			
			}
			
		myscrollbar.mybar.onRollOut = function(){
			var myElements_array:Array = [1, 0, 0, 0, 20,
			0, 1, 0, 0, 20,
			0, 0, 1, 0, 20,
			0, 0, 0, 1, 0 ];
			var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
			this.filters = [myColorMatrix_filter];
			}
			//questo mi serve perchè se si ridimensiona il movie cambiano i valori
                       // e la barra deve essere ridimensionata
		myscrollbar.mybar.onEnterFrame = function(){//se si sposta la barra si sposta il movie
			movie._y = movie_ys - this._y*rapp;
			if(movie._height!=movie_h){		
				movie_h = movie._height;				
				movie_y = movie._y;
				movie_diff = movie_h - scrollbar_h;
				if(movie_diff>0) {myscrollbar._visible = true;}
					else {myscrollbar._visible = false;}
				resizeval = Math.floor(scrollbar_h*(scrollbar_h/movie_h));
				if(resizeval<mybar_minh) resizeval = mybar_minh;				
				myscrollbar.mybar.barsides._height = resizeval-3;
				myscrollbar.mybar.bar._height = resizeval-1;
				myscrollbar.mybar.barbottom._y = resizeval-3;
				myscrollbar.mybar.barlines._y = (resizeval-9)/2;
				rapp = movie_diff/(scrollbar_h - myscrollbar.mybar._height);
				if(myscrollbar.mybar._y > (scrollbar_h - myscrollbar.mybar._height))
					myscrollbar.mybar._y = (scrollbar_h - myscrollbar.mybar._height);
				}
			}
			
	if(movie_diff>0){ //se la differenza è maggiore di zero deve funzionare la scrollbar
		myscrollbar._visible = true;
		}
	else { //se la differenza è minore di zero la scrollbar non serve
		myscrollbar._visible = false;
		}
}
	

this.setScrollBar(_parent.barh, _parent.barw, _parent.movie);

stop();