home *** CD-ROM | disk | FTP | other *** search
/ stazsoftware.com / www.stazsoftware.com.tar / www.stazsoftware.com / futurebasic / tech-notes.php?v=11.orig < prev    next >
Text File  |  2010-08-22  |  10KB  |  339 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <title>Staz Software</title>
  5. <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
  6. <style type="text/css">
  7.  
  8. body{
  9. background-color: #365488;
  10. border-top: 20px solid #365488;
  11. margin: 0px;
  12. }
  13.  
  14. a{
  15. color: #00f;
  16. text-decoration: none;
  17. }
  18.  
  19. a:hover{
  20. color: #00f;
  21. text-decoration: underline;
  22. }
  23.  
  24. p{
  25. margin: 0px;
  26. padding-left: 0px;
  27. padding-top: 0px;
  28. padding-right: 0px;
  29. padding-bottom: 10px;
  30. }
  31.  
  32. h1{
  33. font-size: 23px;
  34. padding-left: 2px;
  35. padding-top: 4px;
  36. padding-right: 5px;
  37. padding-bottom: 2px;
  38. margin-left: -2px;
  39. margin-top: 0px;
  40. margin-right: 0px;
  41. margin-bottom: 10px;
  42. background-color: #e7edf6;
  43. }
  44.  
  45. h2{
  46. font-size: 19px;
  47. padding: 0px;
  48. padding: 0px;
  49. margin-left: 0px;
  50. margin-top: 0px;
  51. margin-right: 0px;
  52. margin-bottom: 10px;
  53. }
  54.  
  55. h3{
  56. font-size: 15px;
  57. padding: 0px;
  58. margin-left: 0px;
  59. margin-top: 0px;
  60. margin-right: 0px;
  61. margin-bottom: 10px;
  62. }
  63.  
  64. hr{
  65. background-color: #b7bbc2;
  66. height: 1px;
  67. border: 0px;
  68. margin-top: 0px;
  69. margin-left: 0px;
  70. margin-bottom: 10px;
  71. margin-right: 0px;
  72. padding: 0px;
  73. }
  74.  
  75. span#pre,span.pre{
  76. color: #996633;
  77. font-size: 12px;
  78. font-family: monospace;
  79. }
  80.  
  81. pre{
  82. color: #996633;
  83. font-size: 12px;
  84. font-family: monospace;
  85. padding: 0;
  86. margin-left: 0px;
  87. margin-top: 0px;
  88. margin-right: 0px;
  89. margin-bottom: 10px;
  90. }
  91.  
  92. table.w{
  93. background-image: url('../graphics/site/window/middle.png');
  94. background-repeat: repeat-y;
  95. width: 880px;
  96. margin-left: auto;
  97. margin-right: auto;
  98. }
  99.  
  100. td.w-top{
  101. background-image: url('../graphics/site/window/top.png');
  102. background-repeat: no-repeat;
  103. padding-left: 15px;
  104. padding-right: 15px;
  105. text-align: center;
  106. height: 60px;
  107. min-height: 60px;
  108. font-size: 1px;
  109. line-height: 1px;
  110. }
  111.  
  112. td.w-middle{
  113. padding-top: 0px;
  114. padding-left: 15px;
  115. padding-right: 15px;
  116. vertical-align: top;
  117. }
  118.  
  119. td.w-bottom{
  120. background-image: url('../graphics/site/window/bottom.png');
  121. background-repeat: no-repeat;
  122. height: 25px;
  123. min-height: 25px;
  124. }
  125.  
  126. table.w-content{
  127. float: left;
  128. clear: none;
  129. border: 10px solid #e7edf6;
  130. width: 650px;}
  131.  
  132. td.w-content{
  133. border-left: 1px solid #cfd4dc;
  134. border-top: 1px solid #cfd4dc;
  135. border-right: 1px solid #b7bbc2;
  136. border-bottom: 1px solid #b7bbc2;
  137. padding-left: 20px;
  138. padding-top: 20px;
  139. padding-right: 20px;
  140. padding-bottom: 10px;
  141. background-color: #fff;
  142. vertical-align: top;
  143. min-height: 500px;
  144. }
  145.  
  146. table.w-sidebar{
  147. border-top: 10px solid #e7edf6;
  148. border-right: 10px solid #e7edf6;
  149. border-bottom: 10px solid #e7edf6;
  150. background-color: #e7edf6;
  151. width: 199px;
  152. float: right;
  153. clear: none;
  154. }
  155.  
  156. td.w-sidebar{
  157. border-left: 1px solid #cfd4dc;
  158. border-top: 1px solid #cfd4dc;
  159. border-right: 1px solid #b7bbc2;
  160. border-bottom: 1px solid #b7bbc2;
  161. background-color: #fff;
  162. text-align: center;
  163. padding-left: 10px;
  164. padding-top: 20px;
  165. padding-right: 10px;
  166. padding-bottom: 10px;
  167. }
  168.  
  169. td.w-sidebar img{
  170. border: 0px;
  171. }
  172.  
  173. table.w-tabs{
  174. background-image: url('../graphics/site/tabs/background.png');
  175. background-position: bottom center;
  176. height: 40px;
  177. margin-top: auto;
  178. }
  179.  
  180. td.w-tabs{
  181. text-align: center;
  182. vertical-align: bottom;
  183. }
  184.  
  185. td.w-tabs img{
  186. border: 0px;
  187. }
  188.  
  189. td.w-tabs a{
  190. border: 0px;
  191. }
  192.  
  193. input.text-box{
  194. border-left: 1px solid #b7bbc2;
  195. border-top: 1px solid #b7bbc2;
  196. border-right: 1px solid #cfd4dc;
  197. border-bottom: 1px solid #cfd4dc;
  198. background-color: #fff;
  199. }
  200.  
  201. input.push-button{
  202. border-left: 1px solid #cfd4dc;
  203. border-top: 1px solid #cfd4dc;
  204. border-right: 1px solid #b7bbc2;
  205. border-bottom: 1px solid #b7bbc2;
  206. background-color: #fff;
  207. }
  208. </style>
  209. </head>
  210. <body>
  211. <table class="w" border="0" cellpadding="0" cellspacing="0">
  212. <tr>
  213. <td class="w-top">
  214.  
  215. <img src="../graphics/site/window/title.png" alt="Staz Software">
  216. <table class="w-tabs" border="0" cellpadding="0" cellspacing="0" width="100%">
  217. <tr>
  218. <td class="w-tabs"><a href="../index.php"><img src="../graphics/site/tabs/home.png" alt="Home"></a><a href="../futurebasic/index.php"><img src="../graphics/site/tabs/active-futurebasic.png" alt="FutureBasic"></a><a href="../shareware/index.php"><img src="../graphics/site/tabs/shareware.png" alt="Shareware"></a><a href="../order/index.php"><img src="../graphics/site/tabs/order.png" alt="Order"></a><a href="../contact/index.php"><img src="../graphics/site/tabs/contact.png" alt="Contact"></a></td>
  219. </tr>
  220. </table>
  221. </td>
  222. </tr>
  223.  
  224. <tr>
  225. <td class="w-middle">
  226.  
  227. <table class="w-content" border="0" cellpadding="0" cellspacing="0">
  228. <tr>
  229. <td class="w-content">
  230. <h1>Tech Notes</h1><h2>Building and Using Sheet Windows</h2><p>It only takes a few lines to build a sheet window and a few lines to dispose of it. I'll cover that in just a second. The problem is that we do not freeze our computers while we are waiting for input. For example, if a sheet window over one document displays the "Save before closing?" dialog, there is no reason that other documents should not be useable. The same is true of anything that might be asked of a single document. In fact, there may be a dozen "Save before closing?" sheets visible at one time and you should technically be ready to service each of them independantly. I bet that makes your brain hurt!</p>
  231.  
  232. <p>Why don't we start with the simple steps required for building a sheet window. I will ignore sheet <i>alerts</i>. They're for whimps. Real mean don't drink wine coolers and they don't freeze up a program with alerts.</p>
  233.  
  234. <pre>
  235. // create the window
  236.  
  237. appearance window -sheetWNum , , @r , _kSheetAlertWindowClass
  238.  
  239. // put button and fields in here
  240.  
  241. // now display the window
  242. get window wNum , parentW
  243. get window sheetWNum , sheetW
  244. err  = fn ShowSheetWindow( sheetW, parentW ) // show dis sheet</span>
  245. </pre>
  246.  
  247. <p>At some point in time, Bubba Q. Citizen is going to get tired of this sheet and click a button. Here is how we push the flush lever:</p>
  248.  
  249. <pre>
  250. dim as windowRef @ sheetW
  251. dim as OSStatus    err
  252. dim as long        sheetNum
  253.  
  254. sheetNum = window ( _outputWnd )
  255. get window sheetNum , sheetW
  256. err  = fn HideSheetWindow( sheetW )
  257. window close sheetNum
  258. </pre>
  259.  
  260. <p>Here's the $64 question: How did we know that Bubba clicked in a sheet window? And how did we know what window that sheet belonged to?</p>
  261.  
  262. <p>The answer is going to be a simple one: We set each sheet window to have an ID number equal to the window that it covered <i>plus </i> 50,000. We can deal with the dialog events by looking at the output window (which will be greater than 50,000). <i>Or...</i></p>
  263.  
  264. <p>I have a slightly different style of programming. I enumerate my windows in increments of 1000. My first window is 1000, then 2000, etc. All controls and fields inside of those windows are numbered inside of the window's range (i.e. 1001 , 1002 , 1003...). I know if button number 4007 is clicked that it belongs to window number 4000. I know if button number 51003 is clicked, it belongs to button #3 in a sheet window that is over document number 1000. Know what I mean, Vern?</p>
  265.  
  266. <p>The enumeration is easy:</p>
  267.  
  268. <pre>
  269. begin enum 1000, 1000
  270.  _myfirstWindow
  271.  _mySecondWindow
  272. end enum
  273.  
  274. begin enum
  275.  _okFirst = _myfirstWindow + 1
  276.  _cancelFirst
  277.  _entryField
  278.  _promptField
  279. end enum
  280.  
  281. _sheetWindowAdd = 50000
  282.  
  283. begin enum
  284.  _sheetSave = _sheetWindowAdd + 1
  285.  _sheetDontSave
  286.  _SheetCancel
  287.  _sheetOk
  288.  _sheetDeletePage
  289. end enum
  290. </pre>
  291.  
  292. <p>The pieces are falling into place now. If we receive a dialog event, and it is a button click, we know (because of the button's ID) that it is in a sheet window. If you do not use this enumeration system, then you <i>still </i>know it is in the sheet window because of the number of the output window. It is higher than <span class="pre">_sheetWindowAdd</span>. Given this information, you can branch to your sheet window handler and prossible/probably close the sheet window.</p>
  293.  
  294. <p>I've built a complete project for your inspection. No matter what methodology you use, fancy enumeration, high numbered output windows, spagettie code... you can still work sheet windows into your application.</p>
  295.  
  296. <p>Click <a href = "http://www.stazsoftware.com/downloads/sheets.sit">here</a> to download the file.</p>
  297. </td>
  298. </tr>
  299. </table>
  300.  
  301. <table class="w-sidebar" border="0" cellpadding="0" cellspacing="0">
  302. <tr>
  303. <td class="w-sidebar">
  304. <p><a href="index.php"><img src="../graphics/fb_icon.png" alt="FutureBASIC"></a></p>
  305.  
  306. <p><a href="demo.php">Demo</a></p>
  307.  
  308. <p><a href="../order/index.php">Order</a></p>
  309.  
  310. <p><a href="tour.php">Tour</a></p>
  311.  
  312. <p><a href="tech-notes.php">Tech Notes</a></p>
  313.  
  314. <p><a href="faq.php">FAQ</a></p>
  315.  
  316. <p><a href="sample-code.php">Sample Code</a></p>
  317.  
  318. <p><a href="web-sites.php">Web Sites</a></p>
  319.  
  320. <p><a href="mailing-list.php">Mailing List</a></p>
  321.  
  322. <p><a href="system-requirements.php">System<br>Requirements</a></p>
  323.  
  324. <form method="GET" action="http://www.google.com/search" style="margin: 0; padding: 0;">
  325. <p style="margin: 0; padding: 0 0 5px 0; text-align: right;"><input type="hidden" id="ie" name="ie" value=UTF-8><input type="hidden" id="oe" name="oe" value=UTF-8><input type="text" name="q" size="15" maxlength="255" value="" style="width: 155px;" class="text-box"></p>
  326. <p style="margin: 0; padding: 0; text-align: right;"><input type="submit" name="btnG" value="Search" class="push-button"><input type="hidden" name="domains" value="stazsoftware.com"><input type="hidden" name="sitesearch" value=""><input type="hidden" name="sitesearch" value="stazsoftware.com" checked></p>
  327. </form></td>
  328. </tr>
  329. </table>
  330. </td>
  331. </tr>
  332.  
  333. <tr>
  334. <td class="w-bottom"><img src="../graphics/site/blank.gif" width="2" height="2" alt="blank"></td>
  335. </tr>
  336. </table>
  337.  
  338. </body>
  339. </html>