home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / INFO / IINFO53.MSA / TEXT_NO_HOLES.TXT < prev    next >
Text File  |  1991-07-11  |  4KB  |  137 lines

  1.  
  2. ACCESSORY DEMO FOR GFA BASIC
  3. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.                                by ACE member Malcolm Hardy
  5.  
  6. GFA Basic has an annoying problem concerning the use of 
  7. accessories. After using an accessory a hole is left on the 
  8. screen. This problem has not been corrected with version 3.5.
  9.  
  10. One solution to this problem is to disable the accessories 
  11. altogether or to provide a mechanism of 
  12. disabling all other menu entries excepting the accessories when 
  13. they are to be used and then enabling them again after use of the 
  14. accessory. Neither of these methods are very satisfactory. 
  15. This is one way of handling the problem. 
  16. The solution is as follows;
  17.  
  18. 1. Create a window the size of the work area
  19. 2. Save the screen 
  20. 3. Include an 'ON MENU MESSAGE ' menu event handler
  21.  
  22. After an accessory is closed a window update message is sent to 
  23. the AES. In this case the window will be the
  24. area of screen lying below the menu bar ie; the workspace.
  25. This redraw of the window will be detected by the 'ON MENU 
  26. MESSAGE' which can in turn call a subroutine to redraw the screen
  27. to remove the hole left by the accessory. 
  28. A window must be created in order to detect the message event. 
  29. It is very important that you remember to deallocate the window
  30. otherwise the number of available window handles will decrease,
  31. affecting any applications which are run afterwards. 
  32.  
  33. The following is a listing of the demo GFA program to handle
  34. accessories;
  35.  
  36. Please Note; This code is GFA Basic version 3.5
  37.              A compiled version is included on this disk.  
  38.  
  39. REM **************************************************************
  40. REM *   NO ACCESSORY HOLE DEMO  - BY MALCOLM HARDY   JUNE 1991   *
  41. REM **************************************************************
  42. '
  43. ' Set mouse to default
  44. DEFMOUSE 0
  45. '
  46. DIM item_menu$(30)
  47. item_menu$(0)=" Desk  "
  48. item_menu$(1)=" Info           "
  49. item_menu$(2)="----------------"
  50. ' The following menu entries must always be included otherwise your
  51. ' menu will lock up whenever accessories have been loaded
  52. item_menu$(3)="                "   ! Reserved for accessory 1
  53. item_menu$(4)="                "   ! Reserved for accessory 2
  54. item_menu$(5)="                "   ! Reserved for accessory 3
  55. item_menu$(6)="                "   ! Reserved for accessory 4
  56. item_menu$(7)="                "   ! Reserved for accessory 5
  57. item_menu$(8)="                "   ! Reserved for accessory 6
  58. item_menu$(9)=""
  59. item_menu$(10)=" File  "
  60. item_menu$(11)=" Quit    "
  61. item_menu$(12)=""
  62. item_menu$(13)=""
  63. MENU item_menu$()
  64. '
  65. ' Set up work area window for screen redraws
  66. GOSUB create_window
  67. '
  68. ' Monitor Menu events
  69. ON MENU GOSUB handle_menu
  70. '
  71. ' Monitor Window events
  72. ON MENU MESSAGE GOSUB window_event
  73. '
  74. DO
  75.   ON MENU
  76. LOOP
  77. '
  78. PROCEDURE handle_menu
  79.   MENU OFF
  80.   item%=MENU(0)
  81.   '
  82.   SELECT item%
  83.   CASE 1
  84.     '
  85.     ' Info message
  86.     ALERT 0,"|   No Accessory Hole Demo    |     By Malcolm Hardy
  87.               |    May 1991  ",1," OK ",a%
  88.     '
  89.   CASE 11
  90.     '
  91.     ' When Quit is selected close the window and delete the window
  92.     ' allocation handle for reuse by other applications
  93.     '
  94.     ~WIND_CLOSE(hndle&)      !This function closes the work window
  95.     ~WIND_DELETE(hndle&)     !This function frees the window handle
  96.                              !for subsequent use by other 
  97.                              !applications
  98.     '
  99.     STOP
  100.   ENDSELECT
  101.   '
  102. RETURN
  103. '
  104. '
  105. PROCEDURE window_event
  106.   '
  107.   ' If a redraw of a rectangular window is required eg. an accessory 
  108.   ' was selected put back the screen saved on start up
  109.   '
  110.   IF MENU(1)=20
  111.     SPUT screen$
  112.   ENDIF
  113. RETURN
  114. '
  115. PROCEDURE create_window
  116.   ' Get work area size
  117.   ~WIND_GET(0,4,xwork&,ywork&,wwork&,hwork&)
  118.   '
  119.   ' Fill workarea with a filled rectangle
  120.   DEFFILL ,2,4
  121.   PBOX xwork&-1,ywork&-1,wwork&+xwork&,hwork&+ywork&
  122.   DEFFILL ,1
  123.   '
  124.   ' Save screen on setup
  125.   SGET screen$
  126.   '
  127.   ' Allocate a new window with dimensions of the work area
  128.   hndle&=WIND_CREATE(&X0,xwork&,ywork&,wwork&,hwork&)
  129.   '
  130.   ' Open the new window using the window handle obtained above
  131.   ~WIND_OPEN(hndle&,xwork&,ywork&,wwork&,hwork&)
  132.   '
  133. RETURN
  134.                
  135.                      <<<<*>>>><<<<*>>>><<<<*>>>>
  136.  
  137.