Slice tool help needed width expands and contracts
I recently did a header for my website and srinks and expands
with different screen sizes I need a bit of help to undstand how
and why this happens.
I built it on a 19" screen fits perfectly on the page. Then
on the 15" I'm using now its very small leaving gaps along the
sides
here's the problem
No, I don't mean that your header should be all one image.
Currently, your header is a table with a number of images
inside it. The width of the table is "absolute." It is set to a
fixed number of pixels (800). It won't change. What you see as
smaller and larger on your different monitors is a result of the
different resolution that the two monitors have.
The forum content, on the other hand, is in tables with
widths that are "relative." They are are a percentage of the width
of the browser window (81%). These tables will change size
depending on the size of the browser window. For just one perfect
setting, everything will line up. For all other widths, you have a
mess.
You need your header table and your forum tables to match.
Either your header needs to be designed differently, so that it can
expand and contract gracefully when a browser window is a different
size (in pixels), or you need to edit your forum so that the
various parts are all 800 pixels wide instead of varying
percentages.
As for monitors, it isn't the physical size that is important
here, it's resolution. It isn't the number of inches, it's the
number of pixels. You can have a 21" monitor that's set to 800x600
pixels and you can have a 17" monitor set to 1600x1200 pixels. On a
monitor with 800x600 pixel resolution, your header will be the full
width of the screen and the forum content will be about 650 pixels,
indented on both sides. On a monitor that is 1600x1200 pixel
resolution, your header will be about half of the screen width and
your forum content will be about 1300 pixels wide.
Similar Messages
-
Help needed with header and upload onto business catalyst
Can someone help with a problem over a header please?
I have inserted a rectangle with a jpeg image in background, in the 'header' section, underneath the menu. It comes up fine on most pages when previsualised, going right to the side of the screen, but stops just before the edge on certain pages. I have double checked that I have placed it in the right place in relation to the guides on the page.
That's one problem.
The second problem is that I tried to upload onto business catalyst, which got to 60% and refused to go any further, saying it couldn't find the header picture, giving the title and then u4833-3.fr.png. The picture is in the right folder I have double checked. And it isn't a png. Does it have to be ?
And the third problem is that I got an email following my upload from business catalyst in Swedish. I am living in France.
Can anyone help ? Thanks.Thanks for replying,
How can I check the preview in other browsers before I publish a provisional site with BC?
The rectangle width issue happens on certain pages but not others. The Welecom page is fine when the menu is active, also the contact page, but others are slightly too narrow. Changing the menu spacing doesn’t help - I was already on uniform but tried changing to regular and back.
In design mode the rectangle is set to the edge of the browser, that’s 100%browser width right?
Re BC I have about 200 images on 24 different pages and it seems to be having difficulty uploading some of them. But it has managed a couple I named with spaces but not others I named with just one name.
Is there an issue on size of pictures ? If I need to replace is there a quick way to rename and relink or do I have to insert the photos all over again?
I’m a novice with Muse with an ambitious site !
Thanks for your help.
Mary Featherstone
Envoyé depuis Courrier Windows
De : Sanjit_Das
Envoyé : vendredi 14 février 2014 22:15
À : MFeatherstone
Re: Help needed with header and upload onto business catalyst
created by Sanjit_Das in Help with using Adobe Muse CC - View the full discussion
Hi
Answering the questions :
- Have you checked the preview in Muse and also in other browsers ?
- Does the rectangle width issue happens when menu is active , or in any specific state , Try to change the menu with uniform spacing and then check.
- In design view the rectangle is set to 100% browser width ?
With publishing :
- Please try to rename the image file and then relink
- If it happens with other images as well , see if all the image names includes strange characters or spaces.
- Try again to publish
With e-mail from BC :
- Under preferences , please check the country selected.
- If you have previously created partner account in BC and selected country and language then it would follow that, please check that.
Thanks,
Sanjit
Please note that the Adobe Forums do not accept email attachments. If you want to embed a screen image in your message please visit the thread in the forum to embed the image at http://forums.adobe.com/message/6121942#6121942
Replies to this message go to everyone subscribed to this thread, not directly to the person who posted the message. To post a reply, either reply to this email or visit the message page: http://forums.adobe.com/message/6121942#6121942
To unsubscribe from this thread, please visit the message page at http://forums.adobe.com/message/6121942#6121942. In the Actions box on the right, click the Stop Email Notifications link.
Start a new discussion in Help with using Adobe Muse CC at Adobe Community
For more information about maintaining your forum email notifications please go to http://forums.adobe.com/thread/416458?tstart=0. -
Emac Display Expanding and Contracting
I have a first generation Emac that I just bought used. The screen is expanding and contracting (left - right). Any suggestions on what this is? Thanks.
You may have a defective IVAD cable, a relatively simple part to replace. Such problems plagued only the original nVidia-graphics powered eMac 700 and 800 MHz models.
The characteristic symptomatic indicator of such a defect, however, is most commonly video shrinkage vertically, with the image collapsing from a full to half screen. -
Small business needing to expand and deploy a network
HI,
I hope this is the correct forum to post this question. If not, please move it to one more appropriate.
We are a small company currently working from home but now have a need to expand into an office due to winning a contract with a large international organization. We offer web market research services utilizing Web 2.0 techniques. Our current 'network' infrastructure if you want to call it that is based around a standard home office scenarion - 24Mbit DSL 4 PC's, a couple of laptops, Dlink gigabit switch and the router from the telecom company. Our printers are networked via the switch and we run Windows 7. We have servers hosted in the Rackspace Cloud and with Amazon S3 but no current physical server. Email is via a hosted Exchange package.
Due to the new contract we will have to hire two to three additional personnel taking us to 7 staff in total and that requires a move to a dedicated office. That wouldn't be much of an issue if we only needed to setup an office LAN but the crunch comes within the security protocols we are required to meet in the new contract. We'll be storing customer data on servers and we'll require an audit of our systems once in place. We will be scanned by our new client and expected to install a scanner appliance to be deployed on our internal network which will allow our new client to periodically scan us for network vulnerabilities.
The key issue is that we have to have physical sight of the server that is holding the data, which also needs to have WAN access. This server must reside on a network independent from our office LAN. We'll need VPN access to this server. The requirements document also demands a hardware firewall. The new office has Cat6 cabling that routes back to a server room. Apart from that, this room is empty.
It's a bit of a daunting task and I'd like to know what equipment we'll require to setup two independent networks with WAN access. The two new servers will probably come from Dell and will be rack mounted. I'm sure we'll need the services of a network professional but I'd like to be clear in my own head about what components we will need to purchase to deploy this network, and what would be a suitable internet network connection. The server for the new project will need to run a web and MySQL server and it will be accessed by around 600 people across Europe and the USA each month. I can't give a clear figure on total bandwidth but the 600 people will be accessing a pretty standard WordPress site. The number of users will increase to 6000 per month within 6 months. On top of that office staff will be sending emails and using web services on a daily basis. The office server will run Windows Server 2008 with 10 CAL's. We have an initial capital budget of about $12,500. Within 6 months we will need to deploy our own SharePoint server for this project. A dedicated remotely hosted SharePoint solution will not be acceptable to the client. More budget will be available for this. Support will be delivered by Dell for the servers and network maintenance will be contracted out.
Any help in making this a little less daunting would be much appreciated.
Thanks in advance.Leo has given you some excellent advice ie. you cannot choose a kit list until you have a design. It just doesn't work the other way around. If you don't have the experience to design the solution then you can't really be choosing the kit. Otherwise when you do hire your consultant he might well be constrained by the kit already chosen and you will not get the best solution for your needs.
Please don't take any of this the wrong way. NetPro is a great forum for helping people out with technical and design issues with Cisco equipment but there are times when NetPro is not the best solution and this is one of them. We could each give you a kit list of what we "think" is the best solution but that really should come from the designer.
Jon
Leo - will you please stop losing your points oops, and now they are back again -
Help needed in schema and flow of my DB
I am dealing with a large scale of data and the senario is that.
i am getting data from stream , i have developed an aplication called AClient (in C++) which is getting data from stream and putting that data live in my db table called live using ODBC (previously i was using Pro C but i didnot find good help on that for new versions), this data insertion is like 2000 records per min, each record is approx. 200k.
As this data is very critical so we can't afford to miss this data.Data is automatically getting commit on each insertion, so the I/O operations bar is HIGH.
Now after saving this data live, we perform some actions using oracle JOBs,
I1. One job is used to fetch approx. 200,000 from table Live, merge 5-6 records into one record after every 1 hour, and put these records in a table named COM.
I2. One jos is used to fetch approx. 200,000 from table Live other than those inserted in COM, and put them in another table INCOM.
I3. One job is to fetch all records preior to 6 hours, and put them in an archive table ARC, also delete them from Live.
Now to export this data in CSVs we are using some more Oracle JOBs.
E1. One job is to fetch last two hours data from COM table and export this data in CSV format after every 2 hours.
E2. One job is to fetch one day records from INCOM table and export this data in CSV format scheduled in night time , once for a day.
Now the problem is that i am facing performace issues, i have got a very good hardware with 32GB RAM , 1.5T harddisk and quard core processsors.
TOP issues are fetching data is too slow, and I/O operations shown in OEM preformace tab are too many.
Please guide me what should i do.
like using partition tables,
and/or use of BI tools, fetch using cubes & dimensions.
and/or use any special tunning related to memory or I/O.
and/or rescheduling the JOBs.
and/or perform analyze table to make fetch process faster.
ANY HELP.I have worked on this system many times before.
Not the one you have written but others that could be described with the exact same words.
And each and every time the reason is that they don't scale and the performance is abysmal.
What you have done, in the design, is systematically violate every performance and scalability rule and all, seemingly, for a good reason.
The problem is that databases don't work that way.
If you can not risk losing data write a log file, just as Oracle writes its redo logs.
Then write one process that takes the raw input and generates the desired output.
I can already hear the protest about how this can not be done. I've heard those too over and over again. Yet, amazingly, there are
those of us out here that get paid to do so ... and we do so successfully.
So if you want to avoid hiring a high-priced consultant ... rethink the design.
PS: You do not need an ARC table at all. Ever. This is Oracle not a toy. -
Help needed on Servlets and JSTL
Hi
I am using tomcat 5.5 and JDK 1.5. What are the softwares I have to download for compiling servlets and creating JSTL ?. Help needed.
Thanks
IndyaRajaI tried compling servlet, but it is raising error
that coul not find package javax.servletWhat I did not mention... you need to add those JARs in the Classpath explicitly. You will find them in %TOMCAT_HOME%\common\lib. You atleast need to add servlet-api.jar to your Classpath. :) -
Help needed with flash and web service call
Hi all,
I need some help with web services and flash. I'm very new to flash, so please have that in the back of your mind when reading this :-)
I've got a .swf file, and I would like to display a number received from a web service (using adobe flash professional cs5). Ive added the web service and provided the WSDL, but when i try to "Add Method Call", nothing happens. Why? What am I doing wrong?
Hope someone can helpstart with the button that causes the text to be displayed. find what it does (which may not be easy because most templates are coded by novice or intermediate level coders) and follow that trail to the text. (note: the text may be in a txt or xml file that's loaded.)
to have a button release open a file, use:
yourbtn.onRelease=function(){
getURL("http://www.adobe.com"); -
Help needed with consolidating and moving itunes folder.
I have imported songs into itunes using with the Copy Files To iTunes Folder When Adding To The Library box unchecked and moved the location of my music folder to an external hard drive. I already had a folder full of music files on this hard drive so I now have 2 folders with music files, the iTunes folder with music recently imported from cd's and the old folder. The library points to references to both of these folders but not ALL of the files in the old folder as I don't need them in iTunes.
I now want to be able to listen to my iTunes library when not connected to the external drive. How do I do this? If I reset the location of my iTunes folder back to the macbook do I then need to consolidate, and if I do will only the files with reference pointers go into this folder? I don't want all the music files in the old folder to go onto the macbook, only the ones with reference pointers to them, plus the ones in the iTunes music folder.I have imported songs into itunes using with the Copy Files To iTunes Folder When Adding To The Library box unchecked and moved the location of my music folder to an external hard drive. I already had a folder full of music files on this hard drive so I now have 2 folders with music files, the iTunes folder with music recently imported from cd's and the old folder. The library points to references to both of these folders but not ALL of the files in the old folder as I don't need them in iTunes.
I now want to be able to listen to my iTunes library when not connected to the external drive. How do I do this? If I reset the location of my iTunes folder back to the macbook do I then need to consolidate, and if I do will only the files with reference pointers go into this folder? I don't want all the music files in the old folder to go onto the macbook, only the ones with reference pointers to them, plus the ones in the iTunes music folder. -
Help needed with footers and shrinking text
Hi Guys
I got a report that I want to print conditional headers and footers for. When I specify that I only want a foooter to appear on the last page, I get REP-1216 error, I checked out Metalink and followed a note on how to get around it but I'm having no joy. Can anyone help me out? I also want to make certain bits of the header and footer visible depending on a value retrieved from the report query only I get REP-1314 saying that my format trigger referencesa column at the wrong frequency. I know the value is in another frame but how do I make this value available in the margin so that the formatting will work?
Also, I want to be able to shrink some lines of an address if it has a null value at runtime e.g
My House
First Address Line
Second Address Line
<Null>
Post Code
I want to format it so that it appears as:
My House
First Address Line
Second Address Line
Post Code
I really appreciate if someone could help me out as always this is very urgent!
Many thanks
CiaranHi Ciaran,
I only want a foooter to appear on the last page
I am quoting from Note 1017067.102 on Metalink (REP-1216 when running report with field in margin) - you might have already seen this note...
Objects in the margin region are restarted on every physical page. As a
result, not all print condition types make sense for margin objects. Because
objects are restarted on every page, it is as if you are always on the first
page of the object.
The print condition FIRST is the same as the print condition ALL.
The print conditions LAST and ALL BUT LAST are invalid because "LAST" is never
reached.
The print condition ALL BUT FIRST causes the object to never appear because
the object never goes beyond "FIRST" page.
Thus, the only valid print conditions for the object are FIRST and ALL.
also want to make certain bits of the header and footer visible depending on a value retrieved from the report queryYou can use conditional formatting / format trigger only for objects that are in the same group in the data model. For example, you can reference employee_id in the format trigger of employee_name if they are in the same group. In your header / footer Format Trigger, you can reference only report-level columns. So if you can make your column to appear at the report level (outside of any group), you may be able to reference it from the header / footer.
want to be able to shrink some lines of an address if it has a null value at runtime You may be able to use Anchors. See Builder Help for more information and examples.
Navneet. -
Help needed with terminal and sudo
I recently had an awful time trying to upgrade to Mavericks from Mountain Lion. I couldn't do it, I got the gray screen with the logo and nothing else.
After a couple of days trying to sort it out I have gone back to Mountain Lion by restoring from my Time machine backup.
I was contemplating trying to install Mavericks 1 more time and tried making a boot disk using Lion Disk Maker. The process failed and I was getting the message, "Root is not in the sudoers file" When I've doe a bit more investigating it seems that there may be a problem with my sudo file.
When I tried to create the boot disk from the terminal I get the message that my user account is not in the sudoers file. My user account has full admin privileges.
Can anybody that understands the terminal please tell me what I need to do?
Thanks
JohnJohn,
Since you cannot use sudo, corrective choices dwindle to either root (superuser) privileges, or reinstalling OS X. Apple has an assistance article on superuser. You should treat root privileges with the utmost respect, use it to solve this particular problem, and then resort only to sudo when necessary. My root is enabled and I never use it -- which begs for me to deactivate it.
The ownership on /etc/sudoers is root, wheel — and the permissions are 440 (-r--r-----).
Hopefully, you have a rudimentary vi editor knowledge, as the correct tool for editing the sudoers file is /usr/sbin/visudo.
There are only two active privilege lines in my /etc/sudoers file:
root
%admin
Hope this helps. -
Help needed using content and structure functionality
Several times now I have had users who wanted to move libraries or lists, etc. from one place within a site collection to another.
The problem is that often, when they go into content and structure, select their source, the only action that appears is Delete, rather than also the copy or move functionality.
Even when I connect to the farm with the farm account, I see the same issue - the copy and move actions are greyed out. The farm account is one of the site collection owners, as well as of course in the farm admin group.
Are there certain types of things which cannot be copied or moved? One user is just trying to move a folder of files from a document library to a different location (from working to completed), while another user wants to move most of the files from an old
project to a new project.
I am having a tough time understanding why sometimes this works and sometimes it doesn't.Thank you for your answer. The user did try to use the windows explorer method, and got an error saying that the operation could not find the source.
I appreciate the note about moving the files individually. I have suggested that.
I also appreciate the caution about using move not copy if the versions are needed.
In one case we have a user who is trying to consolidate 2 different sharepoint sites into 1 site.
She has asked about moving one into the other.
I presume that any moving that takes place will overwrite an object of the same name that exists on the other side? Or is there a prompt to the user before the overwrite takes place?
Thank you so much for your help. -
Help needed in encrypting and decrypting a file
Hello,
I just started looking into the Java Security.I need to encrypt a file using any popular alogrithm like RSA or DES and write it to disk.and again decrypt this file at a later time when needed.
I was checking out with different ways of doing so,but found it difficult to persist the key some where.
Could some one help me in this regard,with a tutorial or a sample program where I will be able to give cleartext file as an input and get a ciphered text file as output and vice versa?Probably the simplest solution is to use password-based encryption (PBE). See http://java.sun.com/j2se/1.5.0/docs/guide/security/CryptoSpec.html#PBEEx
for an example. -
Help needed in Drag and Drop and resizing of image icons
Hi all,
I'm doing a project on Drag and Drop and resizing of image icons.
There is one DragContainer in which i have loaded the image icons and i want to drop these image icons on to the DropContainer.
After Dropping these icons on to the DropContainer i need to resize them.
I have used the Rectangle object in resizing.
The problem now i'm facing is when i drag, drop and resize an image icon and when i try to drag, drop a second image icon the first image icon gets erased.
can any one help me in fixing this error.
if u want i can provide the source code.
thanks in advance
muralithe major restrictions in its implemented only in
jdk1.1.Why! -
Help needed w/ JDeveloper and Raptor not working for me in 10.4
Well, I've been successfully running the previous version of JDeveloper, 10.1.2.0.0 (Build 1811) for a few months on my OS X, Tiger (10.4) laptop. I recently tried to get Project Raptor running. I'm using Apple's version of Java from Software Update, J2SE 5.0 Release 3 which is the most up-to-date version I can find anywhere.
My problem is this. I can do most anything fine, but as soon as I try to Debug an PL/SQL function in either Raptor, or the JDeveloper 10.1.3 build I get an error "Unsupported feature Vendor Code 17023" when I click OK in the Debug PL/SQL dialog box.
Thing is that this works just fine in JDeveloper 10.1.2.0.0 (Build 1811). The thing that is interesting is the 10.1.2 JDeveloper uses the Java 1.4.2 where Raptor and JDeveoper 10.1.3 use the Java 1.5, I'm guessing it's a problem in Apple's Java 1.5 but can anyone else verify this or offer help to how I can make it work?
tksI fail to get the error message you describe. What I get is:
===========================
Connecting to the database test10.
Executing PL/SQL: ALTER SESSION SET PLSQL_DEBUG=TRUE
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '10.0.1.103', '52221' )
Debugger accepted connection from database on port 52221.
Processing 59 classes that have already been prepared...
Finished processing prepared classes.
===========================
Is this ok ?
In the console log I got:
sh ./raptorOracle Raptor 1.0
Copyright (c) 2005 Oracle Corporation. All Rights Reserved.
Working directory is /Users/ronr/Desktop/raptor/jdev/bin
Initializing.. oracle.dbtools.raptor.explorer.jdev.ConnectionDialogAddin@1972bf
Assert: Unknown Node:8: USER
Assert: Unknown Node:8: SHARED QUERIES
Assert: Unknown Node:8: TABLE EDITORS
Assert: Unknown Node:8: VIEWS
Assert: Unknown Node:8: MVIEWS
Assert: Unknown Node:8: SYNONYM
Assert: Unknown Node:8: SEQ
Assert: Unknown Node:8: Recycle Bin
Assert: Unknown Node:8: DB Link
Assert: Unknown Node:8: MVIEW LOG
Assert: Unknown Node:8: PLSQL
Assert: Unknown Node:8: TRigger
Assert: Unknown Node:8: INDEX
Assert: SQLView initedException in thread "JPDA Event Processor" java.lang.IllegalAccessError: tried to access class com.sun.tools.jdi.VirtualMachineImpl from class com.sun.tools.jdi.OracleReferenceTypeImpl
at com.sun.tools.jdi.OracleReferenceTypeImpl.<init>(OracleReferenceTypeImpl.java:60)
at com.sun.tools.jdi.OracleReferenceTypeImpl.convert(OracleReferenceTypeImpl.java:203)
at com.sun.jdi.OracleExtension.convert(OracleExtension.java:38)
at oracle.jdevimpl.debugger.jdi.DebugJDI.getOracleReferenceType(DebugJDI.java:559)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClass(DebugJDI.java:626)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClassForReferenceType(DebugJDI.java:549)
at oracle.jdevimpl.debugger.jdi.DebugJDI.run(DebugJDI.java:2651)
at java.lang.Thread.run(Thread.java:613)
Assert: Finding Context Menu for:FUNCTION_FOLDER
Exception in thread "JPDA Event Processor" java.lang.IllegalAccessError: tried to access class com.sun.tools.jdi.VirtualMachineImpl from class com.sun.tools.jdi.OracleReferenceTypeImpl
at com.sun.tools.jdi.OracleReferenceTypeImpl.<init>(OracleReferenceTypeImpl.java:60)
at com.sun.tools.jdi.OracleReferenceTypeImpl.convert(OracleReferenceTypeImpl.java:203)
at com.sun.jdi.OracleExtension.convert(OracleExtension.java:38)
at oracle.jdevimpl.debugger.jdi.DebugJDI.getOracleReferenceType(DebugJDI.java:559)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClass(DebugJDI.java:626)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClassForReferenceType(DebugJDI.java:549)
at oracle.jdevimpl.debugger.jdi.DebugJDI.run(DebugJDI.java:2651)
at java.lang.Thread.run(Thread.java:613)
Exception in thread "JPDA Event Processor" java.lang.IllegalAccessError: tried to access class com.sun.tools.jdi.VirtualMachineImpl from class com.sun.tools.jdi.OracleReferenceTypeImpl
at com.sun.tools.jdi.OracleReferenceTypeImpl.<init>(OracleReferenceTypeImpl.java:60)
at com.sun.tools.jdi.OracleReferenceTypeImpl.convert(OracleReferenceTypeImpl.java:203)
at com.sun.jdi.OracleExtension.convert(OracleExtension.java:38)
at oracle.jdevimpl.debugger.jdi.DebugJDI.getOracleReferenceType(DebugJDI.java:559)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClass(DebugJDI.java:626)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClassForReferenceType(DebugJDI.java:549)
at oracle.jdevimpl.debugger.jdi.DebugJDI.run(DebugJDI.java:2651)
at java.lang.Thread.run(Thread.java:613)
Exception in thread "JPDA Event Processor" java.lang.IllegalAccessError: tried to access class com.sun.tools.jdi.VirtualMachineImpl from class com.sun.tools.jdi.OracleReferenceTypeImpl
at com.sun.tools.jdi.OracleReferenceTypeImpl.<init>(OracleReferenceTypeImpl.java:60)
at com.sun.tools.jdi.OracleReferenceTypeImpl.convert(OracleReferenceTypeImpl.java:203)
at com.sun.jdi.OracleExtension.convert(OracleExtension.java:38)
at oracle.jdevimpl.debugger.jdi.DebugJDI.getOracleReferenceType(DebugJDI.java:559)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClass(DebugJDI.java:626)
at oracle.jdevimpl.debugger.jdi.DebugJDI.addClassForReferenceType(DebugJDI.java:549)
at oracle.jdevimpl.debugger.jdi.DebugJDI.run(DebugJDI.java:2651)
at java.lang.Thread.run(Thread.java:613)
In jdev/bin/raptor.conf I had to set:
SetSkipJ2SDKCheck true
I use:
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/
Ronald. -
Help Needed With Scrollbar and Content
I'm having a difficult time with the Scrollbar component. I'm trying to have a scrollbar set up to navigate a text field or a MC of a text field. I managed to get it functioning within the desired frame, however when I jump to another frame, that very same content appears on the other frame, despite the fact that said frame did not have the scrollbar nor the content pasted within.
The bar seems to do what I want it to do save for the unwelcomed presence outside of the frame of choice. Here's the code I'm using. This is the keyframe code:
import boppreh.ui.Scrollbar
var scrollbar1:Scrollbar = new Scrollbar(boomboom, 500, true, false, 293, bar, slider, arrowUp, arrowDown)
addChild(scrollbar1)
scrollbar1.x = 50
scrollbar1.y = 50
And this is the code found in the AS file:
package boppreh.ui
import flash.display.*
import flash.events.*
import flash.geom.Rectangle;
import flash.utils.Timer
import flash.ui.Keyboard
* Scrollbar to handle single display objects.
* Author: Lucas Boppre Niehues ([email protected])
* Date: 09/02/2010
public class Scrollbar extends Sprite {
/// The default width for the default slider, bar and arrows, as well as the default arrows' height
public static const DEFAULT_SIDE:Number = 20
/// The delay (in milliseconds) between clicking and holding an arrow and the slider moving continously
public static var SCROLL_DELAY:Number = 300
/// The number of lines to be scrolled every second during continous scrolling
public static var LINES_PER_SECOND:Number = 1.5
/// Number of pixels to be scrolled for each mouse wheel line (default lines per wheel tick is 3)
public static var PIXELS_PER_LINE:Number = 16
protected var windowSize:Number
protected var contentPadding:Number
protected var isVertical:Boolean
/// Stored movement to be applied on the next "scroll()" call
protected var movement:Number
/// Timer used to control the delay before continous scrolling
protected var timer:Timer
protected var content:DisplayObject
protected var contentBounds:Rectangle
protected var bar:InteractiveObject
protected var arrowUp:InteractiveObject
protected var arrowDown:InteractiveObject
protected var slider:InteractiveObject
protected var partHold:InteractiveObject
protected function get eventOrigin():String {
if (partHold == arrowUp)
return ScrollEvent.ARROW_UP
else if (partHold == arrowDown)
return ScrollEvent.ARROW_DOWN
else if (partHold == bar)
return ScrollEvent.BAR
throw new Error("Unkown event origin.")
private var mouseOffset:Number
protected function get maxContentPos():Number {
if (isVertical)
return -(contentBounds.height - windowSize) - 1
else
return -(contentBounds.width - windowSize) - 1
/// The content's current position, in a scale from 0 to 1
public function get position():Number {
if (isVertical)
return contentBounds.y / maxContentPos
else
return contentBounds.x / maxContentPos
public function set position(value:Number) {
value = Math.min(1, Math.max(value, 0))
var newContentPos:Number = value * maxContentPos
setPosition(content, isVertical ? null : newContentPos, isVertical ? newContentPos : null, false, false)
contentBounds = content.getBounds(this)
if (isVertical) {
bar.height = windowSize - (arrowUp.height + arrowDown.height)
slider.height = (windowSize / Math.max(contentBounds.height, windowSize)) * bar.height
var newSliderY:Number = arrowUp.height + (-newContentPos / contentBounds.height) * bar.height
setPosition(slider, null, newSliderY, false, false)
} else {
bar.width = windowSize - (arrowUp.width + arrowDown.width)
slider.width = (windowSize / Math.max(contentBounds.width, windowSize)) * bar.width
var newSliderX:Number = arrowUp.width + (-newContentPos / contentBounds.width) * bar.width
setPosition(slider, newSliderX, null, false, false)
updatePartsPositions()
* Creates a new Scrollbar object to scroll a single Display Object.
* @param content the object to be scrolled
* @param windowSize the height or width of the scrollbar, depending if it's vertical or not; i.e.: the dimension of the content's visible part
* @param isVertical defines if the scrollbar's parts should be placed on the right or bottom of the content, and if the content should be scrolled upways or to the right
* @param autoUpdate automatically checks for dimensions changes in any part and updates accordingly. Use only if the content will be resized
* @param contentPadding the distance between the content and all the other parts
* @param bar the bar object to be used; if null, a default one will be used
* @param slider the slider object to be used; if null, a default one will be used
* @param arrowUp the arrow up/left object to be used; if null, a default one will be used
* @param arrowDown the arrow down/right object to be used; if null, a default one will be used
public function Scrollbar(content:DisplayObject, windowSize:Number, isVertical:Boolean=true, autoUpdate:Boolean=false, contentPadding:Number=5, bar:InteractiveObject=null, slider:InteractiveObject=null, arrowUp:InteractiveObject=null, arrowDown:InteractiveObject=null) {
this.content = content
this.windowSize = windowSize
this.contentPadding = contentPadding
this.isVertical = isVertical
this.bar = bar || createDefaultBar()
this.arrowUp = arrowUp || createDefaultArrow(false)
this.arrowDown = arrowDown || createDefaultArrow(true)
this.slider = slider || createDefaultSlider()
timer = new Timer(SCROLL_DELAY)
timer.addEventListener(TimerEvent.TIMER, startScrolling)
addParts()
if (autoUpdate)
this.addEventListener(Event.ENTER_FRAME, update)
configureListeners()
update()
position = 0
protected function scroll(e:*= null):void {
// This nested if forbids the slider to continue moving if the user is
// "holding" the bar and the slider already reached the mouse position
if (e && (e is Event) && (Event(e).type == Event.ENTER_FRAME)) {
if (partHold == bar) {
var sliderBounds:Rectangle = slider.getBounds(this)
if (isVertical) {
if (mouseY > sliderBounds.top && mouseY < sliderBounds.bottom) {
stopScrolling()
return
} else {
if (mouseX > sliderBounds.left && mouseX < sliderBounds.right) {
stopScrolling()
return
scrollPixels(movement)
* Scrolls the content by the specified ammount.
* @param number number of pixels to be scrolled
protected function scrollPixels(number:Number):void {
position += number / -maxContentPos
protected function configureListeners():void {
slider.addEventListener(MouseEvent.MOUSE_DOWN, startSliderDrag)
for each (var part:InteractiveObject in [arrowUp, arrowDown, bar]) {
part.addEventListener(MouseEvent.MOUSE_DOWN, fixedPart_onMouseDownHandler)
addEventListener(MouseEvent.MOUSE_WHEEL, mouse_onWheelScrollHandler)
addEventListener(KeyboardEvent.KEY_DOWN, keyboard_onKeyDownHandler)
protected function fixedPart_onMouseDownHandler(event:MouseEvent):void
partHold = InteractiveObject(event.currentTarget)
if (partHold == arrowUp) {
movement = -PIXELS_PER_LINE
} else if (partHold == arrowDown) {
movement = PIXELS_PER_LINE
} else if (partHold == bar) {
var sliderBounds:Rectangle = slider.getBounds(this)
if (isVertical) {
if (mouseY > (sliderBounds.top + sliderBounds.height / 2))
movement = windowSize
else
movement = -windowSize
} else {
if (mouseX > (sliderBounds.left + sliderBounds.width / 2))
movement = windowSize
else
movement = -windowSize
scroll()
dispatchEvent(new ScrollEvent(ScrollEvent.SCROLL, eventOrigin))
stage.addEventListener(MouseEvent.MOUSE_UP, stopScrolling)
partHold.addEventListener(MouseEvent.MOUSE_OUT, stopScrolling)
timer.start()
protected function keyboard_onKeyDownHandler(event:KeyboardEvent):void {
switch (event.keyCode) {
case Keyboard.UP:
case Keyboard.LEFT:
movement = -PIXELS_PER_LINE
break
case Keyboard.DOWN:
case Keyboard.RIGHT:
movement = PIXELS_PER_LINE
break
case Keyboard.SPACE:
case Keyboard.PAGE_DOWN:
movement = windowSize
break
case Keyboard.PAGE_UP:
movement = -windowSize
break
case Keyboard.HOME:
movement = 0
position = 0
break
case Keyboard.END:
movement = 0
position = 100
break
default:
return
scroll()
dispatchEvent(new ScrollEvent(ScrollEvent.SCROLL, ScrollEvent.KEYBOARD))
protected function startScrolling(e:*=null):void {
timer.reset()
this.addEventListener(Event.ENTER_FRAME, scroll)
movement = (movement * (LINES_PER_SECOND * PIXELS_PER_LINE)) / stage.frameRate
dispatchEvent(new ScrollEvent(ScrollEvent.CONTINOUS_SCROLL_START, eventOrigin))
protected function stopScrolling(e:*=null) {
timer.stop()
this.removeEventListener(Event.ENTER_FRAME, scroll)
stage.removeEventListener(KeyboardEvent.KEY_UP, stopScrolling)
stage.removeEventListener(MouseEvent.MOUSE_UP, stopScrolling)
dispatchEvent(new ScrollEvent(ScrollEvent.CONTINOUS_SCROLL_STOP, eventOrigin))
if (partHold) {
partHold.removeEventListener(MouseEvent.MOUSE_OUT, stopScrolling)
partHold = null
protected function mouse_onWheelScrollHandler(event:MouseEvent) {
// The mouse wheel delta arrives inverted
var delta:int = -event.delta
movement = delta * PIXELS_PER_LINE
scroll()
dispatchEvent(new ScrollEvent(ScrollEvent.SCROLL, ScrollEvent.MOUSE_WHEEL))
//{ region Slider Drag functions
protected function startSliderDrag(event:MouseEvent) {
if (isVertical)
mouseOffset = slider.getBounds(this).y - this.mouseY
else
mouseOffset = slider.getBounds(this).x - this.mouseX
stage.addEventListener(MouseEvent.MOUSE_MOVE, onSliderDrag)
stage.addEventListener(MouseEvent.MOUSE_UP, stopSliderDrag)
dispatchEvent(new ScrollEvent(ScrollEvent.SLIDER_DRAG_START, ScrollEvent.SLIDER))
protected function stopSliderDrag(event:MouseEvent) {
stage.removeEventListener(MouseEvent.MOUSE_UP, stopSliderDrag)
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onSliderDrag)
dispatchEvent(new ScrollEvent(ScrollEvent.SLIDER_DRAG_STOP, ScrollEvent.SLIDER))
protected function onSliderDrag(event:MouseEvent) {
if (isVertical) {
if (bar.height == slider.height)
return
} else {
if (bar.width == slider.width)
return
if (isVertical)
position = (this.mouseY + mouseOffset - arrowUp.height) / (bar.height - slider.height)
else
position = (this.mouseX + mouseOffset - arrowUp.width) / (bar.width - slider.width)
//} endregion
//{ region Visual functions
/// Adds all required parts to the scrollbar's display list
protected function addParts():void {
setPosition(content, 0, 0, false, false)
addChild(this.bar)
addChild(this.arrowUp)
addChild(this.arrowDown)
addChild(this.slider)
addChild(this.content)
* Updates all parts to fit the new dimensions and positions.
public function update(e:*= null):void {
contentBounds = content.getBounds(this)
updatePartsPositions()
// Ugly, but updates everything that was not update in the above call based on the content's position and size
position = position
protected function updatePartsPositions(event:Event = null):void {
if (isVertical) {
// The parts width is divided by 2 because they will be center aligned
var newX:Number = contentBounds.width +
contentPadding +
Math.max(slider.width, arrowUp.width, arrowDown.width, bar.width) / 2
setPosition(arrowUp, newX, 0, true, false)
setPosition(bar, newX, arrowUp.height, true, false)
setPosition(arrowDown, newX, arrowUp.height + bar.height, true, false)
setPosition(slider, newX, null, true, false)
} else {
var newY:Number = contentBounds.height +
contentPadding +
Math.max(slider.height, arrowUp.height, arrowDown.height, bar.height) / 2
setPosition(arrowUp, 0, newY, false, true)
setPosition(bar, arrowUp.width, newY, false, true)
setPosition(arrowDown, arrowUp.width + bar.width, newY, false, true)
setPosition(slider, null, newY, false, true)
updateMask()
private function updateMask():void {
if (content.mask && this.contains(content.mask))
removeChild(content.mask)
var contentMask:Sprite = createWindowMask()
addChild(contentMask)
content.mask = contentMask
protected function setPosition(part:DisplayObject, newX:Object=null, newY:Object=null, alignHorizontal:Boolean=false, alignVertical:Boolean=false):void {
var bounds:Rectangle = part.getBounds(this)
if (newX is Number)
part.x = int(newX) + (part.x - bounds.x) - ((alignHorizontal) ? bounds.width / 2 : 0)
if (newY is Number)
part.y = int(newY) + (part.y - bounds.y) - ((alignVertical) ? bounds.height / 2 : 0)
//} endregion
//{ region Functions to draw parts
private function createDefaultBar():Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(1)
image.graphics.beginFill(0xFFFFFF)
if (isVertical)
image.graphics.drawRect(0, 0, DEFAULT_SIDE, windowSize - DEFAULT_SIDE * 2)
else
image.graphics.drawRect(0, 0, windowSize - DEFAULT_SIDE * 2, DEFAULT_SIDE)
image.graphics.endFill()
//image.buttonMode = true
return image
private function createDefaultArrow(inverted:Boolean):Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(1)
image.graphics.beginFill(0xBFBFBF)
image.graphics.drawRect(0, 0, DEFAULT_SIDE, DEFAULT_SIDE)
image.graphics.endFill()
image.graphics.lineStyle(3)
if (isVertical) {
if (inverted) {
image.graphics.moveTo(4, 4)
image.graphics.lineTo(10, 16)
image.graphics.lineTo(16, 4)
} else {
image.graphics.moveTo(4, 16)
image.graphics.lineTo(10, 4)
image.graphics.lineTo(16, 16)
} else {
if (inverted) {
image.graphics.moveTo(4, 4)
image.graphics.lineTo(16, 10)
image.graphics.lineTo(4, 16)
} else {
image.graphics.moveTo(16, 4)
image.graphics.lineTo(4, 10)
image.graphics.lineTo(16, 16)
image.buttonMode = true
return image
private function createDefaultSlider():Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(1)
image.graphics.beginFill(0xBFBFBF)
if (isVertical)
image.graphics.drawRect(0, 0, DEFAULT_SIDE, windowSize - DEFAULT_SIDE * 2)
else
image.graphics.drawRect(0, 0, windowSize - DEFAULT_SIDE * 2, DEFAULT_SIDE)
image.graphics.endFill()
image.buttonMode = true
return image
private function createWindowMask():Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(0)
image.graphics.beginFill(0x000000, 1)
if (isVertical)
image.graphics.drawRect(0, 0, content.width + 1, windowSize)
else
image.graphics.drawRect(0, 0, windowSize, content.width + 1)
image.graphics.endFill()
image.alpha = 0
return image
//} endregion
And this is the ScrollEvent AS file:
package boppreh.ui
import flash.events.Event;
* Events related to the Scrollbar class.
* Author: Lucas Boppre Niehues ([email protected])
* Date: 09/02/2010
public class ScrollEvent extends Event
/// Dispatched when a scroll movement occurs
public static const SCROLL:String = "scroll"
/// Dispatched when the user has clicked and is holding an arrow or the bar
public static const CONTINOUS_SCROLL_START:String = "continous scroll start"
/// Dispatched when the user has clicked and dropped an arrow or the bar
public static const CONTINOUS_SCROLL_STOP:String = "continous scroll stop"
/// Dispatched when the user starts dragging the slider part
public static const SLIDER_DRAG_START:String = "slider drag start"
/// Dispatched when the user stops dragging the slider part
public static const SLIDER_DRAG_STOP:String = "slider drag stop"
/// Origin type representing the arrow up part
public static const ARROW_UP:String = "arrow up"
/// Origin type representing the arrow down part
public static const ARROW_DOWN:String = "arrow down"
/// Origin type representing the bar part
public static const BAR:String = "part"
/// Origin type representing the slider part
public static const SLIDER:String = "slider"
/// Origin type representing the keyboard
public static const KEYBOARD:String = "keyboard"
/// Origin type representing the mouse wheel
public static const MOUSE_WHEEL:String = "mouse wheel"
public var origin:String
* Creates a new ScrollEvent object.
* @param type the object type (first group of declared constants)
* @param origin the object that originated the event (second group of declared constants)
public function ScrollEvent (type:String, origin:String, bubbles:Boolean = false, cancelable:Boolean = false) {
this.origin = origin
super(type, bubbles, cancelable)
Any help would be appreciated. I've been stuck here all day.I'm having a difficult time with the Scrollbar component. I'm trying to have a scrollbar set up to navigate a text field or a MC of a text field. I managed to get it functioning within the desired frame, however when I jump to another frame, that very same content appears on the other frame, despite the fact that said frame did not have the scrollbar nor the content pasted within.
The bar seems to do what I want it to do save for the unwelcomed presence outside of the frame of choice. Here's the code I'm using. This is the keyframe code:
import boppreh.ui.Scrollbar
var scrollbar1:Scrollbar = new Scrollbar(boomboom, 500, true, false, 293, bar, slider, arrowUp, arrowDown)
addChild(scrollbar1)
scrollbar1.x = 50
scrollbar1.y = 50
And this is the code found in the AS file:
package boppreh.ui
import flash.display.*
import flash.events.*
import flash.geom.Rectangle;
import flash.utils.Timer
import flash.ui.Keyboard
* Scrollbar to handle single display objects.
* Author: Lucas Boppre Niehues ([email protected])
* Date: 09/02/2010
public class Scrollbar extends Sprite {
/// The default width for the default slider, bar and arrows, as well as the default arrows' height
public static const DEFAULT_SIDE:Number = 20
/// The delay (in milliseconds) between clicking and holding an arrow and the slider moving continously
public static var SCROLL_DELAY:Number = 300
/// The number of lines to be scrolled every second during continous scrolling
public static var LINES_PER_SECOND:Number = 1.5
/// Number of pixels to be scrolled for each mouse wheel line (default lines per wheel tick is 3)
public static var PIXELS_PER_LINE:Number = 16
protected var windowSize:Number
protected var contentPadding:Number
protected var isVertical:Boolean
/// Stored movement to be applied on the next "scroll()" call
protected var movement:Number
/// Timer used to control the delay before continous scrolling
protected var timer:Timer
protected var content:DisplayObject
protected var contentBounds:Rectangle
protected var bar:InteractiveObject
protected var arrowUp:InteractiveObject
protected var arrowDown:InteractiveObject
protected var slider:InteractiveObject
protected var partHold:InteractiveObject
protected function get eventOrigin():String {
if (partHold == arrowUp)
return ScrollEvent.ARROW_UP
else if (partHold == arrowDown)
return ScrollEvent.ARROW_DOWN
else if (partHold == bar)
return ScrollEvent.BAR
throw new Error("Unkown event origin.")
private var mouseOffset:Number
protected function get maxContentPos():Number {
if (isVertical)
return -(contentBounds.height - windowSize) - 1
else
return -(contentBounds.width - windowSize) - 1
/// The content's current position, in a scale from 0 to 1
public function get position():Number {
if (isVertical)
return contentBounds.y / maxContentPos
else
return contentBounds.x / maxContentPos
public function set position(value:Number) {
value = Math.min(1, Math.max(value, 0))
var newContentPos:Number = value * maxContentPos
setPosition(content, isVertical ? null : newContentPos, isVertical ? newContentPos : null, false, false)
contentBounds = content.getBounds(this)
if (isVertical) {
bar.height = windowSize - (arrowUp.height + arrowDown.height)
slider.height = (windowSize / Math.max(contentBounds.height, windowSize)) * bar.height
var newSliderY:Number = arrowUp.height + (-newContentPos / contentBounds.height) * bar.height
setPosition(slider, null, newSliderY, false, false)
} else {
bar.width = windowSize - (arrowUp.width + arrowDown.width)
slider.width = (windowSize / Math.max(contentBounds.width, windowSize)) * bar.width
var newSliderX:Number = arrowUp.width + (-newContentPos / contentBounds.width) * bar.width
setPosition(slider, newSliderX, null, false, false)
updatePartsPositions()
* Creates a new Scrollbar object to scroll a single Display Object.
* @param content the object to be scrolled
* @param windowSize the height or width of the scrollbar, depending if it's vertical or not; i.e.: the dimension of the content's visible part
* @param isVertical defines if the scrollbar's parts should be placed on the right or bottom of the content, and if the content should be scrolled upways or to the right
* @param autoUpdate automatically checks for dimensions changes in any part and updates accordingly. Use only if the content will be resized
* @param contentPadding the distance between the content and all the other parts
* @param bar the bar object to be used; if null, a default one will be used
* @param slider the slider object to be used; if null, a default one will be used
* @param arrowUp the arrow up/left object to be used; if null, a default one will be used
* @param arrowDown the arrow down/right object to be used; if null, a default one will be used
public function Scrollbar(content:DisplayObject, windowSize:Number, isVertical:Boolean=true, autoUpdate:Boolean=false, contentPadding:Number=5, bar:InteractiveObject=null, slider:InteractiveObject=null, arrowUp:InteractiveObject=null, arrowDown:InteractiveObject=null) {
this.content = content
this.windowSize = windowSize
this.contentPadding = contentPadding
this.isVertical = isVertical
this.bar = bar || createDefaultBar()
this.arrowUp = arrowUp || createDefaultArrow(false)
this.arrowDown = arrowDown || createDefaultArrow(true)
this.slider = slider || createDefaultSlider()
timer = new Timer(SCROLL_DELAY)
timer.addEventListener(TimerEvent.TIMER, startScrolling)
addParts()
if (autoUpdate)
this.addEventListener(Event.ENTER_FRAME, update)
configureListeners()
update()
position = 0
protected function scroll(e:*= null):void {
// This nested if forbids the slider to continue moving if the user is
// "holding" the bar and the slider already reached the mouse position
if (e && (e is Event) && (Event(e).type == Event.ENTER_FRAME)) {
if (partHold == bar) {
var sliderBounds:Rectangle = slider.getBounds(this)
if (isVertical) {
if (mouseY > sliderBounds.top && mouseY < sliderBounds.bottom) {
stopScrolling()
return
} else {
if (mouseX > sliderBounds.left && mouseX < sliderBounds.right) {
stopScrolling()
return
scrollPixels(movement)
* Scrolls the content by the specified ammount.
* @param number number of pixels to be scrolled
protected function scrollPixels(number:Number):void {
position += number / -maxContentPos
protected function configureListeners():void {
slider.addEventListener(MouseEvent.MOUSE_DOWN, startSliderDrag)
for each (var part:InteractiveObject in [arrowUp, arrowDown, bar]) {
part.addEventListener(MouseEvent.MOUSE_DOWN, fixedPart_onMouseDownHandler)
addEventListener(MouseEvent.MOUSE_WHEEL, mouse_onWheelScrollHandler)
addEventListener(KeyboardEvent.KEY_DOWN, keyboard_onKeyDownHandler)
protected function fixedPart_onMouseDownHandler(event:MouseEvent):void
partHold = InteractiveObject(event.currentTarget)
if (partHold == arrowUp) {
movement = -PIXELS_PER_LINE
} else if (partHold == arrowDown) {
movement = PIXELS_PER_LINE
} else if (partHold == bar) {
var sliderBounds:Rectangle = slider.getBounds(this)
if (isVertical) {
if (mouseY > (sliderBounds.top + sliderBounds.height / 2))
movement = windowSize
else
movement = -windowSize
} else {
if (mouseX > (sliderBounds.left + sliderBounds.width / 2))
movement = windowSize
else
movement = -windowSize
scroll()
dispatchEvent(new ScrollEvent(ScrollEvent.SCROLL, eventOrigin))
stage.addEventListener(MouseEvent.MOUSE_UP, stopScrolling)
partHold.addEventListener(MouseEvent.MOUSE_OUT, stopScrolling)
timer.start()
protected function keyboard_onKeyDownHandler(event:KeyboardEvent):void {
switch (event.keyCode) {
case Keyboard.UP:
case Keyboard.LEFT:
movement = -PIXELS_PER_LINE
break
case Keyboard.DOWN:
case Keyboard.RIGHT:
movement = PIXELS_PER_LINE
break
case Keyboard.SPACE:
case Keyboard.PAGE_DOWN:
movement = windowSize
break
case Keyboard.PAGE_UP:
movement = -windowSize
break
case Keyboard.HOME:
movement = 0
position = 0
break
case Keyboard.END:
movement = 0
position = 100
break
default:
return
scroll()
dispatchEvent(new ScrollEvent(ScrollEvent.SCROLL, ScrollEvent.KEYBOARD))
protected function startScrolling(e:*=null):void {
timer.reset()
this.addEventListener(Event.ENTER_FRAME, scroll)
movement = (movement * (LINES_PER_SECOND * PIXELS_PER_LINE)) / stage.frameRate
dispatchEvent(new ScrollEvent(ScrollEvent.CONTINOUS_SCROLL_START, eventOrigin))
protected function stopScrolling(e:*=null) {
timer.stop()
this.removeEventListener(Event.ENTER_FRAME, scroll)
stage.removeEventListener(KeyboardEvent.KEY_UP, stopScrolling)
stage.removeEventListener(MouseEvent.MOUSE_UP, stopScrolling)
dispatchEvent(new ScrollEvent(ScrollEvent.CONTINOUS_SCROLL_STOP, eventOrigin))
if (partHold) {
partHold.removeEventListener(MouseEvent.MOUSE_OUT, stopScrolling)
partHold = null
protected function mouse_onWheelScrollHandler(event:MouseEvent) {
// The mouse wheel delta arrives inverted
var delta:int = -event.delta
movement = delta * PIXELS_PER_LINE
scroll()
dispatchEvent(new ScrollEvent(ScrollEvent.SCROLL, ScrollEvent.MOUSE_WHEEL))
//{ region Slider Drag functions
protected function startSliderDrag(event:MouseEvent) {
if (isVertical)
mouseOffset = slider.getBounds(this).y - this.mouseY
else
mouseOffset = slider.getBounds(this).x - this.mouseX
stage.addEventListener(MouseEvent.MOUSE_MOVE, onSliderDrag)
stage.addEventListener(MouseEvent.MOUSE_UP, stopSliderDrag)
dispatchEvent(new ScrollEvent(ScrollEvent.SLIDER_DRAG_START, ScrollEvent.SLIDER))
protected function stopSliderDrag(event:MouseEvent) {
stage.removeEventListener(MouseEvent.MOUSE_UP, stopSliderDrag)
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onSliderDrag)
dispatchEvent(new ScrollEvent(ScrollEvent.SLIDER_DRAG_STOP, ScrollEvent.SLIDER))
protected function onSliderDrag(event:MouseEvent) {
if (isVertical) {
if (bar.height == slider.height)
return
} else {
if (bar.width == slider.width)
return
if (isVertical)
position = (this.mouseY + mouseOffset - arrowUp.height) / (bar.height - slider.height)
else
position = (this.mouseX + mouseOffset - arrowUp.width) / (bar.width - slider.width)
//} endregion
//{ region Visual functions
/// Adds all required parts to the scrollbar's display list
protected function addParts():void {
setPosition(content, 0, 0, false, false)
addChild(this.bar)
addChild(this.arrowUp)
addChild(this.arrowDown)
addChild(this.slider)
addChild(this.content)
* Updates all parts to fit the new dimensions and positions.
public function update(e:*= null):void {
contentBounds = content.getBounds(this)
updatePartsPositions()
// Ugly, but updates everything that was not update in the above call based on the content's position and size
position = position
protected function updatePartsPositions(event:Event = null):void {
if (isVertical) {
// The parts width is divided by 2 because they will be center aligned
var newX:Number = contentBounds.width +
contentPadding +
Math.max(slider.width, arrowUp.width, arrowDown.width, bar.width) / 2
setPosition(arrowUp, newX, 0, true, false)
setPosition(bar, newX, arrowUp.height, true, false)
setPosition(arrowDown, newX, arrowUp.height + bar.height, true, false)
setPosition(slider, newX, null, true, false)
} else {
var newY:Number = contentBounds.height +
contentPadding +
Math.max(slider.height, arrowUp.height, arrowDown.height, bar.height) / 2
setPosition(arrowUp, 0, newY, false, true)
setPosition(bar, arrowUp.width, newY, false, true)
setPosition(arrowDown, arrowUp.width + bar.width, newY, false, true)
setPosition(slider, null, newY, false, true)
updateMask()
private function updateMask():void {
if (content.mask && this.contains(content.mask))
removeChild(content.mask)
var contentMask:Sprite = createWindowMask()
addChild(contentMask)
content.mask = contentMask
protected function setPosition(part:DisplayObject, newX:Object=null, newY:Object=null, alignHorizontal:Boolean=false, alignVertical:Boolean=false):void {
var bounds:Rectangle = part.getBounds(this)
if (newX is Number)
part.x = int(newX) + (part.x - bounds.x) - ((alignHorizontal) ? bounds.width / 2 : 0)
if (newY is Number)
part.y = int(newY) + (part.y - bounds.y) - ((alignVertical) ? bounds.height / 2 : 0)
//} endregion
//{ region Functions to draw parts
private function createDefaultBar():Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(1)
image.graphics.beginFill(0xFFFFFF)
if (isVertical)
image.graphics.drawRect(0, 0, DEFAULT_SIDE, windowSize - DEFAULT_SIDE * 2)
else
image.graphics.drawRect(0, 0, windowSize - DEFAULT_SIDE * 2, DEFAULT_SIDE)
image.graphics.endFill()
//image.buttonMode = true
return image
private function createDefaultArrow(inverted:Boolean):Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(1)
image.graphics.beginFill(0xBFBFBF)
image.graphics.drawRect(0, 0, DEFAULT_SIDE, DEFAULT_SIDE)
image.graphics.endFill()
image.graphics.lineStyle(3)
if (isVertical) {
if (inverted) {
image.graphics.moveTo(4, 4)
image.graphics.lineTo(10, 16)
image.graphics.lineTo(16, 4)
} else {
image.graphics.moveTo(4, 16)
image.graphics.lineTo(10, 4)
image.graphics.lineTo(16, 16)
} else {
if (inverted) {
image.graphics.moveTo(4, 4)
image.graphics.lineTo(16, 10)
image.graphics.lineTo(4, 16)
} else {
image.graphics.moveTo(16, 4)
image.graphics.lineTo(4, 10)
image.graphics.lineTo(16, 16)
image.buttonMode = true
return image
private function createDefaultSlider():Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(1)
image.graphics.beginFill(0xBFBFBF)
if (isVertical)
image.graphics.drawRect(0, 0, DEFAULT_SIDE, windowSize - DEFAULT_SIDE * 2)
else
image.graphics.drawRect(0, 0, windowSize - DEFAULT_SIDE * 2, DEFAULT_SIDE)
image.graphics.endFill()
image.buttonMode = true
return image
private function createWindowMask():Sprite {
var image:Sprite = new Sprite()
image.graphics.lineStyle(0)
image.graphics.beginFill(0x000000, 1)
if (isVertical)
image.graphics.drawRect(0, 0, content.width + 1, windowSize)
else
image.graphics.drawRect(0, 0, windowSize, content.width + 1)
image.graphics.endFill()
image.alpha = 0
return image
//} endregion
And this is the ScrollEvent AS file:
package boppreh.ui
import flash.events.Event;
* Events related to the Scrollbar class.
* Author: Lucas Boppre Niehues ([email protected])
* Date: 09/02/2010
public class ScrollEvent extends Event
/// Dispatched when a scroll movement occurs
public static const SCROLL:String = "scroll"
/// Dispatched when the user has clicked and is holding an arrow or the bar
public static const CONTINOUS_SCROLL_START:String = "continous scroll start"
/// Dispatched when the user has clicked and dropped an arrow or the bar
public static const CONTINOUS_SCROLL_STOP:String = "continous scroll stop"
/// Dispatched when the user starts dragging the slider part
public static const SLIDER_DRAG_START:String = "slider drag start"
/// Dispatched when the user stops dragging the slider part
public static const SLIDER_DRAG_STOP:String = "slider drag stop"
/// Origin type representing the arrow up part
public static const ARROW_UP:String = "arrow up"
/// Origin type representing the arrow down part
public static const ARROW_DOWN:String = "arrow down"
/// Origin type representing the bar part
public static const BAR:String = "part"
/// Origin type representing the slider part
public static const SLIDER:String = "slider"
/// Origin type representing the keyboard
public static const KEYBOARD:String = "keyboard"
/// Origin type representing the mouse wheel
public static const MOUSE_WHEEL:String = "mouse wheel"
public var origin:String
* Creates a new ScrollEvent object.
* @param type the object type (first group of declared constants)
* @param origin the object that originated the event (second group of declared constants)
public function ScrollEvent (type:String, origin:String, bubbles:Boolean = false, cancelable:Boolean = false) {
this.origin = origin
super(type, bubbles, cancelable)
Any help would be appreciated. I've been stuck here all day.
Maybe you are looking for
-
MacBook Air "dead," 3 beeps on turn-on, dark screen
Pushing the power switch just gives repeating 3-beeps. If I hold the power button down it stops. Nothing on the screen. Any tips to resurrect it, or do I need to take it in to a store? Before it "bricked," within a few hours, twice it froze and I saw
-
Hi, I'm using Sql Developer 1.0.0.14.67 on Mac OS X Version 10.4.6. 1) When I click on a table,I dont Get Information Regarding Columns,Indexes,Constraints,Grants,Statistics,Triggers,SQl ... Only I get Data in the table. Whereas My Frnd who is using
-
HT204380 I do not have Face Time Icon in the Info Section of my Contacts
I don't have FaceTime, , though I have input their email addresses? How can I get FaceTime? I have an iPhone 4 with the latest OS installed! (this iPhone was purchased overseas, would that be the problem)? Is it an Apple problem or my carrier (AT&T)?
-
Hello Experts, Variable Dearness Allowance is a fixed amount that needs to be paid to a particular set of employees for my client. I wish to know how variable dearness allowance works. Following are the details I need to understand: 1. If an employe
-
Does N-Alvorix-RS880 BIOS have a UEFI/Legacy Switch?
p7-1010. Windows 8.1 64GB Ram Installed an EVGA GTX760 Graphics Card. Card works great in Windows. But I can't interact with the Setup screens for the BIOS update. And I have two bootable CD's that now also have initialization problems. EVGA suggest