<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.foxite.com/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Ammar Hadi</title><link>http://weblogs.foxite.com/ammarhadi/default.aspx</link><description>My Blog as a Foxer :-) </description><dc:language>en-US</dc:language><generator>CommunityServer 2.0 (Build: 60217.2664)</generator><item><title>Flexible Smart Barcode Scanning</title><link>http://weblogs.foxite.com/ammarhadi/archive/2009/08/22/8808.aspx</link><pubDate>Sat, 22 Aug 2009 12:13:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:8808</guid><dc:creator>AmmarHadi</dc:creator><slash:comments>3</slash:comments><comments>http://weblogs.foxite.com/ammarhadi/comments/8808.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/ammarhadi/commentrss.aspx?PostID=8808</wfw:commentRss><description>&lt;font size="2"&gt;&lt;br&gt;Hi Friends ..&lt;br&gt;&lt;br&gt;I've noticed that many POS applications that allow the use of a Barcode Reader device is designed in a way so that there is a textbox on the pos window that is supposed to be used to receive the scanned barcode.&lt;br&gt;&lt;br&gt;This approach has a main crippling feature. The Barcode TextBox should be the one with the focus before scanning the barcode, otherwise the loaded barcode characters will be useless or may mess around other controls.&lt;br&gt;&lt;br&gt;Another feature is that in most of the Barcode Readers the default Suffix (the last character in the loaded barcode) is {Enter} key + a Line Feed, or a suffix of {Tab} character. This will result in that after reading the code, the Barcode textbox will lose the focus.&lt;br&gt;&lt;br&gt;Therefor, developers play around these features to Keep the barcode textbox always in focus to ensure correct input and at the same time add codes to keep it focused after reading the code, to allow for the next item barcode be loaded correctly.&lt;br&gt;&lt;br&gt;I believe that this way of development produce a less flexible interface and less user friendly.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;My Approach:&lt;/b&gt;&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;The way I deal with the use of barcode readers to have a more flexible (and smartly behaving) application is based on the following:&lt;br&gt;&lt;br&gt;&lt;b&gt;1)&lt;/b&gt; &lt;u&gt;&lt;b&gt;The Configuration of the Barcode Reader:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;The Barcode Reader has a vast number of configurable parameters (independent on the computer). Each type of barcode readers has a user manual that contain the codes to program and configure the barcode reader. So that the reader is configured just by scanning some special barcode codes that the reader identify as a configuration process. Of these parameters, two I used to apply my idea: The &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;&lt;b&gt;Prefix&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; and the &lt;b&gt;&lt;font color="#0000ff"&gt;Suffix&lt;/font&gt;&lt;/b&gt;.&lt;br&gt;&lt;br&gt;A common default way of loading the barcode is like this example:&lt;br&gt;&lt;br&gt;actual barcode: &lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;6281101220014&lt;/font&gt;&lt;font size="2"&gt; (Small Bottled Water &lt;img src="/emoticons/emotion-1.gif" alt="Smile [:)]" /&gt;)&lt;br&gt;the sent code:&amp;nbsp;&lt;/font&gt;&lt;font size="2" color="#ff0000"&gt; 6281101220014{ENTER}+Line Feed&lt;/font&gt;&lt;font size="2"&gt; or &lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;6281101220014{TAB}&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;br&gt;(This is just to represent what is received, it is not actual code, the actual code is every number is send as ASCII character and added to it ASCII char 13 (for Enter) + char 10 (for Line Feed), or 9 (for Tab))&lt;br&gt;&lt;br&gt;My idea will be based on Adding a predefined prefix to the loaded barcode (this is done by the barcode reader) so that this prefix will be trapped by the form and after which the ASCII codes received will be regarded as the actual barcode. Then comes the suffix (I use the TAB), so when the form trap a TAB while it is in the mode of reading the barcode, it will consider that the barcode string is complete and ready to be processed.&lt;br&gt;&lt;br&gt;The selected ASCII character to be a prefix could be an uncommonly used printable ASCII character or a non-printable character (ASCII codes 0-31 non-printable). This selection depends on the application type, and other factors related to the developer and users so that the prefix selected is not to be used in the regular keyboard work. And the user can be notified not to use that character in his regular data entry.&lt;br&gt;&lt;br&gt;In the example form I attached, I used the&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt; #&lt;/font&gt;&lt;font size="2"&gt; char chr(35) as a prefix. Its just as an example, you should choose what suits your work.&lt;br&gt;&lt;br&gt;As an example of how to set up a barcode reader to be compatible with this approach, the picture below show the codes (extracted from the installation manual) to configure a &lt;/font&gt;&lt;font size="2" color="#006400"&gt;&lt;b&gt;Metrologic MS9520/40 Voyager® Series barcode reader&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; for this purpose.&lt;br&gt;&lt;br&gt;&lt;a href="/photos/ammarhadi/images/8809/original.aspx" target="_blank"&gt;&lt;img src="/photos/ammarhadi/images/8809/248x350.aspx" border="0"&gt;&lt;/a&gt;&lt;a href="/photos/ammarhadi/images/8810/original.aspx" target="_blank"&gt;&lt;img src="/photos/ammarhadi/images/8810/original.aspx" border="0"&gt;&lt;/a&gt;&lt;b&gt;&lt;br&gt;&lt;font color="#006400"&gt;&lt;br&gt;Manhattan Barcode Scanner&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; is another type that I found configurable but with a different sequence of codes. So, it depends on the type and manufacturer of the sc&lt;/font&gt;&lt;font size="2"&gt;anner.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;b&gt;2)&lt;/b&gt; &lt;u&gt;&lt;b&gt;The Design of the Form:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;What we need here is that the form should be the one which receives and manages the barcode, not the textbox. And we need to add some custom properties and methods to the form to organize our work and add this new functionality to the form.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;The &lt;i&gt;&lt;b&gt;custom properties&lt;/b&gt;&lt;/i&gt; added are:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;b&gt;Barcode_firstchar:&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; int&lt;/font&gt;&lt;font size="2"&gt;eger value representing the ASCII code of the prefix (in the example form, it is defaulted to &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;35&lt;/font&gt;&lt;font size="2"&gt; which is the &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;#&lt;/font&gt;&lt;font size="2"&gt; character)&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;font color="#ff0000"&gt;Barcode_lastchar:&lt;/font&gt;&lt;/b&gt; integer value representing the ASCII code of the suffix (in the example form, it is defaulted to &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;9&lt;/font&gt;&lt;font size="2"&gt; which is the TAB character)&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;font color="#ff0000"&gt;Reading_Barcode:&lt;/font&gt;&lt;/b&gt; log&lt;/font&gt;&lt;font size="2"&gt;ical value, the default is .F. used to indicate whether we are in the barcode reading mode or not. setting it to .T. will direct the keys in the keyboard buffer to build the barcode string till the Barcode_lastch&lt;/font&gt;&lt;font size="2"&gt;ar is passed.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;b&gt;BarcodeString:&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; this character value will save the barcode while we are in the barcode reading m&lt;/font&gt;&lt;font size="2"&gt;ode.&lt;br&gt;&lt;br&gt;&lt;i&gt;&lt;b&gt;The custom&lt;/b&gt;&lt;/i&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;i&gt;&lt;b&gt; methods:&lt;/b&gt;&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;b&gt;Build_barcode:&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; this method will recieve the keycode from the keypress event of the form during the barcode reading mode and add it to the barcodestr&lt;/font&gt;&lt;font size="2"&gt;ing.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;b&gt;Manage_barcode:&lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt; This method is used to manage the received barcode after completion. Here in this method the flexibility and smart barcoding is managed.&lt;br&gt;In the example attached, the form has a pageframe with 3 pages of different uses. One to simulate entry of a new item. the second to simulate finding an item by reading its barcode. the third is to simulate entering invoice items using the barcode reader.&lt;br&gt;Manage_barcode will see which is the current active page to perform the proper action.&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;So, if it is the first page (new item) the code loaded will be shown in the barcode textbox of the new item.&lt;br&gt;if the second page (select Item), the loaded barcode will be searched in the available item barcodes in the items table. If it is found, its data will be shown. If not, a notification messagebox appear to declare that this item is not identified.&lt;br&gt;If it is the Third page (new invoice), the loaded barcode will be searched in the items table. If&lt;/font&gt;&lt;font size="2"&gt; it is available it will be inserted into the new invoice (or the quantity is increased by 1 if it is already in the invoice). If not available a messagebox will be shown to declare that this item is not identified.&lt;br&gt;&lt;br&gt;In addition to these properties and methods, the form &lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;b&gt;KeyPreview &lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt;property should be set to .T. and the form &lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;b&gt;Keypress &lt;/b&gt;&lt;/font&gt;&lt;font size="2"&gt;event will contain a control code to re-dir&lt;/font&gt;&lt;font size="2"&gt;ect the keycode to build the barcode string during barcode reading mode and suppress the default behavior of the key.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;To Test the sample, you either can add real item barcodes to the items table, then run the form and use your configured barcode scanner. Or, you can use th&lt;/font&gt;&lt;font size="2"&gt;e keyboard to simulate the process by pressing &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;#&lt;/font&gt;&lt;font size="2"&gt; to load the prefix, then as you enter the characters that represent an available barcode, the form will be in the reading mode. Then press TAB key to load the suffix character. At that time you will get the appropriate response to the entered barcode.&lt;br&gt;&lt;br&gt;This way .. you will have a smart form that knows what to do with the loaded barcode wherev&lt;/font&gt;&lt;font size="2"&gt;er the current focus is because it is form-level activity not control-level.&lt;br&gt;&lt;br&gt;And with a creative mind you can do any action based on the read code and the current form status like calling a new-item form when the loaded barcode is not identified .. or issue some control barcodes .... etc.&lt;br&gt;&lt;br&gt;I hope these ideas a&lt;/font&gt;&lt;font size="2"&gt;re helpful&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&lt;u&gt;&lt;b&gt;NOTES:&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;* &lt;/font&gt;&lt;font size="2"&gt;some barcode scanners allow for a longer prefix with 2 or more characters.&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;*&lt;/font&gt;&lt;font size="2"&gt; this barcode functionality can be saved into a custom class or a form class.&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;*&lt;/font&gt;&lt;font size="2"&gt; the example I posted is not fault proof and I just post it to show the basic idea and the used code.&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;*&lt;/font&gt;&lt;font size="2"&gt; the prefix and suffix in a real application can be stored in the configuration table so that they can be part of the application configuration and customization process.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font color="#ff0000"&gt;&lt;b&gt;The Attachment&lt;/b&gt;&lt;/font&gt;&lt;/u&gt;:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;here is the sample form and table. (Run the form and it will automatically locate the items table included in the same folder):&lt;br&gt;&lt;br&gt;&lt;a href="http://www.foxite.com/uploads/39bf2637-603d-4710-a7b4-69fb26de8a18.zip"&gt;Download The Sample&lt;/a&gt;&lt;br&gt;&lt;br&gt;----------------------------------------------------&lt;br&gt;&lt;br&gt;Ammar Hadi ... 22/8/2009&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=8808" width="1" height="1"&gt;</description></item><item><title>Undo Redo</title><link>http://weblogs.foxite.com/ammarhadi/archive/2009/07/20/8657.aspx</link><pubDate>Mon, 20 Jul 2009 18:07:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:8657</guid><dc:creator>AmmarHadi</dc:creator><slash:comments>1</slash:comments><comments>http://weblogs.foxite.com/ammarhadi/comments/8657.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/ammarhadi/commentrss.aspx?PostID=8657</wfw:commentRss><description>&lt;br&gt;&lt;br&gt;Hi Friends ...&lt;br&gt;&lt;br&gt;Here is a way I used to add an &lt;b&gt;&lt;font color="#ff0000"&gt;undo - redo&lt;/font&gt;&lt;/b&gt; functionality to applications.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;The Basic Idea:&lt;/b&gt;&lt;/font&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; The basic idea I used is that, with every change, I save the code script that will undo it. And save the code script that will redo it in a table that will save these scripts ordered descending from the most recent to the oldest to allow us to undo the most recent change first (logical behavior :-)).&lt;br&gt;&amp;nbsp; I used &lt;font color="#ff0000"&gt;execscript()&lt;/font&gt; to execute these codes when needed.&lt;br&gt;&amp;nbsp; And when undoing is carried on to some point, making a change next to that will delete the undo-redo scripts that was saved after the last undo point we reach (logical too :-))&lt;br&gt;&amp;nbsp; And saving data will erase any previous undo-redo scripts (logical conventional approach !)&lt;br&gt;&lt;br&gt;&amp;nbsp; I attached a link to a sample form in which you can try changing the values of different controls: textbox with a character value, textbox with a numeric value, editbox, checkbox, image control, spinner, combobox, optiongroup.&lt;br&gt;&amp;nbsp; In addition to that, a grid with a source cursor can be updated, new records can be inserted, and records can be deleted.&lt;br&gt;All these changes can be undone and redone.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;More Details:&lt;/font&gt;&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;font color="#006400"&gt;undoredo Table structure&lt;/font&gt;:&lt;/b&gt; this table is used to save the undo and redo scripts. It is composed of &lt;font color="#ff0000"&gt;3&lt;/font&gt; fields:&lt;br&gt;&lt;font color="#ff0000"&gt;undo_rank&lt;/font&gt;, an integer field that saves the rank of the change, and on which the table is indexed with a descending order so that the most recent changes will be undon first.&lt;br&gt;&lt;font color="#ff0000"&gt;un_script&lt;/font&gt; and &lt;font color="#ff0000"&gt;re_script&lt;/font&gt;, are memo fields that saves the undo and redo scripts.&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Saving the undo script:&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;In this sample I save the undo script temporarily in a custom property in the form. This script will be saved to the undoredo table if a change occur.&lt;br&gt;For controls with a text entry (textboxes, editboxes, spinners), the
code is saved when the control loses the focus or when the change is committed for other
controls and for the cursor in the grid.&lt;br&gt;&lt;br&gt;In controls a sample undo script for a control is like this:&lt;br&gt;
&lt;br&gt;
&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;TEXT TO&lt;/font&gt; lcUndoScript &lt;font color="#0000ff"&gt;TEXTMERGE NOSHOW&lt;/font&gt;&lt;br&gt;
&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)&amp;gt;&amp;gt;.&lt;font color="#0000ff"&gt;value&lt;/font&gt;='&amp;lt;&amp;lt;&lt;font color="#000000"&gt;this.&lt;/font&gt;&lt;font color="#000000"&gt;Value&lt;/font&gt;&amp;gt;&amp;gt;'&lt;br&gt;
&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)&amp;gt;&amp;gt;.&lt;font color="#0000ff"&gt;setfocus&lt;/font&gt;&lt;br&gt;
&lt;font color="#0000ff"&gt;ENDTEXT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;
&lt;br&gt;here the undo script will save the object hierarchy of the control and its value before the change with a setfocus code to that control.&lt;br&gt;The resultant code (after textmerging the values) is saved in the undoredo table.&lt;br&gt;&lt;br&gt;An undo script of an Insert command will be like this&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;TEXT TO&lt;/font&gt; lcUndoScript &lt;font color="#0000ff"&gt;TEXTMERGE NOSHOW&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;DELETE FOR&lt;/font&gt; it_id=&amp;lt;&amp;lt;lnId&amp;gt;&amp;gt; &lt;font color="#0000ff"&gt;IN &lt;/font&gt;tempGrid&lt;br&gt;&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)+".parent.grdInvoice.refresh"&amp;gt;&amp;gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ENDTEXT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;b&gt;Saving the redo script:&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;The redo script is saved when the changes are committed, like selecting an option, deleting and inserting records, or at lost focus event after changing the new value in text entry controls.&lt;br&gt;&lt;br&gt;A sample redo code for that control is like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;TEXT TO&lt;/font&gt; lcRedoScript &lt;font color="#0000ff"&gt;TEXTMERGE NOSHOW&lt;/font&gt;&lt;br&gt;&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)&amp;gt;&amp;gt;.&lt;font color="#0000ff"&gt;value&lt;/font&gt;='&amp;lt;&amp;lt;this.Value&amp;gt;&amp;gt;'&lt;br&gt;&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)&amp;gt;&amp;gt;.&lt;font color="#0000ff"&gt;setfocus&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ENDTEXT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;A redo script of an Insert command will be like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;TEXT TO&lt;/font&gt; lcRedoScript &lt;font color="#0000ff"&gt;TEXTMERGE NOSHOW&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;INSERT INTO&lt;/font&gt; tempGrid &lt;font color="#0000ff"&gt;VALUES &lt;/font&gt;(&amp;lt;&amp;lt;tempGrid.it_id&amp;gt;&amp;gt;,'&amp;lt;&amp;lt;tempGrid.it_name&amp;gt;&amp;gt;',&amp;lt;&amp;lt;tempGrid.it_quan&amp;gt;&amp;gt;)&lt;br&gt;&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)+".parent.grdInvoice.refresh"&amp;gt;&amp;gt;&lt;br&gt;&amp;lt;&amp;lt;&lt;font color="#0000ff"&gt;SYS&lt;/font&gt;(1272,&lt;font color="#0000ff"&gt;this&lt;/font&gt;)+".parent.grdInvoice.clmItem.setfocus"&amp;gt;&amp;gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ENDTEXT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;&lt;u&gt;Saving the scripts:&lt;/u&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;The scripts are saved so that when moving from record to the next in a descending order, the record contains the undo script with the redo script of the next change. This way when executing undo scripts or redo scripts, the record pointer will move so that the correct next script will be executed in the next undo or redo operation. as it is explained below.&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;&lt;u&gt;Executing the scripts:&lt;/u&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;In the undo commandbutton click() event I put this code:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* running the script to undo&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;IF &lt;/font&gt;!&lt;font color="#0000ff"&gt;EMPTY&lt;/font&gt;(undoredo.un_script)&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;TRY&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;EXECSCRIPT&lt;/font&gt;(undoredo.un_script)&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CATCH&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;MESSAGEBOX&lt;/font&gt;("error in the current undo script or unavailable resources")&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;ENDTRY&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;SKIP IN &lt;/font&gt;undoredo&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;THISFORM&lt;/font&gt;.cmdRedo.&lt;font color="#0000ff"&gt;ENABLED&lt;/font&gt;=.T.&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;IF EMPTY&lt;/font&gt;(undoredo.un_script)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;THIS&lt;/font&gt;.&lt;font color="#0000ff"&gt;ENABLED&lt;/font&gt;=.F.&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;ENDIF&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ENDIF&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;The main piece of code is the &lt;font color="#ff0000"&gt;EXECSCRIPT()&lt;/font&gt; function that will execute the undo script. Then moving to the next record. With enabling or disabling the redo and undo buttons appropriately.&lt;br&gt;&lt;br&gt;The redo commandbutton contains a code with a similar idea of the code in the undo commandbutton.&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;b&gt;Save Me button:&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;It is not a real save :-)&lt;br&gt;It is just to perform like the conventional save functions. Upon saving, the undo - redo data are dismissed to start a new set of undo redo data.&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Notes:&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;There are other minor points that could be found while studying the sample.&lt;/li&gt;&lt;li&gt;I don't claim that this is the best way of performing undo - redo operations. I think there are other ways that may be more powerful, more safe or easier. There could be saving of data and parameters in a table instead of scripts, or using arrays, or using parameter classes.&lt;/li&gt;&lt;li&gt;The provided sample is to clarify my ideas, it is not intended to be error proof or a perfect design.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;b&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;The sample to download:&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;a href="http://www.foxite.com/uploads/ccc63abe-5371-4d4b-9ebe-f9c3703eed81.zip"&gt;http://www.foxite.com/uploads/ccc63abe-5371-4d4b-9ebe-f9c3703eed81.zip&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;download the zipped sample, unzip and run the main program (&lt;font color="#ff0000"&gt;&lt;b&gt;undo-redo.prg&lt;/b&gt;&lt;/font&gt;) and it will find its way to the sample form, table and the sample pictures :-)&lt;br&gt;&lt;br&gt;a snapshot of the sample form:&lt;br&gt;&lt;br&gt;&lt;img src="/photos/ammarhadi/images/8656/original.aspx" border="0"&gt;&lt;br&gt;&lt;br&gt;Hope it is helpful&lt;br&gt;&lt;br&gt;&lt;font color="#006400"&gt;Ammar Hadi ............. Iraq&lt;br&gt;July 2009&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=8657" width="1" height="1"&gt;</description></item><item><title>ActiveX keypress() Chaos</title><link>http://weblogs.foxite.com/ammarhadi/archive/2009/07/12/8616.aspx</link><pubDate>Sun, 12 Jul 2009 16:15:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:8616</guid><dc:creator>AmmarHadi</dc:creator><slash:comments>0</slash:comments><comments>http://weblogs.foxite.com/ammarhadi/comments/8616.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/ammarhadi/commentrss.aspx?PostID=8616</wfw:commentRss><description>&lt;br&gt;&lt;br&gt;Hi friends …&lt;br&gt;&lt;br&gt;&lt;font size="2" color="#0000ff"&gt;PRETEXT&lt;/font&gt;&lt;br&gt;&lt;i&gt;When I refer to activex controls I mean those which I test well, the richtextctrl, datetime picker and the month view.&lt;br&gt;(Other activex controls like forms2 textbox got other issues too, tested partially)&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;font color="#006400"&gt;Activex Keypress(), KeyDown(), KeyUp() Choas&lt;/font&gt;&lt;/b&gt;&lt;br&gt;-------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;While I was developing a form in which I decided to use F5 function key as a shortcut key to refresh the form, as usual I set the keypreview property of the form to .T. to trap the key pressed and take an action … I placed a simple code to deal with the F5 key press.&lt;br&gt;&lt;br&gt;&lt;font face="Courier New"&gt;&lt;font size="2" color="#ff0000"&gt;* The keypress() of the form&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;LPARAMETERS&lt;/font&gt;&lt;font size="2"&gt; nKeyCode, nShiftAltCtrl&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;WITH THIS&lt;br&gt;&amp;nbsp; DO CASE&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;CASE &lt;/font&gt;&lt;font size="2"&gt;nKeyCode=-4&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;&amp;amp;&amp;amp; F5 .. Refresh&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .myRefreshMethod()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;NODEFAULT&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;CASE &lt;/font&gt;&lt;font size="2"&gt;nKeyCode= ............&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#ff0000"&gt;*&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * ... etc&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;/font&gt;&lt;font size="2" color="#0000ff"&gt;ENDCASE&lt;br&gt;ENDWITH&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;br&gt;Till now ok …&lt;br&gt;&lt;br&gt;But what I noticed is that when the focus is in a DateTimePicker on the form, the form will not be refreshed when I press F5.&lt;br&gt;&lt;br&gt;This weird behavior lead me to test more … I found that:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The keypress of the form was not receiving the key code … i.e. the keypreview setting is useless and the activex disrespect it and never passed the key to the form keypress.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The keypress() of the activex contains this native code:&lt;/li&gt;&lt;/ul&gt;&lt;font size="2" color="#ff0000" face="Courier New"&gt;*** ActiveX Control Event ***&lt;br&gt;&lt;font color="#0000ff"&gt;LPARAMETERS &lt;/font&gt;&lt;font color="#000000"&gt;keyascii&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;The twisted thing here is that … the key code passed to the keypress() of the activex is based on the &lt;b&gt;ASCII Character Codes Charts (&lt;i&gt;see below&lt;/i&gt;)&lt;/b&gt; … which gives some similar key codes to that we depend on (that is listed in the table of key codes in the inkey() section of vfp help) like the number keys codes and basic English letters codes …&lt;br&gt;But .. at the same time … keypress() of the activex didn't received the Function keys pressed …. !!&amp;nbsp;&amp;nbsp; because these are not included in the basic &lt;b&gt;ASCII Character Codes Charts&lt;/b&gt; …&lt;br&gt;&lt;br&gt;The keypress() of the activex doesn't receive the modifier keys (SHIFT, CTRL, ALT) nor does it receive function keys .. but it receive some keys like the Enter key, the Backspace, the Space and the ESC key ..&lt;br&gt;&lt;br&gt;And as you noticed there is no &lt;font size="2" color="#0000ff" face="Courier New"&gt;nShiftAltCtrl &lt;/font&gt;parameter as that in the keypress() of the native vfp controls, so the keypress() of the activex will not reflect the condition of the modifier keys …&lt;br&gt;&lt;br&gt;This is because it is …..&lt;font color="#ff0000"&gt;&lt;b&gt; ASCII code based&lt;/b&gt;&lt;/font&gt; … i.e. indicate which ASCII character was passed&lt;b&gt; whatever the key you pressed &lt;/b&gt;to invoke it … :-) …&lt;br&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The activex has another two events to receive the key strokes …. :&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;KeyDown()&lt;/font&gt; and &lt;font color="#0000ff"&gt;KeyUp()&lt;/font&gt; events&lt;/b&gt;.&amp;nbsp; .. let's talk about these …..&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp; KeyDown (as the name is clear) is fired when a keyboard key is pressed down, and KeyUp will fire when it is released to spring up … &lt;/li&gt;&lt;/ul&gt;The native code in these 2 events is: &lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* the code in the KeyUp and KeyDown events&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;*** ActiveX Control Event ***&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;LPARAMETERS keycode&lt;/font&gt;, &lt;font color="#0000ff"&gt;shift&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;The irony here is that .. this keycode here could have different values from that of the key codes in the keypress() of the activex and that of the native form ….. &lt;/li&gt;&lt;/ul&gt;This is because … here, the &lt;font color="#0000ff"&gt;keycode &lt;/font&gt;reflects The &lt;b&gt;&lt;font color="#ff0000"&gt;Physical Key &lt;/font&gt;&lt;/b&gt;pressed !!&amp;nbsp; and there is another table for these key codes .. see below (so you get 3 tables, one for ASCII code, one for these physical key values, and one for the vfp native nkeycode value as shown in the inkey() function help document in vfp help)&lt;br&gt;&lt;br&gt;So that keycode of the letter 'a' is the same as to its capital 'A'. The only difference is that &lt;font color="#0000ff"&gt;shift &lt;/font&gt;value will indicate whether modifier keys were pressed or not, the value as follows:&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;i&gt;&lt;b&gt;Shift value&lt;/b&gt;&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;modifier key&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SHIFT&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CTRL&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ALT&lt;br&gt;&lt;br&gt;And this value is additive, that mean if we press SHIFT+CTRL, the value of shift is 3&lt;br&gt;&lt;br&gt;But still in fact keyup() and keydown() in this case are not useful to detect which ASCII key was pressed because the value returned by shift is not related to what is the setting of the Caps key is !! …&lt;br&gt;&lt;br&gt;In our example, if Caps key was ON and we press the keyboard key 'A' without SHIFT, we are passing 'A' letter to the keyup and keydown events, the &lt;font size="2" color="#0000ff" face="Courier New"&gt;keycode&lt;/font&gt; value in keyup and keydown will be (65) according to the key codes table used by keyup and keydown, and &lt;font size="2" color="#0000ff" face="Courier New"&gt;shift &lt;/font&gt;will be 0.&lt;br&gt;&lt;br&gt;But Again, if Caps key was OFF and we press the keyboard key 'A' without SHIFT, we are passing 'a' letter to the keyup and keydown events, the &lt;font size="2" color="#0000ff" face="Courier New"&gt;keycode &lt;/font&gt;value in keyup and keydown will also be (65) according to the key codes table used by keyup and keydown, and &lt;font size="2" color="#0000ff" face="Courier New"&gt;shift &lt;/font&gt;will also be 0. !! … So, in this case we need to know the condition of the Caps key to know what's going on ..&lt;br&gt;&lt;br&gt;On the other hand, when we press the key '0', its key ASCII in the keypress event is (48) whether we pressed the zero in the main keyboard numbers or in the numpad. While in the keyup and keydown, the keycode is (48) if the 0 key pressed in the main keyboard and it is (96) if the numpad 0 was pressed.&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;Therefore, MSDN .. recommendation is:&lt;/li&gt;&lt;/ul&gt;&lt;font size="2" face="Verdana"&gt;" Although the KeyDown and KeyUp events can apply to most keys, they're most often used for:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2" face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Extended character keys such as function keys.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Navigation keys.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Combinations of keys with standard keyboard modifiers.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2" face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Distinguishing between the numeric keypad and regular number keys.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;font size="2" face="Verdana"&gt;"&lt;/font&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp;Note here that … it is a native behavior of the keyboard to send repeated keys when you keep pressing down the key until you move your finger up. …. Like this if I keep pressing the 'a' key :&lt;/li&gt;&lt;/ul&gt;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&lt;br&gt;&lt;br&gt;In this case .. KeyDown will be fired with each one and KeyUp will be fired at the end only …&lt;br&gt;&lt;br&gt;Another (but) … If the key you pressed is processed by keypress() of the activex (if it is an ASCII character), then the keypress() of the activex will be fired also :-) .. and the sequence of events will be like this for one rapid key press:&lt;br&gt;&lt;br&gt;KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyPress ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyUp&lt;br&gt;&lt;br&gt;But for a press with a hold down say for 3 repeats, the event sequence will be like this:&lt;br&gt;&lt;br&gt;KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyPress ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt;&amp;nbsp; KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyPress ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyPress ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyUp&lt;br&gt;&lt;br&gt;A third (but) ….. if the key you are holding is not processed by the keypress (because it is not an ASCII character), like the SHIFT key or the CTRL key, the sequence of events will be:&lt;br&gt;&lt;br&gt;KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyDown ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyUp&lt;br&gt;&lt;br&gt;This is important to be noticed if you want to put a code in these events since these will fire repeatedly .. especially the keydown() event that I thought it will fire once as do the keyup() event, but is not&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;If we have a command button with its Default property is set to .T. or a command button with its Cancel Property set to .T., it is supposed that the activex control respects these settings (as the native vfp controls does) but … it doesn't !!&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;It doesn't … although in the MSDN documentation of the KeyUp and KeyDown events it says that pressing ENTER key will not invoke these events if there is a commandbutton on the form with its Default property set to .T. … and pressing ESC key will not invoke these events if there is a commandbutton on the form with its Cancel property set to .T. ………&lt;br&gt;&lt;br&gt;This is not happening here in visual foxpro .. may be it is true in Visual Basic only !! I don't know.&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;AND .. in MSDN, it is said that TAB key will NOT invoke the keyup and keydown events … but … by testing I found that:&lt;/li&gt;&lt;/ul&gt;If we press the TAB key inside the activex .. we have different responses:&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;If&lt;/u&gt; there is another control that will receive the focus after the activex, then the event sequence will be as follows:&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;KeyDown() of the activex ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyPress() of the parent Form. ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; lostfocus() of the activex !!!&lt;br&gt;&lt;br&gt;That's all .. no keypress() of the activex is fired (The ASCII tab chr(9) fires it which can be produced by CTRL+I which inserts a tab space, like in the text part of the richtextctrl, not used to jump from a control to another)&amp;nbsp; … And .. No keyUp() event.&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;If&lt;/u&gt; we used TAB to move from a control on the form to the activex then the sequence of events will be:&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;Gotfocus() of the activex ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyUP() … And no KeyDown() event.&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;if&lt;/u&gt; there is no other active control that can receive the focus, then the sequence of events will be like this:&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;KeyDown() ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyPress() of the Form ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; lostfocus() of the activex ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; gotfocus() of the activex ---&lt;font face="Courier New"&gt;&amp;gt;&lt;/font&gt; KeyUp()&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Another nice funny note:&lt;/li&gt;&lt;/ul&gt;If we press just a modifier key once, lets take SHIFT, inside the activex … the keypress() will not fire (of course .. not an ASCII character)&lt;br&gt;&lt;br&gt;The KeyDown() will be fired first with these values:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;Keycode=16 …. Shift=1&lt;/font&gt;&lt;br&gt;&lt;br&gt;Then KeyUp() will be fired with these settings:&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;Keycode=16 …. Shift=0&lt;/font&gt;&lt;br&gt;&lt;br&gt;In the keydown event, Its like saying … "&lt;font color="#006400"&gt; you pressed the SHIFT key + SHIFT key&lt;/font&gt;"&lt;br&gt;&lt;br&gt;And In the keydUp event, Its like saying …"&lt;font color="#006400"&gt; you pressed the SHIFT key without the SHIFT key&lt;/font&gt;"&lt;br&gt;&lt;br&gt;Funny and ironic :-)&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;So, in foxpro .. activex key events are chaotic … when we look at it with the usual keypress event behavior we used to in vfp controls.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;Now to the struggle to overcome these puzzles ….&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#006400"&gt;&lt;b&gt;&lt;i&gt;&lt;u&gt;CASE No 1:&lt;/u&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;What I was trying to do in my form (as I said above) is that I want to use F5 key to call a custom refresh method in my form ….&lt;br&gt;&lt;br&gt;The code I used in the keypress() event of the form is clear … (see it at the beginning of this article). And it works fine inside the form as far as I am away from the datetime picker .. so now how can we overcome that and let the F5 key works even in the activex control. ??&lt;br&gt;&lt;br&gt;Several options I tried:&lt;br&gt;&lt;br&gt;&lt;b&gt;1)&lt;/b&gt; Using &lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt;:The use of ON KEY LABEL need careful control so that it will not interrupt a critical running code. So, we may use it within the confines of a modal form. Defined in the init event and set to its default in the destroy event like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" color="#ff0000" face="Courier New"&gt;* init event of the form&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; F5 &lt;font color="#0000ff"&gt;EXECSCRIPT&lt;/font&gt;("_vfp.activeform.myRefresh")&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;* Destroy event of the form&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; F5&lt;/font&gt;&lt;br&gt;&lt;br&gt;And the code I used in the keypress() event of the form to trap the F5 will be discarded. The code in myRefresh will be excuted directly with the F5 press.&lt;br&gt;&lt;br&gt;OR:&lt;br&gt;&lt;br&gt;I keep my code in the keypress() of the form and Just use ON KEY LABEL within the confines of the activex itself like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* GotFocus event of the activex&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; F5 &lt;font color="#0000ff"&gt;EXECSCRIPT&lt;/font&gt;("_vfp.activeform.myRefresh")&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;* LostFocus event of the activex&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; F5&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;2) &lt;/b&gt;Using &lt;font color="#0000ff"&gt;BINDEVENT&lt;/font&gt;():&lt;br&gt;&amp;nbsp;&lt;br&gt;I was expecting that using BindEvent() will solve the problem .. by trapping the keypress() event of the activex or even the keyUp() or KeyDown() events in a code like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* init event of the form&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;BINDEVENT&lt;/font&gt;(&lt;font color="#0000ff"&gt;THISFORM&lt;/font&gt;.oleMyActivex, "keypress", &lt;font color="#0000ff"&gt;thisform&lt;/font&gt;,;&lt;br&gt;&amp;nbsp;"keypress")&lt;/font&gt;&lt;br&gt;&lt;br&gt;Here … whether binding keypress, keydown, keyup .. of the activex to the keypress of the form (and whatever the flag is and whatever the type of keycode is) .. IT DOESN"T BIND … It bind it to somewhere?!!&lt;br&gt;&lt;br&gt;It looks like the activex is behaving like a standalone object … not respecting KeyPreview nor respecting any BindEvent !! …&lt;br&gt;&lt;br&gt;So, I said .. may be I should regard it as a Window .. I tried this code to bind it using hWnd and windows message codes like this:&lt;br&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;* init event of the form&lt;/font&gt;&lt;br&gt;#&lt;font color="#0000ff"&gt;define &lt;/font&gt;WM_KEYUP&amp;nbsp;&amp;nbsp; 0x0101&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;BINDEVENT&lt;/font&gt;(&lt;font color="#0000ff"&gt;thisform&lt;/font&gt;.oleMyActivex.&lt;font color="#0000ff"&gt;hWnd&lt;/font&gt;,WM_KEYUP, &lt;font color="#0000ff"&gt;thisform&lt;/font&gt;, "keypress")&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;It doesn"t bind too !! :-(&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Notes:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;- The activex hWnd property is not seen in the PEM window but seen with IntelliSense!!&lt;br&gt;&lt;br&gt;- I took the windows message value (&lt;font size="2"&gt;&lt;font face="Courier New"&gt;WM_KEYUP&amp;nbsp;&amp;nbsp; 0x0101)&lt;/font&gt;&lt;/font&gt; from wmhandler.h available for download in MSDN .. and I uploaded it &lt;a href="http://www.foxite.com/uploads/63c8d409-e814-4c13-a1e9-a7c0de6c6992.txt"&gt;here &lt;/a&gt;(change the extension to .h).&lt;br&gt;&lt;br&gt;- I am not sure this last binding is logical or not, but it seems logical to me ..not sure!.&lt;br&gt;&lt;br&gt;So, I failed with this method.&lt;br&gt;&lt;br&gt;&lt;b&gt;3) &lt;/b&gt;Passing the keypress() or keyUp() event key codes and shift values into keypress() of the form like this:&lt;br&gt;&lt;br&gt;Use keyUp() to trap the function keys as far as these don't fire the keypress() of the activex.&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* KeyUp() of the activex&lt;br&gt;*** ActiveX Control Event ***&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;LPARAMETERS &lt;/font&gt;keycode, &lt;font color="#0000ff"&gt;SHIFT&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;DO CASE&lt;/font&gt;&lt;br&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE &lt;/font&gt;keycode=116&amp;nbsp; &amp;amp;&amp;amp; F5&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;THISFORM&lt;/font&gt;.&lt;font color="#0000ff"&gt;KEYPRESS&lt;/font&gt;(-4,&lt;font color="#0000ff"&gt;SHIFT&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;NODEFAULT&lt;br&gt;ENDCASE&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;Here the keycode need to be received as 116 and passed to the keypress() of the form as -4 … !! The tables that help us deal with these differences in keycodes are shown at the end of the article.&lt;br&gt;&lt;br&gt;Or we can send the keycode "as-is" and translate it in the form keypress() event.&lt;br&gt;&lt;br&gt;&lt;font color="#006400"&gt;&lt;u&gt;&lt;b&gt;&lt;i&gt;CASE No. 2&lt;/i&gt;&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;If we like to use a richtextctrl control and want to work with it using the conventional shortcuts like: CTRL+B = &lt;b&gt;bold&lt;/b&gt;, CTRL+I = &lt;i&gt;italic&lt;/i&gt;, CTRL+U = &lt;u&gt;underline&lt;/u&gt;. So that just selecting some text in the richtext control and pressing these shortcuts will format it accordingly.&lt;br&gt;&lt;br&gt;The code I used to control this shortcut function is:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* KeyUp() of the richtextctrl&lt;br&gt;&lt;font color="#0000ff"&gt;WITH THIS&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;blockquote&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;DO CASE&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE&lt;/font&gt; keycode=66 &lt;font color="#000000"&gt;AND &lt;/font&gt;&lt;font color="#0000ff"&gt;SHIFT&lt;/font&gt;=2 &lt;font color="#ff0000"&gt;&amp;amp;&amp;amp; CTRL+B&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .selBold=!.selBold&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;NODEFAULT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE &lt;/font&gt;keycode=73 &lt;font color="#000000"&gt;AND &lt;/font&gt;&lt;font color="#0000ff"&gt;SHIFT&lt;/font&gt;=2 &lt;font color="#ff0000"&gt;&amp;amp;&amp;amp; CTRL+I&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .selitalic=!.selitalic&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NODEFAULT&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE &lt;/font&gt;keycode=85 &lt;font color="#000000"&gt;AND &lt;/font&gt;&lt;font color="#0000ff"&gt;SHIFT&lt;/font&gt;=2 &lt;font color="#ff0000"&gt;&amp;amp;&amp;amp; CTRL+U&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .selUnderline=!.selUnderline&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;NODEFAULT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;ENDCASE&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;font size="2" color="#0000ff" face="Courier New"&gt;ENDWITH&lt;/font&gt;&lt;br&gt;&lt;br&gt;I faced some problems here ….&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1) &lt;/b&gt;If we run the form that contains the activex within the main vfp window (in-screen or in-top-level form), CTRL+B will call the Breakpoints window.&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2) &lt;/b&gt;CTRL+I in the keypress event of the activex is interpreted as a tab space, chr(9) which is the standard ASCII shortcut.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Progress:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;Running the form As top level form .. solved the problem of Breakpoints window. And the shortcut CTRL+B works fine.&lt;br&gt;&lt;br&gt;CTRL+U is already working fine.&lt;br&gt;&lt;br&gt;CTRL+I continued to produce tab spaces despite the assignment in the code above and the NODEFAULT command.!!&lt;br&gt;Even putting the code in the keydown() event that fires before the keypress didn't change this behavior.&lt;br&gt;&lt;br&gt;So, what I did is I cancelled the original assignment of CTRL+I within the activex control and return it back when it loses the focus like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* GotFocus event of the activex&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; CTRL+I *&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;* LostFocus event of the activex&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; CTRL+I&lt;/font&gt;&lt;br&gt;&lt;br&gt;When I use this approach, the code above that I put in the keyup() event will work fine whether put in the keyup() or keydown() event.&lt;br&gt;&lt;br&gt;But CTRL+I will Not work if I used the code in the keypress() event of the activex like this:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* keyup() of the richtextctrl&lt;br&gt;&lt;font color="#0000ff"&gt;WITH THIS&lt;/font&gt;&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;blockquote&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;DO CASE&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE &lt;/font&gt;keyascii=2 &lt;font color="#ff0000"&gt;&amp;amp;&amp;amp; ^B&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .selBold=!.selBold&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;NODEFAULT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE &lt;/font&gt;keyascii=9 &lt;font color="#ff0000"&gt;&amp;amp;&amp;amp; ^I&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .selitalic=!.selitalic&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;NODEFAULT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;CASE &lt;/font&gt;keyascii=21 &lt;font color="#ff0000"&gt;&amp;amp;&amp;amp; ^U&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .selUnderline=!.selUnderline&lt;/font&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;NODEFAULT&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;ENDCASE&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/blockquote&gt;&lt;font size="2" color="#0000ff" face="Courier New"&gt;ENDWITH&lt;/font&gt;&lt;br&gt;&lt;br&gt;This is because the keypress() event will not receive CTRL+I anymore since it is no more an ASCII character. But received by keyup() and keydown() as far as they represent a physical key combination as I explained above.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt;We can Add CTRL+B to the disabling code if we want to run the form in the main vfp window so the code will be:&lt;br&gt;&lt;br&gt;&lt;font size="2" face="Courier New"&gt;&lt;font color="#ff0000"&gt;* GotFocus event of the activex&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; CTRL+I *&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; CTRL+B *&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;* LostFocus event of the activex&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; CTRL+I&lt;br&gt;&lt;font color="#0000ff"&gt;ON KEY LABEL&lt;/font&gt; CTRL+B&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;b&gt;Now …. The key code tables ..&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;1)&lt;/b&gt; nKeyCode values of the native visual foxpro controls are found in vfp help in the INKEY() section.&lt;br&gt;&lt;br&gt;&lt;b&gt;2) &lt;/b&gt;ASCII character codes chart 1 (0-127) (used in keypress event of the activex): &lt;a href="http://msdn.microsoft.com/en-us/library/60ecse8t%28VS.71%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/60ecse8t(VS.71).aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;img src="/photos/ammarhadi/images/8613/original.aspx" border="0"&gt;&lt;br&gt;&lt;br&gt;The picture below is to show the description of the codes from 0-31&lt;br&gt;&lt;br&gt;&lt;img src="/photos/ammarhadi/images/original/ascii.aspx" border="0"&gt;&lt;br&gt;&lt;b&gt;&lt;br&gt;3)&lt;/b&gt; ASCII character codes chart 2 (128-255) (used in keypress event of the activex):&lt;a href="http://msdn.microsoft.com/en-us/library/9hxt0028%28VS.71%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/9hxt0028(VS.71).aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;"The characters that appear in Windows above 127 depend on the selected typeface."&lt;br&gt;&lt;br&gt;&lt;img src="/photos/ammarhadi/images/8614/original.aspx" border="0"&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;4) &lt;/b&gt;Key Code Constants for keyup() and keydown():&lt;br&gt;&lt;br&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa243025%28VS.60%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa243025(VS.60).aspx&lt;/a&gt;&lt;br&gt;&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Key Codes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;

&lt;table class="MsoNormalTable" cellpadding="0" cellspacing="0"&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Constant&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyLButton&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;Left mouse button&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyRButton&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;Right mouse button&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyCancel&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;3&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;CANCEL key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyMButton&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;Middle mouse button&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyBack&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;BACKSPACE key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyTab&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;9&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;TAB key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyClear&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;12&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;CLEAR key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyReturn&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;13&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;ENTER key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyShift&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;16&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;SHIFT key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyControl&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;17&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;CTRL key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyMenu&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;18&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;MENU key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyPause&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;19&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;PAUSE key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyCapital&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;20&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;CAPS LOCK key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyEscape&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;27&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;ESC key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeySpace&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;32&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;SPACEBAR key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyPageUp&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;33&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;PAGE UP key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyPageDown&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;34&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;PAGE DOWN key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyEnd&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;35&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;END key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyHome&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;36&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;HOME key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyLeft&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;37&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;LEFT ARROW key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyUp&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;38&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;UP ARROW key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyRight&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;39&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;RIGHT ARROW key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyDown&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;40&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;DOWN ARROW key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeySelect&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;41&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;SELECT key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyPrint&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;42&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;PRINT SCREEN key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyExecute&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;43&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;EXECUTE key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeySnapshot&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;44&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;SNAPSHOT key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyInsert&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;45&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;INS key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyDelete&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;46&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;DEL&lt;/span&gt;&lt;span&gt; key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyHelp&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;47&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;HELP key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumlock&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;144&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;NUM LOCK key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;KeyA Through KeyZ Are the Same as Their ASCII Equivalents: 'A'
Through 'Z'&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;

&lt;table class="MsoNormalTable" cellpadding="0" cellspacing="0"&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Constant&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyA&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;65&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;A key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyB&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;66&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;B key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyC&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;67&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;C key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyD&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;68&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;D key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyE&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;69&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;E key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;70&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyG&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;71&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;G key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyH&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;72&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;H key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyI&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;73&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;I key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyJ&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;74&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;J key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyK&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;75&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;K key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyL&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;76&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;L key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyM&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;77&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;M key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyN&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;78&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;N key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyO&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;79&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;O key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyP&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;80&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;P key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyQ&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;81&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;Q key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyR&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;82&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;R key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyS&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;83&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;S key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyT&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;84&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;T key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyU&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;85&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;U key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyV&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;86&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;V key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyW&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;87&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;W key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyX&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;88&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;X key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyY&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;89&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;Y key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyZ&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;90&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;Z key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Key0 Through Key9 Are the Same as Their ASCII Equivalents: '0'
Through '9&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;

&lt;table class="MsoNormalTable" cellpadding="0" cellspacing="0"&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Constant&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey0&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;48&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;0 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey1&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;49&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;1 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey2&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;50&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;2 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey3&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;51&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;3 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey4&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;52&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;4 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey5&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;53&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;5 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey6&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;54&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;6 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey7&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;55&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;7 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey8&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;56&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;8 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKey9&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;57&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;9 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Keys on the Numeric Keypad&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;

&lt;table class="MsoNormalTable" cellpadding="0" cellspacing="0"&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Constant&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad0&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;96&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;0 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad1&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;97&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;1 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad2&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;98&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;2 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad3&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;99&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;3 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad4&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;100&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;4 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad5&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;101&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;5 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad6&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;102&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;6 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad7&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;103&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;7 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad8&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;104&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;8 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyNumpad9&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;105&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;9 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyMultiply&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;106&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;MULTIPLICATION SIGN (*) key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyAdd&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;107&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;PLUS SIGN (+) key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeySeparator&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;108&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;ENTER (keypad) key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeySubtract&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;109&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;MINUS SIGN (-) key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyDecimal&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;110&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;DECIMAL POINT(.) key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyDivide&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;111&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;DIVISION SIGN (/) key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/table&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Function Keys&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;


 &lt;table class="MsoNormalTable" cellpadding="0" cellspacing="0"&gt;&lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Constant&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Value&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;Description&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF1&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;112&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F1 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF2&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;113&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F2 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF3&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;114&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F3 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF4&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;115&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F4 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF5&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;116&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F5 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF6&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;117&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F6 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF7&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;118&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F7 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF8&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;119&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F8 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF9&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;120&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F9 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF10&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;121&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F10 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF11&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;122&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F11 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF12&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;123&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F12 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF13&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;124&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F13 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF14&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;125&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F14 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF15&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;126&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F15 key&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;b&gt;&lt;span&gt;vbKeyF16&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;127&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
  &lt;/td&gt;
  &lt;td&gt;
  &lt;p class="MsoNormal"&gt;&lt;font face="Arial"&gt;&lt;span&gt;F16 key&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;u&gt;&lt;b&gt;Download links:&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;A sample form to show the use of shortcuts, print with CTRL-P, format a richtext with CTRL+B, CTRL+I, CTRL+U. &lt;a href="http://www.foxite.com/uploads/98436cf7-a68a-4be5-9039-16706f56db9a.zip"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;wmhandler.h (windows messaging handler h file): &lt;a href="http://www.foxite.com/uploads/63c8d409-e814-4c13-a1e9-a7c0de6c6992.txt"&gt;here &lt;/a&gt;(change its extension to .h)&lt;/li&gt;&lt;/ul&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;&lt;u&gt;Some resources:&lt;/u&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;VFP help.&lt;/li&gt;&lt;li&gt;KeyPress() event: &lt;a href="http://msdn.microsoft.com/en-us/library/aa733631%28VS.60%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa733631(VS.60).aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;KeyUp() and KeyDown():&lt;a href="http://msdn.microsoft.com/en-us/library/aa445497%28VS.60%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa445497(VS.60).aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Key Code Constants for keyup() and keydown(): &lt;a href="http://msdn.microsoft.com/en-us/library/0z084th3%28VS.80%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/0z084th3(VS.80).aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ASCII character codes chart 1 (0-127): &lt;a href="http://msdn.microsoft.com/en-us/library/60ecse8t%28VS.71%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/60ecse8t(VS.71).aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ASCII character codes chart 2 (128-255): &lt;a href="http://msdn.microsoft.com/en-us/library/9hxt0028%28VS.71%29.aspx"&gt;http://msdn.microsoft.com/en-us/library/9hxt0028(VS.71).aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;- &lt;font color="#006400"&gt;&lt;b&gt;&lt;i&gt;Ammar Hadi ................ Iraq&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=8616" width="1" height="1"&gt;</description></item><item><title>Sorting the Grid by Header Clicking Asc / Dec</title><link>http://weblogs.foxite.com/ammarhadi/archive/2009/06/19/8530.aspx</link><pubDate>Fri, 19 Jun 2009 17:48:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:8530</guid><dc:creator>AmmarHadi</dc:creator><slash:comments>1</slash:comments><comments>http://weblogs.foxite.com/ammarhadi/comments/8530.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/ammarhadi/commentrss.aspx?PostID=8530</wfw:commentRss><description>&lt;br&gt;In a recent thread about sorting a grid by clicking its headers, I explained a procedure to do that. I think posting it in my blog could be useful for others.&lt;br&gt;&lt;br&gt;the thread post is &lt;a href="http://www.foxite.com/archives/0000231960.htm"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;I improved the code and there is a link below to download a sample form.&lt;br&gt;&lt;br&gt;You should have 2 icons in your project, one for descending (a small arrow downward) and the other for ascending (small arrow upward).&lt;br&gt;&lt;br&gt;In the init event or at design time, add the appropriate icon to the appropriate header(picture property) so that the correct sorting type on the correct index is reflected when you first show the form.&lt;br&gt;&lt;br&gt;The cursor that is the source of the grid should be indexed on all the fields you want to sort on (by using &lt;span&gt;INDEX ON&lt;/span&gt; ... ).&lt;br&gt;For the code in the header click event to work, it need that when you define indexes start in the same order of columns that the grid start with, so that the first &lt;span&gt;INDEX ON&lt;/span&gt; code will create index on the first field column. This is because (it is easy for me) I will use index numbers to deal with sorting. Then you set the order to the index you put the picture in its column header. This way you can Just copy paste the code you put in column header1 click to all other headers and just change the index number in the code to reflect the underlying field/column to sort on.&lt;br&gt;&lt;br&gt;the code of the first header click event will be like this:&lt;br&gt;&lt;br&gt;** First column header click event&lt;br&gt;&lt;span&gt;SELECT&lt;/span&gt; tempStudents&lt;br&gt;&lt;span&gt;IF VAL(SYS(&lt;/span&gt;21&lt;span&gt;))&lt;/span&gt;&amp;lt;&amp;gt;1&amp;nbsp; &lt;span&gt;&amp;amp;&amp;amp; current index number&lt;/span&gt;&lt;br&gt;&amp;nbsp; &lt;span&gt;SET ORDER TO&lt;/span&gt; 1 &lt;span&gt;IN&lt;/span&gt; tempStudents&lt;br&gt;&lt;span&gt;ELSE&lt;/span&gt;&lt;br&gt;&amp;nbsp; &lt;span&gt;IF DESCENDING(&lt;/span&gt;1,"tempStudents"&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;SET ORDER TO&lt;/span&gt; 1 &lt;span&gt;IN &lt;/span&gt;tempStudents &lt;span&gt;ASCENDING&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &lt;span&gt;ELSE&lt;/span&gt;&lt;br&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET ORDER TO &lt;/span&gt;1 &lt;span&gt;IN&lt;/span&gt; tempStudents &lt;span&gt;DESCENDING&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;span&gt; ENDIF&lt;/span&gt;&lt;br&gt;&lt;span&gt;ENDIF&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;THIS.PARENT.PARENT.SETALL(&lt;/span&gt;"picture","","HEADER"&lt;span&gt;)&lt;/span&gt;&lt;br&gt;&lt;span&gt;THIS.PICTURE=IIF(DESCENDING(&lt;/span&gt;1,"tempStudents"&lt;span&gt;), THISFORM.picdesc, THISFORM.picace) &lt;span&gt;&amp;amp;&amp;amp; the sorting icon&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;GO TOP IN&lt;/span&gt; tempStudents&lt;br&gt;&lt;span&gt;THIS.PARENT.PARENT.REFRESH&lt;/span&gt;&lt;br&gt;&lt;span&gt;THIS.PARENT.SETFOCUS&lt;/span&gt;&lt;br&gt;&lt;br&gt;In the header of column2, just change the (one)s in the code to 2 and so on for the other headers.&lt;br&gt;&lt;br&gt;Download the sample and study it to be more oriented about the idea.&lt;br&gt;&lt;br&gt;Here is a picture of the sample form:&lt;br&gt;&lt;img src="http://www.foxite.com/uploads/0acee09d-fd36-46cd-b9c1-9411ccbd6fc9.jpg"&gt;&lt;br&gt;And here is The sample form to download:&lt;br&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.foxite.com/uploads/5c545b64-b731-4c6f-bae4-4e20ed0c6c5b.rar"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;http://www.foxite.com/uploads/5c545b64-b731-4c6f-bae4-4e20ed0c6c5b.rar&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;Best Regards&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=8530" width="1" height="1"&gt;</description></item><item><title>The First Visual FoxPro Programmers Group in Iraq</title><link>http://weblogs.foxite.com/ammarhadi/archive/2009/06/18/8522.aspx</link><pubDate>Wed, 17 Jun 2009 22:30:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:8522</guid><dc:creator>AmmarHadi</dc:creator><slash:comments>7</slash:comments><comments>http://weblogs.foxite.com/ammarhadi/comments/8522.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/ammarhadi/commentrss.aspx?PostID=8522</wfw:commentRss><description>&lt;a href="http://picasaweb.google.com/lh/photo/vTAnRnMc53rg24VyW261YA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_KbEuw49Tj7w/SjuICjJ_x2I/AAAAAAAAADY/16KVgBX7Rg8/s800/iraqivfppg-logo-max.jpg" /&gt;&lt;/a&gt;
&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;I would be happy to announce to my friends here in foxite and in Iraq that I am working to accomplish the first Visual FoxPro Programmers Group in Iraq. In fact, I can say it will be the first programmers group in Iraq.&lt;br&gt;&lt;br&gt;&amp;nbsp; It was my dream to build this group since about more than 4 years ago, and at that time I send an e-mail to one of the Iraqi Foxers who is a member in foxite too (we never met) and told him that I will work on creating a foxpro group in Iraq. He show his readiness to help me on that. But at that time, I was totally engaged in my Medical study to get the certificate of Neurosurgical Profession. Now it is about a year and a half since I finished my study and training and got the certificate to work as a professional neurosurgeon (with very good marks ;-D ..... ). Now I can say that I got some more time to make my dream come true.&lt;br&gt;&lt;br&gt;&amp;nbsp; I was hesitant to announce this group. I was waiting for it to be more stabilized and active to announce it but several e-mails from &lt;span&gt;Boudewijn Lutgerink &lt;/span&gt;encouraged me to announce about this group early. Thanks to Boudewijn, his idea is that this early announcement is a good wake up call to Iraqi Foxers (or I can say to Iraqi Programmers in general).&lt;br&gt;&lt;br&gt;&amp;nbsp; So, I e-mailed several Iraqi Foxers who are members in foxite and told them about the group. Till now I got a response from 4 members in different cities in Iraq and they was happy about it. I am waiting for the response of others and trying to hunt more (foxes) in the (forest) :-) &lt;br&gt;&lt;br&gt;&amp;nbsp; At the time being I got a Google Account for the group in which I build a simple web page, a Discussion Panel, a Blog. Google Account will give us great sharing features with its documents, photos, Calendar, gmail audio and video and text chat and more. I posted these news to my new Iraqi friends to start arranging the work of the group, getting to know each other and build a friendship that will boost our passion to share knowledge and arrange for the first FoxPro Developers Conference ( I hope that be in the near future).&lt;br&gt;&lt;br&gt;&amp;nbsp; We are just in the first step ... I hope we can make it a solid reality.&lt;br&gt;&lt;br&gt;&amp;nbsp;We wish to hear from all of you foxer friends, about your experience in
this regard and your advices to us as a newly born foxpro group.&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&lt;b&gt;The Iraqi Visual FoxPro Programmers Group,&lt;br&gt;&lt;br&gt;Google Mail: &lt;a&gt;iraqi.vfppg@gmail.com&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.google.com/profiles/iraqi.vfppg"&gt;Google Profile&lt;/a&gt;&lt;br&gt;&lt;a href="http://sites.google.com/site/iraqivfppg/"&gt;Site&lt;/a&gt;&lt;br&gt;&lt;a href="http://groups.google.com/group/iraqivfppg-discussion-panel"&gt;Discussion Panel&lt;/a&gt;&lt;br&gt;&lt;a href="http://iraqivfppg.blogspot.com/"&gt;Blog&lt;/a&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;i&gt;&lt;b&gt;Ammar Hadi&lt;br&gt;June 2009&lt;/b&gt;&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=8522" width="1" height="1"&gt;</description></item><item><title>Dynamic Flexible Invoice Report</title><link>http://weblogs.foxite.com/ammarhadi/archive/2009/05/13/8437.aspx</link><pubDate>Wed, 13 May 2009 03:37:00 GMT</pubDate><guid isPermaLink="false">8827bd1c-7596-4a8f-b0de-f59ce9ede522:8437</guid><dc:creator>AmmarHadi</dc:creator><slash:comments>5</slash:comments><comments>http://weblogs.foxite.com/ammarhadi/comments/8437.aspx</comments><wfw:commentRss>http://weblogs.foxite.com/ammarhadi/commentrss.aspx?PostID=8437</wfw:commentRss><description>Hello my friends ...&lt;br&gt;I would like to publish my first weblog post about a method I use to modify the report I use to print invoices.&lt;br&gt;In this method I get benefit from 2 of the properties of report objects that is:
&lt;font color="#0000ff"&gt;Comment &lt;/font&gt;and &lt;font color="#0000ff"&gt;User data&lt;/font&gt; in the  tab of report object properties dialog.
I use these properties to assign additional data to the object so that I can find it when I query the source table of the report and that will allow me to specifically change the position, width .. etc that will allow me to generate a dynamic report.&lt;br&gt;I uploaded a form &lt;a href="http://www.foxite.com/uploads/f6ea74c0-8f2a-4d91-8889-a54123669e9d.zip"&gt;&lt;span&gt;here&lt;/span&gt;&lt;/a&gt; and its associated required table and report to show an example of the method.
In this form I designed a grid that will display the data of an invoice in details. The user can choose which column to print and can change the order of columns to fit his/her business needs.
With this Idea, I have an application that can be used by different businesses without the need for me to design a special invoice report for each customer. Most of the required data are available and the user can select the way he need his invoice and the way its columns ordered and these settings are saved (in a typical application) and the user can get the invoice printed in the way he wants.&lt;br&gt;To be oriented about this technique, &lt;a href="http://www.foxite.com/uploads/f6ea74c0-8f2a-4d91-8889-a54123669e9d.zip"&gt;&lt;span&gt;download the zipped folder&lt;/span&gt;&lt;/a&gt; and run the form .
Select the columns you need to print and reorder the columns in the way you want and then push the print button, select the folder that you downloaded that contain the needed report and table (rptinvoice.frx, rptinvoice.frt, BasicReport.dbf, BasicReport.cdx).
Print the invoice and you will get what I need you to see. change orders and select and deselct again and see the change in the printed invoice.&lt;br&gt;Note that I disabled some columns form being deselected. This is just to be more realistic, some columns are essential in the invoice.&lt;br&gt;You need to browse the table (basicReport.dbf) and see its structure:
You start by designing a complete invoice report and then take the needed data like the left position and width from the source .frx table of the report. The other fields in BasicReport.dbf decide which column is printable and which need to be resized.
The main thing in the report, is that I (named) invoice headers, column fields, and the longitudinal separators.&lt;br&gt;The example form I posted is simple and not intended for use as is but it will give you the idea on how you can design similar one for your business applications. And there are many aspects and ways to use this idea and the code I used in the form is not the optimum even for me, I just intended to show the idea. 

I use similar mechanism in one of my applications without the need to customize my reports for clients. They choose what and how the data they need to be printed in their invoices.&lt;br&gt;&lt;br&gt;I will be glad to read your questions or suggestions.&lt;br&gt;&lt;br&gt;here are some explanatory pictures:&lt;br&gt;&lt;br&gt;&lt;br&gt;This is the sample form:&lt;br&gt;&lt;br&gt;&lt;a href="http://picasaweb.google.com/lh/photo/KPZ5Nu5cpsKcxjaLBUoq4w?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_tYT93gYxTdQ/SgqIEp6HdaI/AAAAAAAAAKU/1zhfn4LgBGU/s800/1.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;...&lt;br&gt;Select the folder you downloaded that contains the necessary files:&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/4fYCqDhmdgscNBckgfb-aA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_tYT93gYxTdQ/SgqIE0o6LpI/AAAAAAAAAKY/dZQG6thqdzQ/s800/2.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;And here is the printed invoice reflecting the first set of selections in the first image above&lt;br&gt;&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/M_5qRdwjpdSA7Upg-gYFlw?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_tYT93gYxTdQ/SgqIE4JmDmI/AAAAAAAAAKc/MDLYYcWXeRQ/s800/3.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;And in the following photo, different set of columns selected and the columns re-ordered:&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/DryX0-X2alEln8DWwkJiig?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_tYT93gYxTdQ/SgqIEwdx0CI/AAAAAAAAAKg/JblzZL4h0VQ/s800/4.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;The resulting printed invoice will be like this:&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/swP27CyZvsO4ERN57p9V4w?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_tYT93gYxTdQ/SgqIE-kRqBI/AAAAAAAAAKk/OxktYsUonS4/s800/5.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;And bellow is a picture for the BasicReport.dbf, notice the fields that are used to control printability, resizability and the order of the named columns. R_width and R_left are the original width and left properties of the report objects that are to be manipulated, taken from the rptinvoice.frx table (fields Width and Hpos, respectively) after primary design, to be as a basic for any furthur calculations needed to reposition and resize the controls.&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/5Bfj1ZWBvHgdgtIKIBPiiA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_tYT93gYxTdQ/SgqLbcVkVwI/AAAAAAAAAKo/eFoDOF0r9h8/s800/6.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;And bellow is a picture for the report in the designer in its basic primary alignments. What I did is that I assigned (names and types) to the controls&amp;nbsp; that I want to manipulate. Names are in the user data property and Types in the Comment property of the object:&lt;br&gt;&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Olj-JthqnEDrToWRdTP_5g?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_tYT93gYxTdQ/SgqLbsVk83I/AAAAAAAAAKw/nIQICClzB30/s800/8.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;Below is a picture of the report .frx as a table. Notice the Comment and User fields that I used to store the identifying data of the object&lt;br&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/Z8fV7yI4sPa10Y53Bu45Ug?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_tYT93gYxTdQ/SgqLbv2t2dI/AAAAAAAAAK0/1TuEyYmo3Ro/s800/9.jpg"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;From &lt;a href="http://picasaweb.google.com/ahk.i.s.77/FoxiteWeblog?feat=embedwebsite"&gt;Foxite Weblog&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br&gt;I wish that you study the code I included in the form and let me know your opinions.&lt;br&gt;&lt;br&gt;Ammar Hadi ..... Iraq&lt;br&gt;...&lt;br&gt;&lt;img src="http://weblogs.foxite.com/aggbug.aspx?PostID=8437" width="1" height="1"&gt;</description><enclosure url="http://www.foxite.com/uploads/511ec375-1796-4d0f-9f05-95d74e6b2215.zip" length="14305" type="application/x-zip-compressed" /></item></channel></rss>