<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3987590462196883647</id><updated>2011-11-27T15:36:39.114-08:00</updated><category term='About the blog'/><category term='Programming and Web Design'/><category term='Software projects'/><title type='text'>sparktask</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-3162985113368888200</id><published>2008-05-28T09:28:00.000-07:00</published><updated>2008-05-28T09:36:28.683-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming and Web Design'/><title type='text'>Finding rows associated with a maximum value in MySQL</title><content type='html'>&lt;div style="text-align: justify;"&gt;This example shows how to display the rows associated with a maximum value (or minimum) of a column. To illustrate this we'll look at the following scenario:&lt;br /&gt;&lt;br /&gt;We have a MySQL table called "employees" and we want to display the employees whose salaries (kept in the "salary" column) are equal to the maximum salary in the table. To do this, we must first find the maximum value:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;SELECT (@x:=MAX(salary)) FROM employees;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, we'll want to display all the information available on people who have that salary. Again, we do this using another SELECT instruction:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;SELECT * FROM employees WHERE salary=@x;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a simple example however a tough one to find on the Internet. Many thanks to Radu for helping me on this.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-3162985113368888200?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/3162985113368888200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=3162985113368888200' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/3162985113368888200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/3162985113368888200'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/finding-rows-associated-with-maximum.html' title='Finding rows associated with a maximum value in MySQL'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-6248835401379139617</id><published>2008-05-18T03:39:00.000-07:00</published><updated>2008-05-18T07:08:30.448-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software projects'/><title type='text'>Auto Web Page Browser</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;This application will cycle through a list of URLs you give it with a random delay in between each visit.&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;- cycle through a list of up to ten URLs&lt;br /&gt;- configure the delay between each visit to suit your own needs&lt;br /&gt;- easy to use&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How it works&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;Written in AutoIt v3, &lt;span style="font-style: italic;"&gt;Auto Web Page Browser&lt;/span&gt; is designed to read the specified URLs from a file and then visit each of them using Internet Explorer. Once an empty row or the end of the file is reached the program will automatically return to the top of the list.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Installing and using &lt;span style="font-style: italic;"&gt;Auto Web Page Browser&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;Download the program archive &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.mediafire.com/?rxe2gg9bg91"&gt;here&lt;/a&gt; &lt;/span&gt;(hosted at Media Fire)&lt;span style="font-weight: bold;"&gt;,&lt;/span&gt; extract it somewhere on your hard-drive (for example "C:\AWPB\") and edit &lt;span style="font-style: italic;"&gt;urls.txt&lt;/span&gt; with the list of URLs you want to visit. Save your changes and then run &lt;span style="font-style: italic;"&gt;awpb.exe&lt;/span&gt;. The program will now begin to visit each of the URLs you gave it.&lt;br /&gt;&lt;br /&gt;To close &lt;span style="font-style: italic;"&gt;Auto Web Page Browser&lt;/span&gt; right click its icon in the tray (the bottom right area of the screen) and click &lt;span style="font-style: italic;"&gt;Exit&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;To configure the delay between each visit, close &lt;span style="font-style: italic;"&gt;Auto Web Page Browser&lt;/span&gt;, open &lt;span style="font-style: italic;"&gt;awpb.ini&lt;/span&gt; and change the &lt;span style="font-style: italic;"&gt;delay&lt;/span&gt; key (by default it is set to 1,000 miliseconds). The minimum delay between visits is 3-6 seconds (with a &lt;span style="font-style: italic;"&gt;delay&lt;/span&gt; key of 0 miliseconds). For example, by setting the delay to 20,000, the program will wait from 23 to 26 seconds between each visit.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disclaimer: &lt;/span&gt;I did my best to ensure this program is bug free and safe to use, however I'm not responsible for any damage it may cause. Use it at your own risk.&lt;br /&gt;&lt;br /&gt;Feedback on this program is greatly appreciated. Whether or not this program will be upgraded in the future is entirely based on the amount of feedback I receive from its users.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-6248835401379139617?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/6248835401379139617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=6248835401379139617' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/6248835401379139617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/6248835401379139617'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/auto-web-page-browser.html' title='Auto Web Page Browser'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-5279968387366682818</id><published>2008-05-16T11:10:00.000-07:00</published><updated>2008-05-16T23:23:59.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming and Web Design'/><title type='text'>How to display HTML, PHP and JavaScript code on your blog</title><content type='html'>&lt;div style="text-align: justify;"&gt;While writing some PHP and JavaScript code in another post here on sparktask I encountered the following problem: my code would be interpreted by the server and not displayed properly (if it all). After surfing the web for a solution I stumbled upon this website:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.addressmunger.com/display_code/"&gt;http://www.addressmunger.com/display_code/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;The principle behind this solution is converting some or all the letters of your code to their ASCII counterparts. Although simple it works brilliantly. The downside of this solution is that if you try to later edit your post, all of the ASCII code will be reconverted to normal letters. The best way to avoid this disadvantage is to make sure you won't need to edit your posts.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-5279968387366682818?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/5279968387366682818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=5279968387366682818' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/5279968387366682818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/5279968387366682818'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/how-to-display-html-php-and-javascript.html' title='How to display HTML, PHP and JavaScript code on your blog'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-6373517309411463119</id><published>2008-05-16T09:48:00.000-07:00</published><updated>2008-05-16T11:08:08.029-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming and Web Design'/><title type='text'>Auto-sum a dynamic form</title><content type='html'>&lt;p style="text-align: justify;" class="MsoNormal"&gt;Most examples on the Internet regarding automatically adding together the values of a form and then displaying the result usually involve forms that are made up of two, three input boxes. So, what if you’re looking to do this on a dynamically generated form, perhaps generated with information extracted from a database, and you don’t know from the beginning how many input boxes you have?&lt;/p&gt;&lt;div style="text-align: justify;"&gt;      &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;My solution was to dynamically generate both the HTML form &lt;i style=""&gt;and &lt;/i&gt;the JavaScript code, both using PHP.&lt;o:p&gt; To illustrate this I'll use a simple financial calculator example. Note that I'll only present the actual code that does all the adding and code-generating, without any attempts to verify the user's input (for example if he enters letters instead of numbers) as this would be beyond the purpose of this post.&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;    &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;Let’s assume we have a database of fund names in which the user has invested some money. We want to create a form that allows the user to specify how much money is currently invested into each fund, while also displaying the total amount of money invested.&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;For simplicity we’ll consider that the fund names (&lt;span style="font-style: italic;"&gt;$N&lt;/span&gt; of them) have already been extracted from the database and are stored in an array called &lt;span style="font-style: italic;"&gt;$funds&lt;/span&gt;. In our example I'll simply declare these at the start:&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&amp;#60;&amp;#63;&amp;#112;&amp;#104;&amp;#112;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;$N=5;&lt;br /&gt;$funds[1]="RoOilingInc";&lt;br /&gt;$funds[2]="BakingRUs";&lt;br /&gt;$funds[3]="ManchesterUnited";&lt;br /&gt;$funds[4]="Microsoft";&lt;br /&gt;$funds[5]="Apple";&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Moving on, it's time to create the JavaScript code that will sum up the form.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;echo "&amp;#60;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#32;&amp;#116;&amp;#121;&amp;#112;&amp;#101;&amp;#61;&amp;#39;&amp;#116;&amp;#101;&amp;#120;&amp;#116;&amp;#47;&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#39;&amp;#32;&amp;#108;&amp;#97;&amp;#110;&amp;#103;&amp;#117;&amp;#97;&amp;#103;&amp;#101;&amp;#61;&amp;#39;&amp;#74;&amp;#97;&amp;#118;&amp;#97;&amp;#83;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#39;&amp;#62;&lt;br /&gt;&lt;br /&gt;function usum() {&lt;br /&gt;&lt;br /&gt;var a = 0;&lt;br /&gt;var b = 0;&lt;br /&gt;var c = 0;&lt;br /&gt;";&lt;br /&gt;&lt;br /&gt;For ($i=1;$i&lt;=$N;$i++)&lt;br /&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;&lt;blockquote&gt;echo " c = document.myform.".$funds[$i].".value;&lt;br /&gt;c += '';&lt;br /&gt;b = (a * 1) + (c * 1);&lt;br /&gt;a = b*1; ";&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;}&lt;br /&gt;echo "document.myform.sum.value = parseInt(a); }&lt;br /&gt;&amp;#60;&amp;#47;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;&amp;#62;&amp;#34;&amp;#59;&amp;#32;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;What this code does is generate a JavaScript function each time the page is accessed, using the &lt;span style="font-style: italic;"&gt;$funds&lt;/span&gt; array. The first line of code tells the browser we're going to write some JavaScript code. Afterwards, using PHP, we declare the function name and initialize three local variables: &lt;span style="font-style: italic;"&gt;a&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;b&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;c&lt;/span&gt;. Now with a &lt;span style="font-style: italic;"&gt;For&lt;/span&gt; loop (with a number of &lt;span style="font-style: italic;"&gt;$N&lt;/span&gt; steps) we write 4 lines of JS code for each element in the &lt;span style="font-style: italic;"&gt;$funds&lt;/span&gt; array. When executed, these instructions simply add to the local variable &lt;span style="font-style: italic;"&gt;a&lt;/span&gt; the contents of a certain input box. Once the For loop is exited, we instruct JavaScript to set the value of the &lt;span style="font-style: italic;"&gt;sum&lt;/span&gt; input box to the value of &lt;span style="font-style: italic;"&gt;a&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Now, for the final section of code, the generation of the HTML form. First we need to declare the form and create the input boxes:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;echo "&amp;#60;&amp;#70;&amp;#79;&amp;#82;&amp;#77;&amp;#32;&amp;#78;&amp;#65;&amp;#77;&amp;#69;&amp;#61;&amp;#39;&amp;#109;&amp;#121;&amp;#102;&amp;#111;&amp;#114;&amp;#109;&amp;#39;&amp;#62;";&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;for ($i=1;$i&lt;=$N;$i++)   &lt;br /&gt; {&lt;br /&gt;&lt;blockquote&gt;echo $funds[$i]."$&amp;#60;&amp;#73;&amp;#78;&amp;#80;&amp;#85;&amp;#84; TYPE='text' NAME='".$funds[$i]."' ID='".$funds[$i]."' onChange='usum();'&gt;&lt;br /&gt;         ";&lt;/blockquote&gt;&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;Lastly, we need to create a disabled input box where we can display the result:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;echo "TOTAL VALUE$ &amp;#60;&amp;#73;&amp;#78;&amp;#80;&amp;#85;&amp;#84; TYPE='text' STYLE='color: &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;#00cc00; background: #ffffff; border: solid 0px &lt;/span&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;#000000;' NAME='sum' DISABLED VALUE='0' ID='sum'&gt;&amp;#60;&amp;#47;&amp;#70;&amp;#79;&amp;#82;&amp;#77;&amp;#62;";&lt;br /&gt;&lt;br /&gt;&amp;#63;&amp;#62;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Alright, we're finished. Run the .php file (don't forget to upload it to a website or use an Apache server) and you should see the 5 input boxes. Once you write a number in one of them it should be added to the Total Value display.&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-6373517309411463119?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/6373517309411463119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=6373517309411463119' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/6373517309411463119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/6373517309411463119'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/auto-sum-dynamic-form.html' title='Auto-sum a dynamic form'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-803811198273067234</id><published>2008-05-10T06:18:00.000-07:00</published><updated>2008-05-18T10:47:29.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming and Web Design'/><title type='text'>Macromedia Flash - Roll Out Menu Tutorial</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=""&gt;In this tutorial we'll look at creating a roll-out menu in &lt;span style="font-style: italic;"&gt;Macromedia Flash 8&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;MX&lt;/span&gt;. A roll-out menu is usually made up of a button of some sorts that, when you click on or hover your mouse above it, makes a menu expand out of it. When this menu expands underneath the button it is called a &lt;span style="font-style: italic;"&gt;dropdown&lt;/span&gt; menu. In this particular example we’ll be creating a menu that expands to the right of the button when the user hovers his mouse over it, although the process is quite similar for all types of menus.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Since this is only an example, we won’t have any complex design for the button, background or menu. The aim of this tutorial is explaining the basic workings of the menu and obtaining a smooth movement, not coloring it nicely.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Note that all of the shortcuts that I use are for &lt;span style="font-style: italic;"&gt;Macromedia Flash 8,&lt;/span&gt; however they should apply to &lt;span style="font-style: italic;"&gt;MX&lt;/span&gt; as well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;1.&lt;/span&gt; First up, create a new Flash document by going to &lt;span style="font-style: italic;"&gt;File&lt;/span&gt; (Alt+F) and &lt;span style="font-style: italic;"&gt;New&lt;/span&gt;. If prompted for a file type choose &lt;span style="font-style: italic;"&gt;Flash Document&lt;/span&gt; and press &lt;span style="font-style: italic;"&gt;OK&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;2.&lt;/span&gt; With the &lt;span style="font-style: italic;"&gt;Rectangle tool&lt;/span&gt; (shortcut R) create a square or some other shape.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWg7dKgzaI/AAAAAAAAABA/RKWg-q4VgJM/s1600-h/pic1+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWg7dKgzaI/AAAAAAAAABA/RKWg-q4VgJM/s400/pic1+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198738288170552738" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;This square will be our button that, when clicked or hovered, will expand the rest of the menu. As I said, the colors of the button aren’t really important in this tutorial. Personally, I chose a red filling with a black outline.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;3. &lt;/span&gt;Select this square with a double click, right click it and press &lt;span style="font-style: italic;"&gt;Convert to Symbol…&lt;/span&gt; (or, once you’ve selected it, press F8). Make sure that &lt;span style="font-style: italic;"&gt;Movie clip&lt;/span&gt; is selected, give it a name (or leave it Symbol 1) and press &lt;span style="font-style: italic;"&gt;OK&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWhMdKgzbI/AAAAAAAAABI/7dimI3GWAGw/s1600-h/pic2+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWhMdKgzbI/AAAAAAAAABI/7dimI3GWAGw/s400/pic2+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198738580228328882" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;This &lt;span style="font-style: italic;"&gt;Movie clip&lt;/span&gt; will hold all of our animations and objects for this drop-down menu.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;4.&lt;/span&gt; Next up we need to give this movie clip an &lt;span style="font-style: italic;"&gt;Instance name&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ArKYwwR7j7A/SCWhYtKgzcI/AAAAAAAAABQ/NqMDvUTGqVA/s1600-h/pic3+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_ArKYwwR7j7A/SCWhYtKgzcI/AAAAAAAAABQ/NqMDvUTGqVA/s400/pic3+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198738790681726402" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Find the &lt;span style="font-style: italic;"&gt;Properties&lt;/span&gt; section. Underneath the menu that says &lt;span style="font-style: italic;"&gt;Movie Clip&lt;/span&gt; (like in the image above) you should see an input box that says &lt;span style="font-style: italic;"&gt;Instance name&lt;/span&gt;&lt;instance name=""&gt;. Click on it and type one (I typed roll_out).&lt;o:p&gt;&lt;/o:p&gt;&lt;/instance&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;So, what exactly is an &lt;span style="font-style: italic;"&gt;Instance name&lt;/span&gt;? Well, you can have multiple copies of a symbol (whether it is a movie clip, button, whatever) in a single Flash document. However how can you make Flash tell one symbol apart from the others? All you need to do is assign a different &lt;span style="font-style: italic;"&gt;Instance name&lt;/span&gt; to each of the copies (instances).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Note that while you can have multiple copies of the same symbol in your project, you can’t assign the same instance name to more than one symbol.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;5. &lt;/span&gt;Double click Symbol 1 to edit its contents.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWhgdKgzdI/AAAAAAAAABY/nBosJPPv_ds/s1600-h/pic4+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWhgdKgzdI/AAAAAAAAABY/nBosJPPv_ds/s400/pic4+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198738923825712594" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;You can tell that you’re in Symbol 1 by looking near the top of the screen. Scene 1 is the main work area, also called the &lt;i&gt;root&lt;/i&gt;. Once you are done working in Symbol 1 you can go back to the &lt;span style="font-style: italic;"&gt;root&lt;/span&gt; by pressing Scene 1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;6.&lt;/span&gt; Expand the duration of Layer 1 to 20 frames. You can do this by right clicking the box under 20 (as in the image above) and then choosing &lt;span style="font-style: italic;"&gt;Insert frame&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Another way to do this is by left clicking on frame 20 and then pressing F5.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;7.&lt;/span&gt; Insert a new layer (make sure that you’re still in Symbol 1 and not the root) by going to &lt;span style="font-style: italic;"&gt;Insert&lt;/span&gt; (Alt+I), &lt;span style="font-style: italic;"&gt;Timeline&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Layer&lt;/span&gt;. A new layer should appear right above Layer 1, named Layer 2. This is where we will hold the actual animations.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;8.&lt;/span&gt; Insert keyframes at frames 2, 11 and 20 by right clicking the boxes and choosing &lt;span style="font-style: italic;"&gt;Insert Keyframe&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;By the end of this step this is what your timeline should look like.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ArKYwwR7j7A/SCWhp9KgzeI/AAAAAAAAABg/Cy41aSJBA1A/s1600-h/pic5+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_ArKYwwR7j7A/SCWhp9KgzeI/AAAAAAAAABg/Cy41aSJBA1A/s400/pic5+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198739087034469858" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;Let me explain why we just did this. The animation will consist of 3 parts:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;a neutral state (when the menu is hidden and nothing is happening) that will be kept in frame 1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;a roll-out state (when the user moves his mouse over the button) that will be kept in frames 2-11&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;a roll-in state (when the user moves his mouse off the menu and/or button) in which the menu is hidden once again (frames 12-20)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;9.&lt;/span&gt; First thing first, let’s set up the neutral state. While our animation is here we don’t want it moving. The movie clip will only leave frame 1 when we tell it to (which we will do later on).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;To do this, select frame 1 of Layer 2 and go to &lt;span style="font-style: italic;"&gt;Actions&lt;/span&gt; (if you can’t find this section try pressing F9). Once here, type this code:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;blockquote&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;stop();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;If you’ve done this correctly you should see a α symbol on frame 1 of Layer 2 in the timeline. This tells you that that particular frame has some ActionScript (the programming language of Flash) applied to it.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ArKYwwR7j7A/SCWhwNKgzfI/AAAAAAAAABo/TrjRGarg6-E/s1600-h/pic6+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ArKYwwR7j7A/SCWhwNKgzfI/AAAAAAAAABo/TrjRGarg6-E/s400/pic6+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198739194408652274" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Whenever your animation reaches this frame it will, as you might have guessed, stop (sort of like hitting the Pause button on a movie).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;10.&lt;/span&gt; Now we’ll focus on creating the roll-out and roll-in animations. First, go to frame 2 of Layer 2 and create a small rectangle next to the red one. Turn it into a &lt;span style="font-style: italic;"&gt;Movie clip&lt;/span&gt;. Now copy this new movie clip into frames 11 and 20 in the exact same spot. Go to &lt;span style="font-style: italic;"&gt;Edit&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Copy&lt;/span&gt; (or hit Ctrl+C) to copy the movie clip and then &lt;span style="font-style: italic;"&gt;Edit&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;Paste in place&lt;/span&gt; (or hit Ctrl+Shift+V) to paste the movie clip in the exact same spot.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Now, select frame 11 and, using the transform tool (hotkey Q), make the rectangle bigger and move it to the right of the box, as in the image below:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ArKYwwR7j7A/SCWh4NKgzgI/AAAAAAAAABw/ObKXhc1ehX8/s1600-h/pic7+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ArKYwwR7j7A/SCWh4NKgzgI/AAAAAAAAABw/ObKXhc1ehX8/s400/pic7+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198739331847605762" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Finally, right click one of the frames between 2 and 11 and choose &lt;span style="font-style: italic;"&gt;Create Motion Tween&lt;/span&gt;. Now do the same with a frame between 11 and 20. If you have a look at each frame from 2 to 20 you should first see the new movie clip get larger and then smaller. This will be our menu.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Lastly, we will need to set up some more ActionScript. Place another stop(); action on frame 11, just like you did on frame 1. Make sure that you don’t have any objects in the frame selected, otherwise the code will be applied to those objects and not the frame itself. If this happens you won’t see the α symbol on top of that frame.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Here’s what your timeline should look like:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ArKYwwR7j7A/SCWh_NKgzhI/AAAAAAAAAB4/2jx_-t024wo/s1600-h/pic8+copy.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_ArKYwwR7j7A/SCWh_NKgzhI/AAAAAAAAAB4/2jx_-t024wo/s400/pic8+copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5198739452106690066" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;11.&lt;/span&gt; Now that we’re finished with setting up the movie clip, navigate back to Scene 1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;12.&lt;/span&gt; Select the movie clip and write the following code for it (you can check if you did this correctly by looking at the name of the &lt;span style="font-style: italic;"&gt;Actions&lt;/span&gt; section. If it says &lt;span style="font-style: italic;"&gt;Actions – Movie Clip&lt;/span&gt; you’re doing fine):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;on (rollOver)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;_root.roll_out.play();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=""&gt;When the mouse is placed on the movie clip (&lt;span style="font-style: italic;"&gt;on (rollOver)&lt;/span&gt;) the program will execute a set of instructions held between the curly brackets. In this case the only instruction is to find a movie clip in the root named roll_out and tell it to play (sort of like hitting the Play button on a stereo). To make the menu roll out when the button is clicked instead of just hovered by the mouse, replace &lt;span style="font-style: italic;"&gt;rollover&lt;/span&gt; with release.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;To understand the &lt;span style="font-style: italic;"&gt;_root.roll_out&lt;/span&gt; part, let’s see the following example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;we have a movie clip in root with the instance name A&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;inside A we have another movie clip with the instance name B&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=""&gt;&lt;span style=""&gt;-&lt;span style=""&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;to make B do something (for example play) we would use this code:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;blockquote&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;_root.A.B.play();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;_root.A.B is the path to the movie clip we want to affect. In our tutorial this is simply _root.roll_out.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;If you press Ctrl+Enter or go to the &lt;span style="font-style: italic;"&gt;Control &lt;/span&gt;menu and hit &lt;span style="font-style: italic;"&gt;Test Movie&lt;/span&gt; you should see our first red box. Move your mouse over it and the blue box should expand out of the first one. That’s ok, but if you move your mouse button off of it, it won’t change.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;13.&lt;/span&gt; To fix this, close the test window and create a new layer (here in root).  Move this new layer (probably named Layer 2) under the first layer (Layer 1) by holding the left mouse button clicked on its name and dragging under Layer 1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;14.&lt;/span&gt; In this new Layer 2 create a rectangle that covers the whole window area. Convert this to a movie clip and apply the following code to it:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;on (rollOver)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;if (_root.roll_out._currentframe &gt; 1 &amp;amp;&amp;amp; _root.roll_out._currentframe &amp;#60;&amp;#32;&amp;#49;&amp;#50;&amp;#41;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;{&lt;span style=""&gt;     &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;            &lt;/span&gt;_root.roll_out.gotoAndPlay(22 - _root.roll_out._currentframe);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;span style=""&gt;      &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/blockquote&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;This looks a bit more complicated but let me explain. When our new movie clip is hovered this means that the mouse is not currently hovering the menu. This in turn means that, if the menu is currently expanded, we need to tell it to close.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;First we check if our menu isn’t already closed (by &lt;span style="font-style: italic;"&gt;_root.roll_out._currentframe &gt; 1&lt;/span&gt;). If this returns ok then we check if our current frame is somewhere in the roll-out animation (frames 2-9) or in the actual roll-out state (frame 11). If both conditions are OK, then we can proceed and make it close.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;Let’s assume our movie clip is at frame 11 (fully rolled-out). We would need to tell it to go to frame 12 and play, thus completing the animation. But what if the menu never managed to completely roll out? What if we’re trying to close it before it reached frame 11? If we would simply write &lt;span style="font-style: italic;"&gt;gotoAndPlay (12)&lt;/span&gt; and the animation only reached frame 3, the blue box would quickly jump to an enlarged state and then start shrinking, which looks very bad. If you want to, try replacing &lt;span style="font-style: italic;"&gt;(22 - _root.roll_out._currentframe)&lt;/span&gt; with &lt;span style="font-style: italic;"&gt;(12)&lt;/span&gt; and move your mouse off the menu and button before it finishes rolling out.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;We can fix this by simply skipping the part where the menu would roll in starting from its maximum position. Have a look at roll_out. If for example we’re at frame 5, to roll it back it we would need to start at frame 17. Frame 6 means frame 16 and so on.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;If you have a look at these numbers you’ll see that the frame we need to go to is (22 – our frame number).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold;"&gt;15.&lt;/span&gt; You’re done. Save the file, hit Ctrl+Enter and try it out.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Final words&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;The end result of this tutorial isn’t very spectacular, I know. However, once you’re understood exactly how this menu works, you can move on to creating better and more powerful menus.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style=""&gt;In the source file archive (which I’ve included &lt;a href="http://myfreefilehosting.com/f/b4a5802201_0.06MB"&gt;here&lt;/a&gt;) you can also find an example of this method at work in a small, slightly more practical version.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-803811198273067234?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/803811198273067234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=803811198273067234' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/803811198273067234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/803811198273067234'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/macromedia-flash-roll-out-menu-tutorial.html' title='Macromedia Flash - Roll Out Menu Tutorial'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ArKYwwR7j7A/SCWg7dKgzaI/AAAAAAAAABA/RKWg-q4VgJM/s72-c/pic1+copy.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-2030355152185167026</id><published>2008-05-09T07:31:00.000-07:00</published><updated>2008-05-11T05:29:22.697-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming and Web Design'/><title type='text'>AutoItv3 versus AutoHotKey</title><content type='html'>&lt;div style="text-align: justify;"&gt;When trying to enter the wonderful (and with a slightly bad reputation) world of Windows scripting and macro-building, one is bound to come across two programming languages in particular: &lt;a href="http://www.autoitscript.com/autoit3/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;AutoIt&lt;/span&gt;&lt;/a&gt; v3 and &lt;a href="http://www.autohotkey.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;AutoHotKey&lt;/span&gt;&lt;/a&gt;. At first glance they seem quite similar and this is only natural: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;AutoHotKey&lt;/span&gt; is built on a version of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;AutoIt&lt;/span&gt; v2, they both try to stand out with their capability of simulating key strokes and mouse clicks, ability to automate certain tasks and GUI capabilities. Once however one starts to delve deeper into the inner workings of these programming languages certain differences become apparent.&lt;br /&gt;&lt;br /&gt;The first difference you should notice is the program syntax. While &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;AutoIt&lt;/span&gt; is quite similar to C-like languages in format (such as C++ and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;PHP&lt;/span&gt;), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;AutoHotKey&lt;/span&gt; is quite unique, unfortunately in a negative way.&lt;br /&gt;&lt;br /&gt;A good example on this is calling functions inside the program. While in C++, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;PHP&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;AutoItv&lt;/span&gt;3 the parameters of the function would be contained between two parentheses, separated by commas (such as &lt;span style="font-style: italic;"&gt;function_name ( parameter1, parameter2... ); &lt;/span&gt;), in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;AutoHotKey&lt;/span&gt; the parameters are only separated by commas (&lt;span style="font-style: italic;"&gt;function_name, parameter1, parameter2....&lt;/span&gt;). Although not a huge disadvantage, this does not only make switching to and from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;AutoHotKey&lt;/span&gt; and other languages more difficult but it also discourages new users.&lt;br /&gt;&lt;br /&gt;Another advantage &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;AutoItv&lt;/span&gt;3 currently has over &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;AutoHotKey&lt;/span&gt; is its larger fan-base, which translates into more user-made function libraries that greatly increase the ease of building an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;AutoIt&lt;/span&gt; program. These libraries range from better GUI control to file management and even functions to manipulate Internet Explorer.&lt;br /&gt;&lt;br /&gt;One of the things that impressed me most about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;AutoHotKey&lt;/span&gt; is its &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;HotString&lt;/span&gt; feature. To illustrate this we'll use the following example: you're chatting online and for some reason want to avoid using certain acronyms (such as "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;lol&lt;/span&gt;", "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;brb&lt;/span&gt;" etc). This is easily done using the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;HotString&lt;/span&gt; feature of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;AutoHotKey&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;::&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;brb&lt;/span&gt;::be right back&lt;br /&gt;&lt;br /&gt;The code above will create a new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;HotString&lt;/span&gt; (sort of like a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;HotKey&lt;/span&gt;) that, when activated, will replace "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;brb&lt;/span&gt;" with "be right back". Back to our online conversation, let's say that by mistake you type "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;brb&lt;/span&gt;" and hit "Enter". No problem, the program will have already converted "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;brb&lt;/span&gt;" to "be right back". This &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;HotString&lt;/span&gt; feature can have a wide variety of uses, as illustrated on the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;AutoHotKey&lt;/span&gt; website. Also, while most actions are of about the same difficulty in implementing into &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;AutoIt&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;AutoHotKey&lt;/span&gt;, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;HotString&lt;/span&gt; feature would prove very problematic and time consuming to implement into &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;AutoIt&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Overall i believe that, faced with the choice of learning either &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;AutoIt&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;AutoHotKey&lt;/span&gt;, you would probably be better off with going with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;AutoIt&lt;/span&gt;. The user-made libraries really help at times when designing your own solutions would take a lot of time and patience. Personally &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;I've&lt;/span&gt; been using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;AutoIt&lt;/span&gt; for about one year and a half, maybe two. Since first discovering it back in 2006 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;I've&lt;/span&gt; always used it, along with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;PHP&lt;/span&gt;, as the main programming language in which i work because of its rich libraries of functions and similarity to other programming languages i used in the past.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Later edit: &lt;/span&gt;After working with AutoHotKey further I have to say that, although I still find the syntax annoying and the incorporated libraries of functions aren't as evolved as those of AutoIt, when it comes to handling hot-keys and similar types of input (such as the HotString feature), AutoHotKey shines.&lt;br /&gt;&lt;br /&gt;While I still think that, overall, AutoIt v3 is superior, having a look over what AutoHotKey has to offer is well worth the time and could be a life-saver in the future.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-2030355152185167026?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/2030355152185167026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=2030355152185167026' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/2030355152185167026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/2030355152185167026'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/autoitv3-versus-autohotkey.html' title='AutoItv3 versus AutoHotKey'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-3536606944916418950</id><published>2008-05-06T13:17:00.000-07:00</published><updated>2008-05-09T08:23:31.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About the blog'/><title type='text'>Why does this page exist?</title><content type='html'>&lt;div style="text-align: justify;"&gt;To tell you the truth, I'm not that sure either. I'm also not sure why I'm writing this particular post, seeing as I was planning not to create the usual "why i have a blog" speech that is usually one of the first posts on blogs, big or small. Strangely, here we are.&lt;br /&gt;&lt;br /&gt;Still, i will try to keep it short and simple (as the &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;K.I.S.S.&lt;/a&gt; rule dictates): this blog is home to different ideas i might have or projects i might be working on or just starting off, usually in, but not limited to, the field of computer science. As time goes on however, depending on how (and if) this blog will evolve, the purpose of it may change as well.&lt;br /&gt;&lt;br /&gt;What this blog won't (hopefully) be is another record of personal opinions on matters of philosophy, what my vision is on inter-human relations or anything similar. There are already plenty of places you can have a look over if that's what you're looking for.&lt;br /&gt;&lt;br /&gt;I hope you enjoy your stay and find the contents of this blog useful and/or entertaining.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-3536606944916418950?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/3536606944916418950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=3536606944916418950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/3536606944916418950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/3536606944916418950'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/why-does-this-page-exist.html' title='Why does this page exist?'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3987590462196883647.post-9213699782287400341</id><published>2008-05-06T05:03:00.000-07:00</published><updated>2008-05-07T07:36:31.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software projects'/><title type='text'>Yahoo Buddy Watch version 1.0.0.1</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;About the program&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Yahoo Buddy Watch&lt;/span&gt; (&lt;span style="font-style: italic;"&gt;YBW&lt;/span&gt;) was thought up as a add-on for &lt;a href="http://messenger.yahoo.com/"&gt;&lt;span style="font-style: italic;"&gt;Yahoo Messenger&lt;/span&gt;&lt;/a&gt; with a couple of nice features, such as the ability to edit emoticons, remove certain (annoying) audibles, log friends online statuses and status messages etc (&lt;span style="font-weight: bold;"&gt;keep in mind that not all of these features are implemented&lt;/span&gt;). At it's current version (also the first ever) here's what &lt;span style="font-style: italic;"&gt;Yahoo Buddy Watch&lt;/span&gt; can do at the moment:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ArKYwwR7j7A/SCCeVRauuyI/AAAAAAAAAAQ/x7VBgd-YbA0/s1600-h/ybw.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_ArKYwwR7j7A/SCCeVRauuyI/AAAAAAAAAAQ/x7VBgd-YbA0/s320/ybw.JPG" alt="" id="BLOGGER_PHOTO_ID_5197328058275511074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;YBW&lt;/span&gt; builds a log of your friend's activities that include: online/offline and status messages with the time and date for each change &lt;/li&gt;&lt;li&gt;Custom sound that plays whenever one of the friends on the list logs in &lt;/li&gt;&lt;li&gt;Easy-to-use interface &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;The log option was implemented because i remembered needing it some time ago, although the reason has faded away from my memory since then. I do however use the custom login sound option quite often (for example while i'm in &lt;span style="font-style: italic;"&gt;DotA&lt;/span&gt; or another video game and i'm waiting for someone in particular to log in; by using &lt;span style="font-style: italic;"&gt;Buddy Watch&lt;/span&gt; i don't need to check &lt;span style="font-style: italic;"&gt;Messenger&lt;/span&gt; every time someone logs in, the program does it for me).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;How the program works&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using a &lt;span style="font-style: italic;"&gt;Windows&lt;/span&gt; scripting language called &lt;a href="http://www.autoitscript.com/autoit3/"&gt;&lt;span style="font-style: italic;"&gt;AutoItv3&lt;/span&gt;&lt;/a&gt;, the program reads the interface of the &lt;span style="font-style: italic;"&gt;Yahoo Messenger&lt;/span&gt; window, or more specificaly the friends list. If a friend is found in the list then he is considered online and his status message (if he has any) is read and logged. If he isn't in the list (because he is offline or invisible) he's logged as Offline. This is why you need to keep the &lt;span style="font-style: italic;"&gt;Yahoo Messenger&lt;/span&gt; window maximized (but not necessarily on top of the other windows) while running the program (otherwise &lt;i&gt;YBW&lt;/i&gt; will think all your friends are offline) and make sure that offline friends are hidden. These short-commings will probably be fixed in a later version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;How to install and use&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note: &lt;/span&gt;Keep in mind i designed and tested &lt;span style="font-style: italic;"&gt;Yahoo Buddy Watch&lt;/span&gt; on &lt;span style="font-style: italic;"&gt;Yahoo Messenger 8 &lt;/span&gt;&lt;span&gt;using &lt;span style="font-style: italic;"&gt;Windows XP&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Step 1: Download YBW v. 1.0.0.1.zip (see below)&lt;br /&gt;Step 2: Extract the archive on your hard disk (for example in C:\Program Files\YBW\)&lt;br /&gt;Step 3: Keep the &lt;span style="font-style: italic;"&gt;Yahoo Messenger&lt;/span&gt; window open (it must appear in your task bar, not just the tray)&lt;br /&gt;Step 4: Make sure that you only see the friends that are currently online in your &lt;span style="font-style: italic;"&gt;Yahoo Messenger&lt;/span&gt; window. If you also see friends that are offline press Ctrl+H&lt;br /&gt;Step 5: Run ybw.exe&lt;br /&gt;Step 6: Modify your friends list with the Add/Remove Friends buttons. Whenever you would like to see the log press the View Log File button&lt;br /&gt;Step 7: While the program is running do not close the &lt;span style="font-style: italic;"&gt;Yahoo Messenger&lt;/span&gt; window.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Disclaimer: &lt;/span&gt;Use this software at your own risk. The maker of &lt;span style="font-style: italic;"&gt;YBW&lt;/span&gt; is not responsible for any damage that this software may cause.&lt;br /&gt;&lt;br /&gt;You can download the program &lt;a href="http://myfreefilehosting.com/f/8a38adde99_0.35MB"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;The future of Yahoo Buddy Watch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As with all of my software projects, i'll only improve those with which people show the most interest. Therefore, based on positive and negative comments a software receives i'll continue upgrading it and adding new features. The reason behind this is quite simple: nobody wants to waste time on a software nobody will ever use or need.&lt;br /&gt;&lt;br /&gt;The previous paragraph in a single sentence? If you test &lt;span style="font-style: italic;"&gt;YBW&lt;/span&gt; let me know what you think.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3987590462196883647-9213699782287400341?l=sparktask.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sparktask.blogspot.com/feeds/9213699782287400341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3987590462196883647&amp;postID=9213699782287400341' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/9213699782287400341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3987590462196883647/posts/default/9213699782287400341'/><link rel='alternate' type='text/html' href='http://sparktask.blogspot.com/2008/05/yahoo-buddy-watch-version-1001.html' title='Yahoo Buddy Watch version 1.0.0.1'/><author><name>Coshoi</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='22' height='32' src='http://bp3.blogger.com/_ArKYwwR7j7A/SCC4Sxauu0I/AAAAAAAAAAc/1g4vXhTu8kc/S220/moi.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ArKYwwR7j7A/SCCeVRauuyI/AAAAAAAAAAQ/x7VBgd-YbA0/s72-c/ybw.JPG' height='72' width='72'/><thr:total>2</thr:total></entry></feed>
